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

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM WebGL2RenderingContext.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "WebGL2Context.h"
       4             : #include "WebGL2RenderingContextBinding.h"
       5             : #include "WebGLActiveInfo.h"
       6             : #include "WebGLBuffer.h"
       7             : #include "WebGLExtensions.h"
       8             : #include "WebGLFramebuffer.h"
       9             : #include "WebGLProgram.h"
      10             : #include "WebGLQuery.h"
      11             : #include "WebGLRenderbuffer.h"
      12             : #include "WebGLRenderingContextBinding.h"
      13             : #include "WebGLSampler.h"
      14             : #include "WebGLShader.h"
      15             : #include "WebGLShaderPrecisionFormat.h"
      16             : #include "WebGLSync.h"
      17             : #include "WebGLTexture.h"
      18             : #include "WebGLTransformFeedback.h"
      19             : #include "WebGLUniformLocation.h"
      20             : #include "WebGLVertexArray.h"
      21             : #include "WrapperFactory.h"
      22             : #include "jsfriendapi.h"
      23             : #include "mozilla/OwningNonNull.h"
      24             : #include "mozilla/Preferences.h"
      25             : #include "mozilla/dom/BindingUtils.h"
      26             : #include "mozilla/dom/DOMJSClass.h"
      27             : #include "mozilla/dom/HTMLCanvasElement.h"
      28             : #include "mozilla/dom/HTMLImageElement.h"
      29             : #include "mozilla/dom/HTMLVideoElement.h"
      30             : #include "mozilla/dom/ImageBitmap.h"
      31             : #include "mozilla/dom/ImageData.h"
      32             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      33             : #include "mozilla/dom/Nullable.h"
      34             : #include "mozilla/dom/PrimitiveConversions.h"
      35             : #include "mozilla/dom/TypedArray.h"
      36             : #include "mozilla/dom/UnionConversions.h"
      37             : #include "mozilla/dom/XrayExpandoClass.h"
      38             : #include "nsContentUtils.h"
      39             : 
      40             : namespace mozilla {
      41             : namespace dom {
      42             : 
      43             : bool
      44           0 : Uint32ArrayOrUnsignedLongSequence::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
      45             : {
      46           0 :   switch (mType) {
      47             :     case eUninitialized: {
      48           0 :       return false;
      49             :       break;
      50             :     }
      51             :     case eUint32Array: {
      52           0 :       rval.setObject(*mValue.mUint32Array.Value().Obj());
      53           0 :       if (!MaybeWrapNonDOMObjectValue(cx, rval)) {
      54           0 :         return false;
      55             :       }
      56           0 :       return true;
      57             :       break;
      58             :     }
      59             :     case eUnsignedLongSequence: {
      60             : 
      61           0 :       uint32_t length = mValue.mUnsignedLongSequence.Value().Length();
      62           0 :       JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
      63           0 :       if (!returnArray) {
      64           0 :         return false;
      65             :       }
      66             :       // Scope for 'tmp'
      67             :       {
      68           0 :         JS::Rooted<JS::Value> tmp(cx);
      69           0 :         for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
      70             :           // Control block to let us common up the JS_DefineElement calls when there
      71             :           // are different ways to succeed at wrapping the object.
      72             :           do {
      73           0 :             tmp.setNumber(mValue.mUnsignedLongSequence.Value()[sequenceIdx0]);
      74           0 :             break;
      75             :           } while (0);
      76           0 :           if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
      77             :                                 JSPROP_ENUMERATE)) {
      78           0 :             return false;
      79             :           }
      80             :         }
      81             :       }
      82           0 :       rval.setObject(*returnArray);
      83           0 :       return true;
      84             :       break;
      85             :     }
      86             :     default: {
      87           0 :       return false;
      88             :       break;
      89             :     }
      90             :   }
      91             : 
      92             :   return false;
      93             : }
      94             : 
      95             : 
      96             : Uint32Array&
      97           0 : OwningUint32ArrayOrUnsignedLongSequence::RawSetAsUint32Array()
      98             : {
      99           0 :   if (mType == eUint32Array) {
     100           0 :     return mValue.mUint32Array.Value();
     101             :   }
     102           0 :   MOZ_ASSERT(mType == eUninitialized);
     103           0 :   mType = eUint32Array;
     104           0 :   return mValue.mUint32Array.SetValue();
     105             : }
     106             : 
     107             : Uint32Array&
     108           0 : OwningUint32ArrayOrUnsignedLongSequence::SetAsUint32Array()
     109             : {
     110           0 :   if (mType == eUint32Array) {
     111           0 :     return mValue.mUint32Array.Value();
     112             :   }
     113           0 :   Uninit();
     114           0 :   mType = eUint32Array;
     115           0 :   return mValue.mUint32Array.SetValue();
     116             : }
     117             : 
     118             : bool
     119           0 : OwningUint32ArrayOrUnsignedLongSequence::TrySetToUint32Array(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
     120             : {
     121           0 :   tryNext = false;
     122             :   { // scope for memberSlot
     123           0 :     Uint32Array& memberSlot = RawSetAsUint32Array();
     124           0 :     if (!memberSlot.Init(&value.toObject())) {
     125           0 :       DestroyUint32Array();
     126           0 :       tryNext = true;
     127           0 :       return true;
     128             :     }
     129             :   }
     130           0 :   return true;
     131             : }
     132             : 
     133             : void
     134           0 : OwningUint32ArrayOrUnsignedLongSequence::DestroyUint32Array()
     135             : {
     136           0 :   MOZ_ASSERT(IsUint32Array(), "Wrong type!");
     137           0 :   mValue.mUint32Array.Destroy();
     138           0 :   mType = eUninitialized;
     139           0 : }
     140             : 
     141             : 
     142             : 
     143             : 
     144             : Sequence<uint32_t>&
     145           0 : OwningUint32ArrayOrUnsignedLongSequence::RawSetAsUnsignedLongSequence()
     146             : {
     147           0 :   if (mType == eUnsignedLongSequence) {
     148           0 :     return mValue.mUnsignedLongSequence.Value();
     149             :   }
     150           0 :   MOZ_ASSERT(mType == eUninitialized);
     151           0 :   mType = eUnsignedLongSequence;
     152           0 :   return mValue.mUnsignedLongSequence.SetValue();
     153             : }
     154             : 
     155             : Sequence<uint32_t>&
     156           0 : OwningUint32ArrayOrUnsignedLongSequence::SetAsUnsignedLongSequence()
     157             : {
     158           0 :   if (mType == eUnsignedLongSequence) {
     159           0 :     return mValue.mUnsignedLongSequence.Value();
     160             :   }
     161           0 :   Uninit();
     162           0 :   mType = eUnsignedLongSequence;
     163           0 :   return mValue.mUnsignedLongSequence.SetValue();
     164             : }
     165             : 
     166             : bool
     167           0 : OwningUint32ArrayOrUnsignedLongSequence::TrySetToUnsignedLongSequence(JSContext* cx, JS::Handle<JS::Value> value, bool& tryNext, bool passedToJSImpl)
     168             : {
     169           0 :   tryNext = false;
     170             :   { // scope for memberSlot
     171           0 :     Sequence<uint32_t>& memberSlot = RawSetAsUnsignedLongSequence();
     172           0 :     JS::ForOfIterator iter(cx);
     173           0 :     if (!iter.init(value, JS::ForOfIterator::AllowNonIterable)) {
     174           0 :       return false;
     175             :     }
     176           0 :     if (!iter.valueIsIterable()) {
     177           0 :       DestroyUnsignedLongSequence();
     178           0 :       tryNext = true;
     179           0 :       return true;
     180             :     }
     181           0 :     Sequence<uint32_t> &arr = memberSlot;
     182           0 :     JS::Rooted<JS::Value> temp(cx);
     183             :     while (true) {
     184             :       bool done;
     185           0 :       if (!iter.next(&temp, &done)) {
     186           0 :         return false;
     187             :       }
     188           0 :       if (done) {
     189           0 :         break;
     190             :       }
     191           0 :       uint32_t* slotPtr = arr.AppendElement(mozilla::fallible);
     192           0 :       if (!slotPtr) {
     193           0 :         JS_ReportOutOfMemory(cx);
     194           0 :         return false;
     195             :       }
     196           0 :       uint32_t& slot = *slotPtr;
     197           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, temp, &slot)) {
     198           0 :         return false;
     199             :       }
     200           0 :     }
     201             :   }
     202           0 :   return true;
     203             : }
     204             : 
     205             : void
     206           0 : OwningUint32ArrayOrUnsignedLongSequence::DestroyUnsignedLongSequence()
     207             : {
     208           0 :   MOZ_ASSERT(IsUnsignedLongSequence(), "Wrong type!");
     209           0 :   mValue.mUnsignedLongSequence.Destroy();
     210           0 :   mType = eUninitialized;
     211           0 : }
     212             : 
     213             : 
     214             : 
     215             : 
     216             : void
     217           0 : OwningUint32ArrayOrUnsignedLongSequence::Uninit()
     218             : {
     219           0 :   switch (mType) {
     220             :     case eUninitialized: {
     221           0 :       break;
     222             :     }
     223             :     case eUint32Array: {
     224           0 :       DestroyUint32Array();
     225           0 :       break;
     226             :     }
     227             :     case eUnsignedLongSequence: {
     228           0 :       DestroyUnsignedLongSequence();
     229           0 :       break;
     230             :     }
     231             :   }
     232           0 : }
     233             : 
     234             : bool
     235           0 : OwningUint32ArrayOrUnsignedLongSequence::ToJSVal(JSContext* cx, JS::Handle<JSObject*> scopeObj, JS::MutableHandle<JS::Value> rval) const
     236             : {
     237           0 :   switch (mType) {
     238             :     case eUninitialized: {
     239           0 :       return false;
     240             :       break;
     241             :     }
     242             :     case eUint32Array: {
     243           0 :       rval.setObject(*mValue.mUint32Array.Value().Obj());
     244           0 :       if (!MaybeWrapNonDOMObjectValue(cx, rval)) {
     245           0 :         return false;
     246             :       }
     247           0 :       return true;
     248             :       break;
     249             :     }
     250             :     case eUnsignedLongSequence: {
     251             : 
     252           0 :       uint32_t length = mValue.mUnsignedLongSequence.Value().Length();
     253           0 :       JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
     254           0 :       if (!returnArray) {
     255           0 :         return false;
     256             :       }
     257             :       // Scope for 'tmp'
     258             :       {
     259           0 :         JS::Rooted<JS::Value> tmp(cx);
     260           0 :         for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
     261             :           // Control block to let us common up the JS_DefineElement calls when there
     262             :           // are different ways to succeed at wrapping the object.
     263             :           do {
     264           0 :             tmp.setNumber(mValue.mUnsignedLongSequence.Value()[sequenceIdx0]);
     265           0 :             break;
     266             :           } while (0);
     267           0 :           if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
     268             :                                 JSPROP_ENUMERATE)) {
     269           0 :             return false;
     270             :           }
     271             :         }
     272             :       }
     273           0 :       rval.setObject(*returnArray);
     274           0 :       return true;
     275             :       break;
     276             :     }
     277             :     default: {
     278           0 :       return false;
     279             :       break;
     280             :     }
     281             :   }
     282             : 
     283             :   return false;
     284             : }
     285             : 
     286             : void
     287           0 : OwningUint32ArrayOrUnsignedLongSequence::TraceUnion(JSTracer* trc)
     288             : {
     289           0 :   switch (mType) {
     290             :     case eUint32Array: {
     291           0 :       mValue.mUint32Array.Value().TraceSelf(trc);
     292           0 :       break;
     293             :     }
     294             :     default: {
     295           0 :       break;
     296             :     }
     297             :   }
     298           0 : }
     299             : 
     300             : 
     301             : namespace EXT_color_buffer_floatBinding {
     302             : 
     303             : static bool
     304           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
     305             : {
     306           0 :   mozilla::WebGLExtensionEXTColorBufferFloat* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLExtensionEXTColorBufferFloat>(obj);
     307             :   // We don't want to preserve if we don't have a wrapper, and we
     308             :   // obviously can't preserve if we're not initialized.
     309           0 :   if (self && self->GetWrapperPreserveColor()) {
     310           0 :     PreserveWrapper(self);
     311             :   }
     312           0 :   return true;
     313             : }
     314             : 
     315             : static void
     316           0 : _finalize(js::FreeOp* fop, JSObject* obj)
     317             : {
     318           0 :   mozilla::WebGLExtensionEXTColorBufferFloat* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLExtensionEXTColorBufferFloat>(obj);
     319           0 :   if (self) {
     320           0 :     ClearWrapper(self, self, obj);
     321           0 :     AddForDeferredFinalization<mozilla::WebGLExtensionEXTColorBufferFloat>(self);
     322             :   }
     323           0 : }
     324             : 
     325             : static void
     326           0 : _objectMoved(JSObject* obj, const JSObject* old)
     327             : {
     328           0 :   mozilla::WebGLExtensionEXTColorBufferFloat* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLExtensionEXTColorBufferFloat>(obj);
     329           0 :   if (self) {
     330           0 :     UpdateWrapper(self, self, obj, old);
     331             :   }
     332           0 : }
     333             : 
     334             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
     335             :   {
     336             :     "EXT_color_buffer_floatPrototype",
     337             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
     338             :     JS_NULL_CLASS_OPS,
     339             :     JS_NULL_CLASS_SPEC,
     340             :     JS_NULL_CLASS_EXT,
     341             :     JS_NULL_OBJECT_OPS
     342             :   },
     343             :   eInterfacePrototype,
     344             :   false,
     345             :   prototypes::id::EXT_color_buffer_float,
     346             :   PrototypeTraits<prototypes::id::EXT_color_buffer_float>::Depth,
     347             :   sNativePropertyHooks,
     348             :   "[object EXT_color_buffer_floatPrototype]",
     349             :   JS::GetRealmObjectPrototype
     350             : };
     351             : 
     352             : static const js::ClassOps sClassOps = {
     353             :   _addProperty, /* addProperty */
     354             :   nullptr,               /* delProperty */
     355             :   nullptr,               /* getProperty */
     356             :   nullptr,               /* setProperty */
     357             :   nullptr,               /* enumerate */
     358             :   nullptr, /* newEnumerate */
     359             :   nullptr, /* resolve */
     360             :   nullptr, /* mayResolve */
     361             :   _finalize, /* finalize */
     362             :   nullptr, /* call */
     363             :   nullptr,               /* hasInstance */
     364             :   nullptr,               /* construct */
     365             :   nullptr, /* trace */
     366             : };
     367             : 
     368             : static const js::ClassExtension sClassExtension = {
     369             :   nullptr, /* weakmapKeyDelegateOp */
     370             :   _objectMoved /* objectMovedOp */
     371             : };
     372             : 
     373             : static const DOMJSClass sClass = {
     374             :   { "EXT_color_buffer_float",
     375             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
     376             :     &sClassOps,
     377             :     JS_NULL_CLASS_SPEC,
     378             :     &sClassExtension,
     379             :     JS_NULL_OBJECT_OPS
     380             :   },
     381             :   { prototypes::id::EXT_color_buffer_float, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
     382             :   IsBaseOf<nsISupports, mozilla::WebGLExtensionEXTColorBufferFloat >::value,
     383             :   sNativePropertyHooks,
     384             :   FindAssociatedGlobalForNative<mozilla::WebGLExtensionEXTColorBufferFloat>::Get,
     385             :   GetProtoObjectHandle,
     386             :   GetCCParticipant<mozilla::WebGLExtensionEXTColorBufferFloat>::Get()
     387             : };
     388             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
     389             :               "Must have the right minimal number of reserved slots.");
     390             : static_assert(1 >= 1,
     391             :               "Must have enough reserved slots.");
     392             : 
     393             : const JSClass*
     394           0 : GetJSClass()
     395             : {
     396           0 :   return sClass.ToJSClass();
     397             : }
     398             : 
     399             : bool
     400           0 : Wrap(JSContext* aCx, mozilla::WebGLExtensionEXTColorBufferFloat* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
     401             : {
     402             :   MOZ_ASSERT(static_cast<mozilla::WebGLExtensionEXTColorBufferFloat*>(aObject) ==
     403             :              reinterpret_cast<mozilla::WebGLExtensionEXTColorBufferFloat*>(aObject),
     404             :              "Multiple inheritance for mozilla::WebGLExtensionEXTColorBufferFloat is broken.");
     405           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
     406           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
     407           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
     408             :              "You should probably not be using Wrap() directly; use "
     409             :              "GetOrCreateDOMReflector instead");
     410             : 
     411           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
     412             :              "nsISupports must be on our primary inheritance chain");
     413             : 
     414           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
     415           0 :   if (!global) {
     416           0 :     return false;
     417             :   }
     418           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
     419           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
     420             : 
     421             :   // That might have ended up wrapping us already, due to the wonders
     422             :   // of XBL.  Check for that, and bail out as needed.
     423           0 :   aReflector.set(aCache->GetWrapper());
     424           0 :   if (aReflector) {
     425             : #ifdef DEBUG
     426           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
     427             : #endif // DEBUG
     428           0 :     return true;
     429             :   }
     430             : 
     431           0 :   JSAutoCompartment ac(aCx, global);
     432           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
     433           0 :   if (!canonicalProto) {
     434           0 :     return false;
     435             :   }
     436           0 :   JS::Rooted<JSObject*> proto(aCx);
     437           0 :   if (aGivenProto) {
     438           0 :     proto = aGivenProto;
     439             :     // Unfortunately, while aGivenProto was in the compartment of aCx
     440             :     // coming in, we changed compartments to that of "parent" so may need
     441             :     // to wrap the proto here.
     442           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
     443           0 :       if (!JS_WrapObject(aCx, &proto)) {
     444           0 :         return false;
     445             :       }
     446             :     }
     447             :   } else {
     448           0 :     proto = canonicalProto;
     449             :   }
     450             : 
     451           0 :   BindingJSObjectCreator<mozilla::WebGLExtensionEXTColorBufferFloat> creator(aCx);
     452           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
     453           0 :   if (!aReflector) {
     454           0 :     return false;
     455             :   }
     456             : 
     457           0 :   aCache->SetWrapper(aReflector);
     458           0 :   creator.InitializationSucceeded();
     459             : 
     460           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
     461             :              aCache->GetWrapperPreserveColor() == aReflector);
     462             :   // If proto != canonicalProto, we have to preserve our wrapper;
     463             :   // otherwise we won't be able to properly recreate it later, since
     464             :   // we won't know what proto to use.  Note that we don't check
     465             :   // aGivenProto here, since it's entirely possible (and even
     466             :   // somewhat common) to have a non-null aGivenProto which is the
     467             :   // same as canonicalProto.
     468           0 :   if (proto != canonicalProto) {
     469           0 :     PreserveWrapper(aObject);
     470             :   }
     471             : 
     472           0 :   return true;
     473             : }
     474             : 
     475             : const NativePropertyHooks sNativePropertyHooks[] = { {
     476             :   nullptr,
     477             :   nullptr,
     478             :   nullptr,
     479             :   { nullptr, nullptr },
     480             :   prototypes::id::EXT_color_buffer_float,
     481             :   constructors::id::_ID_Count,
     482             :   nullptr,
     483             :   &DefaultXrayExpandoObjectClass
     484             : } };
     485             : 
     486             : void
     487           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
     488             : {
     489           0 :   JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
     490           0 :   if (!parentProto) {
     491           0 :     return;
     492             :   }
     493             : 
     494           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::EXT_color_buffer_float);
     495           0 :   JS::Heap<JSObject*>* interfaceCache = nullptr;
     496           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
     497             :                               &sPrototypeClass.mBase, protoCache,
     498             :                               nullptr, nullptr, 0, nullptr,
     499             :                               interfaceCache,
     500             :                               nullptr,
     501             :                               nullptr,
     502             :                               nullptr, aDefineOnGlobal,
     503             :                               nullptr,
     504           0 :                               false);
     505             : }
     506             : 
     507             : JS::Handle<JSObject*>
     508           0 : GetProtoObjectHandle(JSContext* aCx)
     509             : {
     510             :   /* Get the interface prototype object for this class.  This will create the
     511             :      object as needed. */
     512           0 :   bool aDefineOnGlobal = true;
     513             : 
     514             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
     515           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
     516           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
     517           0 :     return nullptr;
     518             :   }
     519             : 
     520             :   /* Check to see whether the interface objects are already installed */
     521           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
     522           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::EXT_color_buffer_float)) {
     523           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
     524           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
     525             :   }
     526             : 
     527             :   /*
     528             :    * The object might _still_ be null, but that's OK.
     529             :    *
     530             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
     531             :    * traced by TraceProtoAndIfaceCache() and its contents are never
     532             :    * changed after they have been set.
     533             :    *
     534             :    * Calling address() avoids the read read barrier that does gray
     535             :    * unmarking, but it's not possible for the object to be gray here.
     536             :    */
     537             : 
     538           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::EXT_color_buffer_float);
     539           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
     540           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
     541             : }
     542             : 
     543             : } // namespace EXT_color_buffer_floatBinding
     544             : 
     545             : 
     546             : 
     547             : namespace WebGL2RenderingContextBinding {
     548             : 
     549             : static bool
     550           0 : bufferData(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
     551             : {
     552           0 :   unsigned argcount = std::min(args.length(), 5u);
     553           0 :   switch (argcount) {
     554             :     case 3: {
     555             :       uint32_t arg0;
     556           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     557           0 :         return false;
     558             :       }
     559           0 :       if (args[1].isNullOrUndefined()) {
     560           0 :         RootedTypedArray<Nullable<ArrayBuffer>> arg1(cx);
     561           0 :         arg1.SetNull();
     562             :         uint32_t arg2;
     563           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
     564           0 :           return false;
     565             :         }
     566           0 :         self->BufferData(arg0, Constify(arg1), arg2);
     567           0 :         MOZ_ASSERT(!JS_IsExceptionPending(cx));
     568           0 :         args.rval().setUndefined();
     569           0 :         return true;
     570             :       }
     571           0 :       if (args[1].isObject()) {
     572             :         do {
     573           0 :           RootedTypedArray<Nullable<ArrayBuffer>> arg1(cx);
     574           0 :           if (!arg1.SetValue().Init(&args[1].toObject())) {
     575           0 :             break;
     576             :           }
     577             :           uint32_t arg2;
     578           0 :           if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
     579           0 :             return false;
     580             :           }
     581           0 :           self->BufferData(arg0, Constify(arg1), arg2);
     582           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
     583           0 :           args.rval().setUndefined();
     584           0 :           return true;
     585             :         } while (0);
     586             :         do {
     587           0 :           RootedTypedArray<ArrayBufferView> arg1(cx);
     588           0 :           if (!arg1.Init(&args[1].toObject())) {
     589           0 :             break;
     590             :           }
     591             :           uint32_t arg2;
     592           0 :           if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
     593           0 :             return false;
     594             :           }
     595           0 :           self->BufferData(arg0, Constify(arg1), arg2);
     596           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
     597           0 :           args.rval().setUndefined();
     598           0 :           return true;
     599             :         } while (0);
     600             :       }
     601             :       int64_t arg1;
     602           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[1], &arg1)) {
     603           0 :         return false;
     604             :       }
     605             :       uint32_t arg2;
     606           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
     607           0 :         return false;
     608             :       }
     609           0 :       self->BufferData(arg0, arg1, arg2);
     610           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     611           0 :       args.rval().setUndefined();
     612           0 :       return true;
     613             :       break;
     614             :     }
     615             :     case 4: {
     616             :       MOZ_FALLTHROUGH;
     617             :     }
     618             :     case 5: {
     619             :       uint32_t arg0;
     620           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     621           0 :         return false;
     622             :       }
     623           0 :       RootedTypedArray<ArrayBufferView> arg1(cx);
     624           0 :       if (args[1].isObject()) {
     625           0 :         if (!arg1.Init(&args[1].toObject())) {
     626           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.bufferData", "ArrayBufferView");
     627           0 :           return false;
     628             :         }
     629             :       } else {
     630           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.bufferData");
     631           0 :         return false;
     632             :       }
     633             :       uint32_t arg2;
     634           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
     635           0 :         return false;
     636             :       }
     637             :       uint32_t arg3;
     638           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
     639           0 :         return false;
     640             :       }
     641             :       uint32_t arg4;
     642           0 :       if (args.hasDefined(4)) {
     643           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
     644           0 :           return false;
     645             :         }
     646             :       } else {
     647           0 :         arg4 = 0U;
     648             :       }
     649           0 :       self->BufferData(arg0, Constify(arg1), arg2, arg3, arg4);
     650           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     651           0 :       args.rval().setUndefined();
     652           0 :       return true;
     653             :       break;
     654             :     }
     655             :     default: {
     656           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bufferData");
     657             :       break;
     658             :     }
     659             :   }
     660             :   MOZ_CRASH("We have an always-returning default case");
     661             :   return false;
     662             : }
     663             : 
     664             : static const JSJitInfo bufferData_methodinfo = {
     665             :   { (JSJitGetterOp)bufferData },
     666             :   { prototypes::id::WebGL2RenderingContext },
     667             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
     668             :   JSJitInfo::Method,
     669             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     670             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     671             :   false,  /* isInfallible. False in setters. */
     672             :   false,  /* isMovable.  Not relevant for setters. */
     673             :   false, /* isEliminatable.  Not relevant for setters. */
     674             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     675             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     676             :   false,  /* isTypedMethod.  Only relevant for methods. */
     677             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     678             : };
     679             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     680             : static_assert(0 < 1, "There is no slot for us");
     681             : 
     682             : static bool
     683           0 : bufferSubData(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
     684             : {
     685           0 :   unsigned argcount = std::min(args.length(), 5u);
     686           0 :   switch (argcount) {
     687             :     case 3: {
     688             :       uint32_t arg0;
     689           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     690           0 :         return false;
     691             :       }
     692             :       int64_t arg1;
     693           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[1], &arg1)) {
     694           0 :         return false;
     695             :       }
     696           0 :       if (args[2].isObject()) {
     697             :         do {
     698           0 :           RootedTypedArray<ArrayBuffer> arg2(cx);
     699           0 :           if (!arg2.Init(&args[2].toObject())) {
     700           0 :             break;
     701             :           }
     702           0 :           self->BufferSubData(arg0, arg1, Constify(arg2));
     703           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
     704           0 :           args.rval().setUndefined();
     705           0 :           return true;
     706             :         } while (0);
     707             :         do {
     708           0 :           RootedTypedArray<ArrayBufferView> arg2(cx);
     709           0 :           if (!arg2.Init(&args[2].toObject())) {
     710           0 :             break;
     711             :           }
     712           0 :           self->BufferSubData(arg0, arg1, Constify(arg2));
     713           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
     714           0 :           args.rval().setUndefined();
     715           0 :           return true;
     716             :         } while (0);
     717             :       }
     718           0 :       return ThrowErrorMessage(cx, MSG_OVERLOAD_RESOLUTION_FAILED, "3", "3", "WebGL2RenderingContext.bufferSubData");
     719             :       break;
     720             :     }
     721             :     case 4: {
     722             :       MOZ_FALLTHROUGH;
     723             :     }
     724             :     case 5: {
     725             :       uint32_t arg0;
     726           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     727           0 :         return false;
     728             :       }
     729             :       int64_t arg1;
     730           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[1], &arg1)) {
     731           0 :         return false;
     732             :       }
     733           0 :       RootedTypedArray<ArrayBufferView> arg2(cx);
     734           0 :       if (args[2].isObject()) {
     735           0 :         if (!arg2.Init(&args[2].toObject())) {
     736           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of WebGL2RenderingContext.bufferSubData", "ArrayBufferView");
     737           0 :           return false;
     738             :         }
     739             :       } else {
     740           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of WebGL2RenderingContext.bufferSubData");
     741           0 :         return false;
     742             :       }
     743             :       uint32_t arg3;
     744           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
     745           0 :         return false;
     746             :       }
     747             :       uint32_t arg4;
     748           0 :       if (args.hasDefined(4)) {
     749           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
     750           0 :           return false;
     751             :         }
     752             :       } else {
     753           0 :         arg4 = 0U;
     754             :       }
     755           0 :       self->BufferSubData(arg0, arg1, Constify(arg2), arg3, arg4);
     756           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
     757           0 :       args.rval().setUndefined();
     758           0 :       return true;
     759             :       break;
     760             :     }
     761             :     default: {
     762           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bufferSubData");
     763             :       break;
     764             :     }
     765             :   }
     766             :   MOZ_CRASH("We have an always-returning default case");
     767             :   return false;
     768             : }
     769             : 
     770             : static const JSJitInfo bufferSubData_methodinfo = {
     771             :   { (JSJitGetterOp)bufferSubData },
     772             :   { prototypes::id::WebGL2RenderingContext },
     773             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
     774             :   JSJitInfo::Method,
     775             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     776             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     777             :   false,  /* isInfallible. False in setters. */
     778             :   false,  /* isMovable.  Not relevant for setters. */
     779             :   false, /* isEliminatable.  Not relevant for setters. */
     780             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     781             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     782             :   false,  /* isTypedMethod.  Only relevant for methods. */
     783             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     784             : };
     785             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     786             : static_assert(0 < 1, "There is no slot for us");
     787             : 
     788             : static bool
     789           0 : copyBufferSubData(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
     790             : {
     791           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
     792           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.copyBufferSubData");
     793             :   }
     794             :   uint32_t arg0;
     795           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     796           0 :     return false;
     797             :   }
     798             :   uint32_t arg1;
     799           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
     800           0 :     return false;
     801             :   }
     802             :   int64_t arg2;
     803           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[2], &arg2)) {
     804           0 :     return false;
     805             :   }
     806             :   int64_t arg3;
     807           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[3], &arg3)) {
     808           0 :     return false;
     809             :   }
     810             :   int64_t arg4;
     811           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[4], &arg4)) {
     812           0 :     return false;
     813             :   }
     814           0 :   self->CopyBufferSubData(arg0, arg1, arg2, arg3, arg4);
     815           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     816           0 :   args.rval().setUndefined();
     817           0 :   return true;
     818             : }
     819             : 
     820             : static const JSJitInfo copyBufferSubData_methodinfo = {
     821             :   { (JSJitGetterOp)copyBufferSubData },
     822             :   { prototypes::id::WebGL2RenderingContext },
     823             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
     824             :   JSJitInfo::Method,
     825             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     826             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     827             :   false,  /* isInfallible. False in setters. */
     828             :   false,  /* isMovable.  Not relevant for setters. */
     829             :   false, /* isEliminatable.  Not relevant for setters. */
     830             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     831             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     832             :   false,  /* isTypedMethod.  Only relevant for methods. */
     833             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     834             : };
     835             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     836             : static_assert(0 < 1, "There is no slot for us");
     837             : 
     838             : static bool
     839           0 : getBufferSubData(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
     840             : {
     841           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
     842           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getBufferSubData");
     843             :   }
     844             :   uint32_t arg0;
     845           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     846           0 :     return false;
     847             :   }
     848             :   int64_t arg1;
     849           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[1], &arg1)) {
     850           0 :     return false;
     851             :   }
     852           0 :   RootedTypedArray<ArrayBufferView> arg2(cx);
     853           0 :   if (args[2].isObject()) {
     854           0 :     if (!arg2.Init(&args[2].toObject())) {
     855           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of WebGL2RenderingContext.getBufferSubData", "ArrayBufferView");
     856           0 :       return false;
     857             :     }
     858             :   } else {
     859           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of WebGL2RenderingContext.getBufferSubData");
     860           0 :     return false;
     861             :   }
     862             :   uint32_t arg3;
     863           0 :   if (args.hasDefined(3)) {
     864           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
     865           0 :       return false;
     866             :     }
     867             :   } else {
     868           0 :     arg3 = 0U;
     869             :   }
     870             :   uint32_t arg4;
     871           0 :   if (args.hasDefined(4)) {
     872           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
     873           0 :       return false;
     874             :     }
     875             :   } else {
     876           0 :     arg4 = 0U;
     877             :   }
     878           0 :   self->GetBufferSubData(arg0, arg1, Constify(arg2), arg3, arg4);
     879           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     880           0 :   args.rval().setUndefined();
     881           0 :   return true;
     882             : }
     883             : 
     884             : static const JSJitInfo getBufferSubData_methodinfo = {
     885             :   { (JSJitGetterOp)getBufferSubData },
     886             :   { prototypes::id::WebGL2RenderingContext },
     887             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
     888             :   JSJitInfo::Method,
     889             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     890             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     891             :   false,  /* isInfallible. False in setters. */
     892             :   false,  /* isMovable.  Not relevant for setters. */
     893             :   false, /* isEliminatable.  Not relevant for setters. */
     894             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     895             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     896             :   false,  /* isTypedMethod.  Only relevant for methods. */
     897             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     898             : };
     899             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     900             : static_assert(0 < 1, "There is no slot for us");
     901             : 
     902             : static bool
     903           0 : blitFramebuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
     904             : {
     905           0 :   if (MOZ_UNLIKELY(args.length() < 10)) {
     906           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.blitFramebuffer");
     907             :   }
     908             :   int32_t arg0;
     909           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
     910           0 :     return false;
     911             :   }
     912             :   int32_t arg1;
     913           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
     914           0 :     return false;
     915             :   }
     916             :   int32_t arg2;
     917           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
     918           0 :     return false;
     919             :   }
     920             :   int32_t arg3;
     921           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
     922           0 :     return false;
     923             :   }
     924             :   int32_t arg4;
     925           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
     926           0 :     return false;
     927             :   }
     928             :   int32_t arg5;
     929           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
     930           0 :     return false;
     931             :   }
     932             :   int32_t arg6;
     933           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
     934           0 :     return false;
     935             :   }
     936             :   int32_t arg7;
     937           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
     938           0 :     return false;
     939             :   }
     940             :   uint32_t arg8;
     941           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
     942           0 :     return false;
     943             :   }
     944             :   uint32_t arg9;
     945           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
     946           0 :     return false;
     947             :   }
     948           0 :   self->BlitFramebuffer(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
     949           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     950           0 :   args.rval().setUndefined();
     951           0 :   return true;
     952             : }
     953             : 
     954             : static const JSJitInfo blitFramebuffer_methodinfo = {
     955             :   { (JSJitGetterOp)blitFramebuffer },
     956             :   { prototypes::id::WebGL2RenderingContext },
     957             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
     958             :   JSJitInfo::Method,
     959             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     960             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     961             :   false,  /* isInfallible. False in setters. */
     962             :   false,  /* isMovable.  Not relevant for setters. */
     963             :   false, /* isEliminatable.  Not relevant for setters. */
     964             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     965             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     966             :   false,  /* isTypedMethod.  Only relevant for methods. */
     967             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     968             : };
     969             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     970             : static_assert(0 < 1, "There is no slot for us");
     971             : 
     972             : static bool
     973           0 : framebufferTextureLayer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
     974             : {
     975           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
     976           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.framebufferTextureLayer");
     977             :   }
     978             :   uint32_t arg0;
     979           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
     980           0 :     return false;
     981             :   }
     982             :   uint32_t arg1;
     983           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
     984           0 :     return false;
     985             :   }
     986             :   mozilla::WebGLTexture* arg2;
     987           0 :   if (args[2].isObject()) {
     988             :     {
     989           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLTexture, mozilla::WebGLTexture>(args[2], arg2);
     990           0 :       if (NS_FAILED(rv)) {
     991           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of WebGL2RenderingContext.framebufferTextureLayer", "WebGLTexture");
     992           0 :         return false;
     993             :       }
     994             :     }
     995           0 :   } else if (args[2].isNullOrUndefined()) {
     996           0 :     arg2 = nullptr;
     997             :   } else {
     998           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of WebGL2RenderingContext.framebufferTextureLayer");
     999           0 :     return false;
    1000             :   }
    1001             :   int32_t arg3;
    1002           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1003           0 :     return false;
    1004             :   }
    1005             :   int32_t arg4;
    1006           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    1007           0 :     return false;
    1008             :   }
    1009           0 :   self->FramebufferTextureLayer(arg0, arg1, Constify(arg2), arg3, arg4);
    1010           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1011           0 :   args.rval().setUndefined();
    1012           0 :   return true;
    1013             : }
    1014             : 
    1015             : static const JSJitInfo framebufferTextureLayer_methodinfo = {
    1016             :   { (JSJitGetterOp)framebufferTextureLayer },
    1017             :   { prototypes::id::WebGL2RenderingContext },
    1018             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1019             :   JSJitInfo::Method,
    1020             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1021             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1022             :   false,  /* isInfallible. False in setters. */
    1023             :   false,  /* isMovable.  Not relevant for setters. */
    1024             :   false, /* isEliminatable.  Not relevant for setters. */
    1025             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1026             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1027             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1028             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1029             : };
    1030             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1031             : static_assert(0 < 1, "There is no slot for us");
    1032             : 
    1033             : static bool
    1034           0 : invalidateFramebuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1035             : {
    1036           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    1037           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.invalidateFramebuffer");
    1038             :   }
    1039             :   uint32_t arg0;
    1040           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1041           0 :     return false;
    1042             :   }
    1043           0 :   binding_detail::AutoSequence<uint32_t> arg1;
    1044           0 :   if (args[1].isObject()) {
    1045           0 :     JS::ForOfIterator iter(cx);
    1046           0 :     if (!iter.init(args[1], JS::ForOfIterator::AllowNonIterable)) {
    1047           0 :       return false;
    1048             :     }
    1049           0 :     if (!iter.valueIsIterable()) {
    1050           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.invalidateFramebuffer");
    1051           0 :       return false;
    1052             :     }
    1053           0 :     binding_detail::AutoSequence<uint32_t> &arr = arg1;
    1054           0 :     JS::Rooted<JS::Value> temp(cx);
    1055             :     while (true) {
    1056             :       bool done;
    1057           0 :       if (!iter.next(&temp, &done)) {
    1058           0 :         return false;
    1059             :       }
    1060           0 :       if (done) {
    1061           0 :         break;
    1062             :       }
    1063           0 :       uint32_t* slotPtr = arr.AppendElement(mozilla::fallible);
    1064           0 :       if (!slotPtr) {
    1065           0 :         JS_ReportOutOfMemory(cx);
    1066           0 :         return false;
    1067             :       }
    1068           0 :       uint32_t& slot = *slotPtr;
    1069           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, temp, &slot)) {
    1070           0 :         return false;
    1071             :       }
    1072           0 :     }
    1073             :   } else {
    1074           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.invalidateFramebuffer");
    1075           0 :     return false;
    1076             :   }
    1077           0 :   binding_detail::FastErrorResult rv;
    1078           0 :   self->InvalidateFramebuffer(arg0, Constify(arg1), rv);
    1079           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1080           0 :     return false;
    1081             :   }
    1082           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1083           0 :   args.rval().setUndefined();
    1084           0 :   return true;
    1085             : }
    1086             : 
    1087             : static const JSJitInfo invalidateFramebuffer_methodinfo = {
    1088             :   { (JSJitGetterOp)invalidateFramebuffer },
    1089             :   { prototypes::id::WebGL2RenderingContext },
    1090             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1091             :   JSJitInfo::Method,
    1092             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1093             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1094             :   false,  /* isInfallible. False in setters. */
    1095             :   false,  /* isMovable.  Not relevant for setters. */
    1096             :   false, /* isEliminatable.  Not relevant for setters. */
    1097             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1098             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1099             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1100             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1101             : };
    1102             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1103             : static_assert(0 < 1, "There is no slot for us");
    1104             : 
    1105             : static bool
    1106           0 : invalidateSubFramebuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1107             : {
    1108           0 :   if (MOZ_UNLIKELY(args.length() < 6)) {
    1109           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.invalidateSubFramebuffer");
    1110             :   }
    1111             :   uint32_t arg0;
    1112           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1113           0 :     return false;
    1114             :   }
    1115           0 :   binding_detail::AutoSequence<uint32_t> arg1;
    1116           0 :   if (args[1].isObject()) {
    1117           0 :     JS::ForOfIterator iter(cx);
    1118           0 :     if (!iter.init(args[1], JS::ForOfIterator::AllowNonIterable)) {
    1119           0 :       return false;
    1120             :     }
    1121           0 :     if (!iter.valueIsIterable()) {
    1122           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.invalidateSubFramebuffer");
    1123           0 :       return false;
    1124             :     }
    1125           0 :     binding_detail::AutoSequence<uint32_t> &arr = arg1;
    1126           0 :     JS::Rooted<JS::Value> temp(cx);
    1127             :     while (true) {
    1128             :       bool done;
    1129           0 :       if (!iter.next(&temp, &done)) {
    1130           0 :         return false;
    1131             :       }
    1132           0 :       if (done) {
    1133           0 :         break;
    1134             :       }
    1135           0 :       uint32_t* slotPtr = arr.AppendElement(mozilla::fallible);
    1136           0 :       if (!slotPtr) {
    1137           0 :         JS_ReportOutOfMemory(cx);
    1138           0 :         return false;
    1139             :       }
    1140           0 :       uint32_t& slot = *slotPtr;
    1141           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, temp, &slot)) {
    1142           0 :         return false;
    1143             :       }
    1144           0 :     }
    1145             :   } else {
    1146           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.invalidateSubFramebuffer");
    1147           0 :     return false;
    1148             :   }
    1149             :   int32_t arg2;
    1150           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    1151           0 :     return false;
    1152             :   }
    1153             :   int32_t arg3;
    1154           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1155           0 :     return false;
    1156             :   }
    1157             :   int32_t arg4;
    1158           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    1159           0 :     return false;
    1160             :   }
    1161             :   int32_t arg5;
    1162           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    1163           0 :     return false;
    1164             :   }
    1165           0 :   binding_detail::FastErrorResult rv;
    1166           0 :   self->InvalidateSubFramebuffer(arg0, Constify(arg1), arg2, arg3, arg4, arg5, rv);
    1167           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1168           0 :     return false;
    1169             :   }
    1170           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1171           0 :   args.rval().setUndefined();
    1172           0 :   return true;
    1173             : }
    1174             : 
    1175             : static const JSJitInfo invalidateSubFramebuffer_methodinfo = {
    1176             :   { (JSJitGetterOp)invalidateSubFramebuffer },
    1177             :   { prototypes::id::WebGL2RenderingContext },
    1178             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1179             :   JSJitInfo::Method,
    1180             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1181             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1182             :   false,  /* isInfallible. False in setters. */
    1183             :   false,  /* isMovable.  Not relevant for setters. */
    1184             :   false, /* isEliminatable.  Not relevant for setters. */
    1185             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1186             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1187             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1188             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1189             : };
    1190             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1191             : static_assert(0 < 1, "There is no slot for us");
    1192             : 
    1193             : static bool
    1194           0 : readBuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1195             : {
    1196           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1197           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.readBuffer");
    1198             :   }
    1199             :   uint32_t arg0;
    1200           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1201           0 :     return false;
    1202             :   }
    1203           0 :   self->ReadBuffer(arg0);
    1204           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1205           0 :   args.rval().setUndefined();
    1206           0 :   return true;
    1207             : }
    1208             : 
    1209             : static const JSJitInfo readBuffer_methodinfo = {
    1210             :   { (JSJitGetterOp)readBuffer },
    1211             :   { prototypes::id::WebGL2RenderingContext },
    1212             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1213             :   JSJitInfo::Method,
    1214             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1215             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1216             :   false,  /* isInfallible. False in setters. */
    1217             :   false,  /* isMovable.  Not relevant for setters. */
    1218             :   false, /* isEliminatable.  Not relevant for setters. */
    1219             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1220             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1221             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1222             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1223             : };
    1224             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1225             : static_assert(0 < 1, "There is no slot for us");
    1226             : 
    1227             : static bool
    1228           0 : getInternalformatParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1229             : {
    1230           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    1231           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getInternalformatParameter");
    1232             :   }
    1233             :   uint32_t arg0;
    1234           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1235           0 :     return false;
    1236             :   }
    1237             :   uint32_t arg1;
    1238           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    1239           0 :     return false;
    1240             :   }
    1241             :   uint32_t arg2;
    1242           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    1243           0 :     return false;
    1244             :   }
    1245           0 :   binding_detail::FastErrorResult rv;
    1246           0 :   JS::Rooted<JS::Value> result(cx);
    1247           0 :   self->GetInternalformatParameter(cx, arg0, arg1, arg2, &result, rv);
    1248           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1249           0 :     return false;
    1250             :   }
    1251           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1252           0 :   JS::ExposeValueToActiveJS(result);
    1253           0 :   args.rval().set(result);
    1254           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    1255           0 :     return false;
    1256             :   }
    1257           0 :   return true;
    1258             : }
    1259             : 
    1260             : static const JSJitInfo getInternalformatParameter_methodinfo = {
    1261             :   { (JSJitGetterOp)getInternalformatParameter },
    1262             :   { prototypes::id::WebGL2RenderingContext },
    1263             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1264             :   JSJitInfo::Method,
    1265             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1266             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1267             :   false,  /* isInfallible. False in setters. */
    1268             :   false,  /* isMovable.  Not relevant for setters. */
    1269             :   false, /* isEliminatable.  Not relevant for setters. */
    1270             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1271             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1272             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1273             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1274             : };
    1275             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1276             : static_assert(0 < 1, "There is no slot for us");
    1277             : 
    1278             : static bool
    1279           0 : renderbufferStorageMultisample(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1280             : {
    1281           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
    1282           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.renderbufferStorageMultisample");
    1283             :   }
    1284             :   uint32_t arg0;
    1285           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1286           0 :     return false;
    1287             :   }
    1288             :   int32_t arg1;
    1289           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    1290           0 :     return false;
    1291             :   }
    1292             :   uint32_t arg2;
    1293           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    1294           0 :     return false;
    1295             :   }
    1296             :   int32_t arg3;
    1297           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1298           0 :     return false;
    1299             :   }
    1300             :   int32_t arg4;
    1301           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    1302           0 :     return false;
    1303             :   }
    1304           0 :   self->RenderbufferStorageMultisample(arg0, arg1, arg2, arg3, arg4);
    1305           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1306           0 :   args.rval().setUndefined();
    1307           0 :   return true;
    1308             : }
    1309             : 
    1310             : static const JSJitInfo renderbufferStorageMultisample_methodinfo = {
    1311             :   { (JSJitGetterOp)renderbufferStorageMultisample },
    1312             :   { prototypes::id::WebGL2RenderingContext },
    1313             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1314             :   JSJitInfo::Method,
    1315             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1316             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1317             :   false,  /* isInfallible. False in setters. */
    1318             :   false,  /* isMovable.  Not relevant for setters. */
    1319             :   false, /* isEliminatable.  Not relevant for setters. */
    1320             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1321             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1322             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1323             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1324             : };
    1325             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1326             : static_assert(0 < 1, "There is no slot for us");
    1327             : 
    1328             : static bool
    1329           0 : texStorage2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1330             : {
    1331           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
    1332           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.texStorage2D");
    1333             :   }
    1334             :   uint32_t arg0;
    1335           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1336           0 :     return false;
    1337             :   }
    1338             :   int32_t arg1;
    1339           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    1340           0 :     return false;
    1341             :   }
    1342             :   uint32_t arg2;
    1343           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    1344           0 :     return false;
    1345             :   }
    1346             :   int32_t arg3;
    1347           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1348           0 :     return false;
    1349             :   }
    1350             :   int32_t arg4;
    1351           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    1352           0 :     return false;
    1353             :   }
    1354           0 :   self->TexStorage2D(arg0, arg1, arg2, arg3, arg4);
    1355           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1356           0 :   args.rval().setUndefined();
    1357           0 :   return true;
    1358             : }
    1359             : 
    1360             : static const JSJitInfo texStorage2D_methodinfo = {
    1361             :   { (JSJitGetterOp)texStorage2D },
    1362             :   { prototypes::id::WebGL2RenderingContext },
    1363             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1364             :   JSJitInfo::Method,
    1365             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1366             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1367             :   false,  /* isInfallible. False in setters. */
    1368             :   false,  /* isMovable.  Not relevant for setters. */
    1369             :   false, /* isEliminatable.  Not relevant for setters. */
    1370             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1371             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1372             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1373             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1374             : };
    1375             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1376             : static_assert(0 < 1, "There is no slot for us");
    1377             : 
    1378             : static bool
    1379           0 : texStorage3D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1380             : {
    1381           0 :   if (MOZ_UNLIKELY(args.length() < 6)) {
    1382           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.texStorage3D");
    1383             :   }
    1384             :   uint32_t arg0;
    1385           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1386           0 :     return false;
    1387             :   }
    1388             :   int32_t arg1;
    1389           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    1390           0 :     return false;
    1391             :   }
    1392             :   uint32_t arg2;
    1393           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    1394           0 :     return false;
    1395             :   }
    1396             :   int32_t arg3;
    1397           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1398           0 :     return false;
    1399             :   }
    1400             :   int32_t arg4;
    1401           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    1402           0 :     return false;
    1403             :   }
    1404             :   int32_t arg5;
    1405           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    1406           0 :     return false;
    1407             :   }
    1408           0 :   self->TexStorage3D(arg0, arg1, arg2, arg3, arg4, arg5);
    1409           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1410           0 :   args.rval().setUndefined();
    1411           0 :   return true;
    1412             : }
    1413             : 
    1414             : static const JSJitInfo texStorage3D_methodinfo = {
    1415             :   { (JSJitGetterOp)texStorage3D },
    1416             :   { prototypes::id::WebGL2RenderingContext },
    1417             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1418             :   JSJitInfo::Method,
    1419             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1420             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1421             :   false,  /* isInfallible. False in setters. */
    1422             :   false,  /* isMovable.  Not relevant for setters. */
    1423             :   false, /* isEliminatable.  Not relevant for setters. */
    1424             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1425             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1426             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1427             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1428             : };
    1429             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1430             : static_assert(0 < 1, "There is no slot for us");
    1431             : 
    1432             : static bool
    1433           0 : texImage2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1434             : {
    1435           0 :   unsigned argcount = std::min(args.length(), 10u);
    1436           0 :   switch (argcount) {
    1437             :     case 6: {
    1438             :       uint32_t arg0;
    1439           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1440           0 :         return false;
    1441             :       }
    1442             :       int32_t arg1;
    1443           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    1444           0 :         return false;
    1445             :       }
    1446             :       int32_t arg2;
    1447           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    1448           0 :         return false;
    1449             :       }
    1450             :       uint32_t arg3;
    1451           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    1452           0 :         return false;
    1453             :       }
    1454             :       uint32_t arg4;
    1455           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    1456           0 :         return false;
    1457             :       }
    1458           0 :       if (args[5].isObject()) {
    1459             :         do {
    1460           0 :           NonNull<mozilla::dom::HTMLCanvasElement> arg5;
    1461             :           {
    1462           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLCanvasElement, mozilla::dom::HTMLCanvasElement>(args[5], arg5);
    1463           0 :             if (NS_FAILED(rv)) {
    1464           0 :               break;
    1465             :             }
    1466             :           }
    1467           0 :           binding_detail::FastErrorResult rv;
    1468           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, NonNullHelper(arg5), rv);
    1469           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1470           0 :             return false;
    1471             :           }
    1472           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1473           0 :           args.rval().setUndefined();
    1474           0 :           return true;
    1475             :         } while (0);
    1476             :         do {
    1477           0 :           NonNull<mozilla::dom::HTMLImageElement> arg5;
    1478             :           {
    1479           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLImageElement, mozilla::dom::HTMLImageElement>(args[5], arg5);
    1480           0 :             if (NS_FAILED(rv)) {
    1481           0 :               break;
    1482             :             }
    1483             :           }
    1484           0 :           binding_detail::FastErrorResult rv;
    1485           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, NonNullHelper(arg5), rv);
    1486           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1487           0 :             return false;
    1488             :           }
    1489           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1490           0 :           args.rval().setUndefined();
    1491           0 :           return true;
    1492             :         } while (0);
    1493             :         do {
    1494           0 :           NonNull<mozilla::dom::HTMLVideoElement> arg5;
    1495             :           {
    1496           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLVideoElement, mozilla::dom::HTMLVideoElement>(args[5], arg5);
    1497           0 :             if (NS_FAILED(rv)) {
    1498           0 :               break;
    1499             :             }
    1500             :           }
    1501           0 :           binding_detail::FastErrorResult rv;
    1502           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, NonNullHelper(arg5), rv);
    1503           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1504           0 :             return false;
    1505             :           }
    1506           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1507           0 :           args.rval().setUndefined();
    1508           0 :           return true;
    1509             :         } while (0);
    1510             :         do {
    1511           0 :           NonNull<mozilla::dom::ImageBitmap> arg5;
    1512             :           {
    1513           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageBitmap, mozilla::dom::ImageBitmap>(args[5], arg5);
    1514           0 :             if (NS_FAILED(rv)) {
    1515           0 :               break;
    1516             :             }
    1517             :           }
    1518           0 :           binding_detail::FastErrorResult rv;
    1519           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, NonNullHelper(arg5), rv);
    1520           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1521           0 :             return false;
    1522             :           }
    1523           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1524           0 :           args.rval().setUndefined();
    1525           0 :           return true;
    1526             :         } while (0);
    1527             :         do {
    1528           0 :           NonNull<mozilla::dom::ImageData> arg5;
    1529             :           {
    1530           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageData, mozilla::dom::ImageData>(args[5], arg5);
    1531           0 :             if (NS_FAILED(rv)) {
    1532           0 :               break;
    1533             :             }
    1534             :           }
    1535           0 :           binding_detail::FastErrorResult rv;
    1536           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, NonNullHelper(arg5), rv);
    1537           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1538           0 :             return false;
    1539             :           }
    1540           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1541           0 :           args.rval().setUndefined();
    1542           0 :           return true;
    1543             :         } while (0);
    1544             :       }
    1545           0 :       return ThrowErrorMessage(cx, MSG_OVERLOAD_RESOLUTION_FAILED, "6", "6", "WebGL2RenderingContext.texImage2D");
    1546             :       break;
    1547             :     }
    1548             :     case 9: {
    1549             :       uint32_t arg0;
    1550           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1551           0 :         return false;
    1552             :       }
    1553             :       int32_t arg1;
    1554           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    1555           0 :         return false;
    1556             :       }
    1557             :       int32_t arg2;
    1558           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    1559           0 :         return false;
    1560             :       }
    1561             :       int32_t arg3;
    1562           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1563           0 :         return false;
    1564             :       }
    1565             :       int32_t arg4;
    1566           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    1567           0 :         return false;
    1568             :       }
    1569             :       int32_t arg5;
    1570           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    1571           0 :         return false;
    1572             :       }
    1573             :       uint32_t arg6;
    1574           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[6], &arg6)) {
    1575           0 :         return false;
    1576             :       }
    1577             :       uint32_t arg7;
    1578           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    1579           0 :         return false;
    1580             :       }
    1581           0 :       if (args[8].isNullOrUndefined()) {
    1582           0 :         RootedTypedArray<Nullable<ArrayBufferView>> arg8(cx);
    1583           0 :         arg8.SetNull();
    1584           0 :         binding_detail::FastErrorResult rv;
    1585           0 :         self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, Constify(arg8), rv);
    1586           0 :         if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1587           0 :           return false;
    1588             :         }
    1589           0 :         MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1590           0 :         args.rval().setUndefined();
    1591           0 :         return true;
    1592             :       }
    1593           0 :       if (args[8].isObject()) {
    1594             :         do {
    1595           0 :           RootedTypedArray<Nullable<ArrayBufferView>> arg8(cx);
    1596           0 :           if (!arg8.SetValue().Init(&args[8].toObject())) {
    1597           0 :             break;
    1598             :           }
    1599           0 :           binding_detail::FastErrorResult rv;
    1600           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, Constify(arg8), rv);
    1601           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1602           0 :             return false;
    1603             :           }
    1604           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1605           0 :           args.rval().setUndefined();
    1606           0 :           return true;
    1607             :         } while (0);
    1608             :         do {
    1609           0 :           NonNull<mozilla::dom::HTMLCanvasElement> arg8;
    1610             :           {
    1611           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLCanvasElement, mozilla::dom::HTMLCanvasElement>(args[8], arg8);
    1612           0 :             if (NS_FAILED(rv)) {
    1613           0 :               break;
    1614             :             }
    1615             :           }
    1616           0 :           binding_detail::FastErrorResult rv;
    1617           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    1618           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1619           0 :             return false;
    1620             :           }
    1621           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1622           0 :           args.rval().setUndefined();
    1623           0 :           return true;
    1624             :         } while (0);
    1625             :         do {
    1626           0 :           NonNull<mozilla::dom::HTMLImageElement> arg8;
    1627             :           {
    1628           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLImageElement, mozilla::dom::HTMLImageElement>(args[8], arg8);
    1629           0 :             if (NS_FAILED(rv)) {
    1630           0 :               break;
    1631             :             }
    1632             :           }
    1633           0 :           binding_detail::FastErrorResult rv;
    1634           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    1635           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1636           0 :             return false;
    1637             :           }
    1638           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1639           0 :           args.rval().setUndefined();
    1640           0 :           return true;
    1641             :         } while (0);
    1642             :         do {
    1643           0 :           NonNull<mozilla::dom::HTMLVideoElement> arg8;
    1644             :           {
    1645           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLVideoElement, mozilla::dom::HTMLVideoElement>(args[8], arg8);
    1646           0 :             if (NS_FAILED(rv)) {
    1647           0 :               break;
    1648             :             }
    1649             :           }
    1650           0 :           binding_detail::FastErrorResult rv;
    1651           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    1652           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1653           0 :             return false;
    1654             :           }
    1655           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1656           0 :           args.rval().setUndefined();
    1657           0 :           return true;
    1658             :         } while (0);
    1659             :         do {
    1660           0 :           NonNull<mozilla::dom::ImageBitmap> arg8;
    1661             :           {
    1662           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageBitmap, mozilla::dom::ImageBitmap>(args[8], arg8);
    1663           0 :             if (NS_FAILED(rv)) {
    1664           0 :               break;
    1665             :             }
    1666             :           }
    1667           0 :           binding_detail::FastErrorResult rv;
    1668           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    1669           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1670           0 :             return false;
    1671             :           }
    1672           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1673           0 :           args.rval().setUndefined();
    1674           0 :           return true;
    1675             :         } while (0);
    1676             :         do {
    1677           0 :           NonNull<mozilla::dom::ImageData> arg8;
    1678             :           {
    1679           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageData, mozilla::dom::ImageData>(args[8], arg8);
    1680           0 :             if (NS_FAILED(rv)) {
    1681           0 :               break;
    1682             :             }
    1683             :           }
    1684           0 :           binding_detail::FastErrorResult rv;
    1685           0 :           self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    1686           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1687           0 :             return false;
    1688             :           }
    1689           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1690           0 :           args.rval().setUndefined();
    1691           0 :           return true;
    1692             :         } while (0);
    1693             :       }
    1694             :       int64_t arg8;
    1695           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[8], &arg8)) {
    1696           0 :         return false;
    1697             :       }
    1698           0 :       binding_detail::FastErrorResult rv;
    1699           0 :       self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, rv);
    1700           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1701           0 :         return false;
    1702             :       }
    1703           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1704           0 :       args.rval().setUndefined();
    1705           0 :       return true;
    1706             :       break;
    1707             :     }
    1708             :     case 10: {
    1709             :       uint32_t arg0;
    1710           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1711           0 :         return false;
    1712             :       }
    1713             :       int32_t arg1;
    1714           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    1715           0 :         return false;
    1716             :       }
    1717             :       int32_t arg2;
    1718           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    1719           0 :         return false;
    1720             :       }
    1721             :       int32_t arg3;
    1722           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1723           0 :         return false;
    1724             :       }
    1725             :       int32_t arg4;
    1726           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    1727           0 :         return false;
    1728             :       }
    1729             :       int32_t arg5;
    1730           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    1731           0 :         return false;
    1732             :       }
    1733             :       uint32_t arg6;
    1734           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[6], &arg6)) {
    1735           0 :         return false;
    1736             :       }
    1737             :       uint32_t arg7;
    1738           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    1739           0 :         return false;
    1740             :       }
    1741           0 :       RootedTypedArray<ArrayBufferView> arg8(cx);
    1742           0 :       if (args[8].isObject()) {
    1743           0 :         if (!arg8.Init(&args[8].toObject())) {
    1744           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 9 of WebGL2RenderingContext.texImage2D", "ArrayBufferView");
    1745           0 :           return false;
    1746             :         }
    1747             :       } else {
    1748           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 9 of WebGL2RenderingContext.texImage2D");
    1749           0 :         return false;
    1750             :       }
    1751             :       uint32_t arg9;
    1752           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
    1753           0 :         return false;
    1754             :       }
    1755           0 :       binding_detail::FastErrorResult rv;
    1756           0 :       self->TexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, Constify(arg8), arg9, rv);
    1757           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1758           0 :         return false;
    1759             :       }
    1760           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1761           0 :       args.rval().setUndefined();
    1762           0 :       return true;
    1763             :       break;
    1764             :     }
    1765             :     default: {
    1766           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.texImage2D");
    1767             :       break;
    1768             :     }
    1769             :   }
    1770             :   MOZ_CRASH("We have an always-returning default case");
    1771             :   return false;
    1772             : }
    1773             : 
    1774             : static const JSJitInfo texImage2D_methodinfo = {
    1775             :   { (JSJitGetterOp)texImage2D },
    1776             :   { prototypes::id::WebGL2RenderingContext },
    1777             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    1778             :   JSJitInfo::Method,
    1779             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1780             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1781             :   false,  /* isInfallible. False in setters. */
    1782             :   false,  /* isMovable.  Not relevant for setters. */
    1783             :   false, /* isEliminatable.  Not relevant for setters. */
    1784             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1785             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1786             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1787             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1788             : };
    1789             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1790             : static_assert(0 < 1, "There is no slot for us");
    1791             : 
    1792             : static bool
    1793           0 : texSubImage2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    1794             : {
    1795           0 :   unsigned argcount = std::min(args.length(), 10u);
    1796           0 :   switch (argcount) {
    1797             :     case 7: {
    1798             :       uint32_t arg0;
    1799           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1800           0 :         return false;
    1801             :       }
    1802             :       int32_t arg1;
    1803           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    1804           0 :         return false;
    1805             :       }
    1806             :       int32_t arg2;
    1807           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    1808           0 :         return false;
    1809             :       }
    1810             :       int32_t arg3;
    1811           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1812           0 :         return false;
    1813             :       }
    1814             :       uint32_t arg4;
    1815           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    1816           0 :         return false;
    1817             :       }
    1818             :       uint32_t arg5;
    1819           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[5], &arg5)) {
    1820           0 :         return false;
    1821             :       }
    1822           0 :       if (args[6].isObject()) {
    1823             :         do {
    1824           0 :           NonNull<mozilla::dom::HTMLCanvasElement> arg6;
    1825             :           {
    1826           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLCanvasElement, mozilla::dom::HTMLCanvasElement>(args[6], arg6);
    1827           0 :             if (NS_FAILED(rv)) {
    1828           0 :               break;
    1829             :             }
    1830             :           }
    1831           0 :           binding_detail::FastErrorResult rv;
    1832           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, NonNullHelper(arg6), rv);
    1833           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1834           0 :             return false;
    1835             :           }
    1836           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1837           0 :           args.rval().setUndefined();
    1838           0 :           return true;
    1839             :         } while (0);
    1840             :         do {
    1841           0 :           NonNull<mozilla::dom::HTMLImageElement> arg6;
    1842             :           {
    1843           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLImageElement, mozilla::dom::HTMLImageElement>(args[6], arg6);
    1844           0 :             if (NS_FAILED(rv)) {
    1845           0 :               break;
    1846             :             }
    1847             :           }
    1848           0 :           binding_detail::FastErrorResult rv;
    1849           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, NonNullHelper(arg6), rv);
    1850           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1851           0 :             return false;
    1852             :           }
    1853           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1854           0 :           args.rval().setUndefined();
    1855           0 :           return true;
    1856             :         } while (0);
    1857             :         do {
    1858           0 :           NonNull<mozilla::dom::HTMLVideoElement> arg6;
    1859             :           {
    1860           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLVideoElement, mozilla::dom::HTMLVideoElement>(args[6], arg6);
    1861           0 :             if (NS_FAILED(rv)) {
    1862           0 :               break;
    1863             :             }
    1864             :           }
    1865           0 :           binding_detail::FastErrorResult rv;
    1866           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, NonNullHelper(arg6), rv);
    1867           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1868           0 :             return false;
    1869             :           }
    1870           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1871           0 :           args.rval().setUndefined();
    1872           0 :           return true;
    1873             :         } while (0);
    1874             :         do {
    1875           0 :           NonNull<mozilla::dom::ImageBitmap> arg6;
    1876             :           {
    1877           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageBitmap, mozilla::dom::ImageBitmap>(args[6], arg6);
    1878           0 :             if (NS_FAILED(rv)) {
    1879           0 :               break;
    1880             :             }
    1881             :           }
    1882           0 :           binding_detail::FastErrorResult rv;
    1883           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, NonNullHelper(arg6), rv);
    1884           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1885           0 :             return false;
    1886             :           }
    1887           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1888           0 :           args.rval().setUndefined();
    1889           0 :           return true;
    1890             :         } while (0);
    1891             :         do {
    1892           0 :           NonNull<mozilla::dom::ImageData> arg6;
    1893             :           {
    1894           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageData, mozilla::dom::ImageData>(args[6], arg6);
    1895           0 :             if (NS_FAILED(rv)) {
    1896           0 :               break;
    1897             :             }
    1898             :           }
    1899           0 :           binding_detail::FastErrorResult rv;
    1900           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, NonNullHelper(arg6), rv);
    1901           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1902           0 :             return false;
    1903             :           }
    1904           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1905           0 :           args.rval().setUndefined();
    1906           0 :           return true;
    1907             :         } while (0);
    1908             :       }
    1909           0 :       return ThrowErrorMessage(cx, MSG_OVERLOAD_RESOLUTION_FAILED, "7", "7", "WebGL2RenderingContext.texSubImage2D");
    1910             :       break;
    1911             :     }
    1912             :     case 9: {
    1913             :       uint32_t arg0;
    1914           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1915           0 :         return false;
    1916             :       }
    1917             :       int32_t arg1;
    1918           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    1919           0 :         return false;
    1920             :       }
    1921             :       int32_t arg2;
    1922           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    1923           0 :         return false;
    1924             :       }
    1925             :       int32_t arg3;
    1926           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    1927           0 :         return false;
    1928             :       }
    1929             :       int32_t arg4;
    1930           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    1931           0 :         return false;
    1932             :       }
    1933             :       int32_t arg5;
    1934           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    1935           0 :         return false;
    1936             :       }
    1937             :       uint32_t arg6;
    1938           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[6], &arg6)) {
    1939           0 :         return false;
    1940             :       }
    1941             :       uint32_t arg7;
    1942           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    1943           0 :         return false;
    1944             :       }
    1945           0 :       if (args[8].isNullOrUndefined()) {
    1946           0 :         RootedTypedArray<Nullable<ArrayBufferView>> arg8(cx);
    1947           0 :         arg8.SetNull();
    1948           0 :         binding_detail::FastErrorResult rv;
    1949           0 :         self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, Constify(arg8), rv);
    1950           0 :         if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1951           0 :           return false;
    1952             :         }
    1953           0 :         MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1954           0 :         args.rval().setUndefined();
    1955           0 :         return true;
    1956             :       }
    1957           0 :       if (args[8].isObject()) {
    1958             :         do {
    1959           0 :           RootedTypedArray<Nullable<ArrayBufferView>> arg8(cx);
    1960           0 :           if (!arg8.SetValue().Init(&args[8].toObject())) {
    1961           0 :             break;
    1962             :           }
    1963           0 :           binding_detail::FastErrorResult rv;
    1964           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, Constify(arg8), rv);
    1965           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1966           0 :             return false;
    1967             :           }
    1968           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1969           0 :           args.rval().setUndefined();
    1970           0 :           return true;
    1971             :         } while (0);
    1972             :         do {
    1973           0 :           NonNull<mozilla::dom::HTMLCanvasElement> arg8;
    1974             :           {
    1975           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLCanvasElement, mozilla::dom::HTMLCanvasElement>(args[8], arg8);
    1976           0 :             if (NS_FAILED(rv)) {
    1977           0 :               break;
    1978             :             }
    1979             :           }
    1980           0 :           binding_detail::FastErrorResult rv;
    1981           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    1982           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1983           0 :             return false;
    1984             :           }
    1985           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1986           0 :           args.rval().setUndefined();
    1987           0 :           return true;
    1988             :         } while (0);
    1989             :         do {
    1990           0 :           NonNull<mozilla::dom::HTMLImageElement> arg8;
    1991             :           {
    1992           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLImageElement, mozilla::dom::HTMLImageElement>(args[8], arg8);
    1993           0 :             if (NS_FAILED(rv)) {
    1994           0 :               break;
    1995             :             }
    1996             :           }
    1997           0 :           binding_detail::FastErrorResult rv;
    1998           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    1999           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2000           0 :             return false;
    2001             :           }
    2002           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2003           0 :           args.rval().setUndefined();
    2004           0 :           return true;
    2005             :         } while (0);
    2006             :         do {
    2007           0 :           NonNull<mozilla::dom::HTMLVideoElement> arg8;
    2008             :           {
    2009           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLVideoElement, mozilla::dom::HTMLVideoElement>(args[8], arg8);
    2010           0 :             if (NS_FAILED(rv)) {
    2011           0 :               break;
    2012             :             }
    2013             :           }
    2014           0 :           binding_detail::FastErrorResult rv;
    2015           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    2016           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2017           0 :             return false;
    2018             :           }
    2019           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2020           0 :           args.rval().setUndefined();
    2021           0 :           return true;
    2022             :         } while (0);
    2023             :         do {
    2024           0 :           NonNull<mozilla::dom::ImageBitmap> arg8;
    2025             :           {
    2026           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageBitmap, mozilla::dom::ImageBitmap>(args[8], arg8);
    2027           0 :             if (NS_FAILED(rv)) {
    2028           0 :               break;
    2029             :             }
    2030             :           }
    2031           0 :           binding_detail::FastErrorResult rv;
    2032           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    2033           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2034           0 :             return false;
    2035             :           }
    2036           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2037           0 :           args.rval().setUndefined();
    2038           0 :           return true;
    2039             :         } while (0);
    2040             :         do {
    2041           0 :           NonNull<mozilla::dom::ImageData> arg8;
    2042             :           {
    2043           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageData, mozilla::dom::ImageData>(args[8], arg8);
    2044           0 :             if (NS_FAILED(rv)) {
    2045           0 :               break;
    2046             :             }
    2047             :           }
    2048           0 :           binding_detail::FastErrorResult rv;
    2049           0 :           self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, NonNullHelper(arg8), rv);
    2050           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2051           0 :             return false;
    2052             :           }
    2053           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2054           0 :           args.rval().setUndefined();
    2055           0 :           return true;
    2056             :         } while (0);
    2057             :       }
    2058             :       int64_t arg8;
    2059           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[8], &arg8)) {
    2060           0 :         return false;
    2061             :       }
    2062           0 :       binding_detail::FastErrorResult rv;
    2063           0 :       self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, rv);
    2064           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2065           0 :         return false;
    2066             :       }
    2067           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2068           0 :       args.rval().setUndefined();
    2069           0 :       return true;
    2070             :       break;
    2071             :     }
    2072             :     case 10: {
    2073             :       uint32_t arg0;
    2074           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2075           0 :         return false;
    2076             :       }
    2077             :       int32_t arg1;
    2078           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2079           0 :         return false;
    2080             :       }
    2081             :       int32_t arg2;
    2082           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    2083           0 :         return false;
    2084             :       }
    2085             :       int32_t arg3;
    2086           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2087           0 :         return false;
    2088             :       }
    2089             :       int32_t arg4;
    2090           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2091           0 :         return false;
    2092             :       }
    2093             :       int32_t arg5;
    2094           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2095           0 :         return false;
    2096             :       }
    2097             :       uint32_t arg6;
    2098           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[6], &arg6)) {
    2099           0 :         return false;
    2100             :       }
    2101             :       uint32_t arg7;
    2102           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    2103           0 :         return false;
    2104             :       }
    2105           0 :       RootedTypedArray<ArrayBufferView> arg8(cx);
    2106           0 :       if (args[8].isObject()) {
    2107           0 :         if (!arg8.Init(&args[8].toObject())) {
    2108           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 9 of WebGL2RenderingContext.texSubImage2D", "ArrayBufferView");
    2109           0 :           return false;
    2110             :         }
    2111             :       } else {
    2112           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 9 of WebGL2RenderingContext.texSubImage2D");
    2113           0 :         return false;
    2114             :       }
    2115             :       uint32_t arg9;
    2116           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
    2117           0 :         return false;
    2118             :       }
    2119           0 :       binding_detail::FastErrorResult rv;
    2120           0 :       self->TexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, Constify(arg8), arg9, rv);
    2121           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2122           0 :         return false;
    2123             :       }
    2124           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2125           0 :       args.rval().setUndefined();
    2126           0 :       return true;
    2127             :       break;
    2128             :     }
    2129             :     default: {
    2130           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.texSubImage2D");
    2131             :       break;
    2132             :     }
    2133             :   }
    2134             :   MOZ_CRASH("We have an always-returning default case");
    2135             :   return false;
    2136             : }
    2137             : 
    2138             : static const JSJitInfo texSubImage2D_methodinfo = {
    2139             :   { (JSJitGetterOp)texSubImage2D },
    2140             :   { prototypes::id::WebGL2RenderingContext },
    2141             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    2142             :   JSJitInfo::Method,
    2143             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2144             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2145             :   false,  /* isInfallible. False in setters. */
    2146             :   false,  /* isMovable.  Not relevant for setters. */
    2147             :   false, /* isEliminatable.  Not relevant for setters. */
    2148             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2149             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2150             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2151             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2152             : };
    2153             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2154             : static_assert(0 < 1, "There is no slot for us");
    2155             : 
    2156             : static bool
    2157           0 : texImage3D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    2158             : {
    2159           0 :   unsigned argcount = std::min(args.length(), 11u);
    2160           0 :   switch (argcount) {
    2161             :     case 10: {
    2162             :       uint32_t arg0;
    2163           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2164           0 :         return false;
    2165             :       }
    2166             :       int32_t arg1;
    2167           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2168           0 :         return false;
    2169             :       }
    2170             :       int32_t arg2;
    2171           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    2172           0 :         return false;
    2173             :       }
    2174             :       int32_t arg3;
    2175           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2176           0 :         return false;
    2177             :       }
    2178             :       int32_t arg4;
    2179           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2180           0 :         return false;
    2181             :       }
    2182             :       int32_t arg5;
    2183           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2184           0 :         return false;
    2185             :       }
    2186             :       int32_t arg6;
    2187           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    2188           0 :         return false;
    2189             :       }
    2190             :       uint32_t arg7;
    2191           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    2192           0 :         return false;
    2193             :       }
    2194             :       uint32_t arg8;
    2195           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    2196           0 :         return false;
    2197             :       }
    2198           0 :       if (args[9].isNullOrUndefined()) {
    2199           0 :         RootedTypedArray<Nullable<ArrayBufferView>> arg9(cx);
    2200           0 :         arg9.SetNull();
    2201           0 :         binding_detail::FastErrorResult rv;
    2202           0 :         self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, Constify(arg9), rv);
    2203           0 :         if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2204           0 :           return false;
    2205             :         }
    2206           0 :         MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2207           0 :         args.rval().setUndefined();
    2208           0 :         return true;
    2209             :       }
    2210           0 :       if (args[9].isObject()) {
    2211             :         do {
    2212           0 :           NonNull<mozilla::dom::HTMLCanvasElement> arg9;
    2213             :           {
    2214           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLCanvasElement, mozilla::dom::HTMLCanvasElement>(args[9], arg9);
    2215           0 :             if (NS_FAILED(rv)) {
    2216           0 :               break;
    2217             :             }
    2218             :           }
    2219           0 :           binding_detail::FastErrorResult rv;
    2220           0 :           self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, NonNullHelper(arg9), rv);
    2221           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2222           0 :             return false;
    2223             :           }
    2224           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2225           0 :           args.rval().setUndefined();
    2226           0 :           return true;
    2227             :         } while (0);
    2228             :         do {
    2229           0 :           NonNull<mozilla::dom::HTMLImageElement> arg9;
    2230             :           {
    2231           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLImageElement, mozilla::dom::HTMLImageElement>(args[9], arg9);
    2232           0 :             if (NS_FAILED(rv)) {
    2233           0 :               break;
    2234             :             }
    2235             :           }
    2236           0 :           binding_detail::FastErrorResult rv;
    2237           0 :           self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, NonNullHelper(arg9), rv);
    2238           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2239           0 :             return false;
    2240             :           }
    2241           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2242           0 :           args.rval().setUndefined();
    2243           0 :           return true;
    2244             :         } while (0);
    2245             :         do {
    2246           0 :           NonNull<mozilla::dom::HTMLVideoElement> arg9;
    2247             :           {
    2248           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLVideoElement, mozilla::dom::HTMLVideoElement>(args[9], arg9);
    2249           0 :             if (NS_FAILED(rv)) {
    2250           0 :               break;
    2251             :             }
    2252             :           }
    2253           0 :           binding_detail::FastErrorResult rv;
    2254           0 :           self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, NonNullHelper(arg9), rv);
    2255           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2256           0 :             return false;
    2257             :           }
    2258           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2259           0 :           args.rval().setUndefined();
    2260           0 :           return true;
    2261             :         } while (0);
    2262             :         do {
    2263           0 :           NonNull<mozilla::dom::ImageBitmap> arg9;
    2264             :           {
    2265           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageBitmap, mozilla::dom::ImageBitmap>(args[9], arg9);
    2266           0 :             if (NS_FAILED(rv)) {
    2267           0 :               break;
    2268             :             }
    2269             :           }
    2270           0 :           binding_detail::FastErrorResult rv;
    2271           0 :           self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, NonNullHelper(arg9), rv);
    2272           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2273           0 :             return false;
    2274             :           }
    2275           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2276           0 :           args.rval().setUndefined();
    2277           0 :           return true;
    2278             :         } while (0);
    2279             :         do {
    2280           0 :           NonNull<mozilla::dom::ImageData> arg9;
    2281             :           {
    2282           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageData, mozilla::dom::ImageData>(args[9], arg9);
    2283           0 :             if (NS_FAILED(rv)) {
    2284           0 :               break;
    2285             :             }
    2286             :           }
    2287           0 :           binding_detail::FastErrorResult rv;
    2288           0 :           self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, NonNullHelper(arg9), rv);
    2289           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2290           0 :             return false;
    2291             :           }
    2292           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2293           0 :           args.rval().setUndefined();
    2294           0 :           return true;
    2295             :         } while (0);
    2296             :         do {
    2297           0 :           RootedTypedArray<Nullable<ArrayBufferView>> arg9(cx);
    2298           0 :           if (!arg9.SetValue().Init(&args[9].toObject())) {
    2299           0 :             break;
    2300             :           }
    2301           0 :           binding_detail::FastErrorResult rv;
    2302           0 :           self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, Constify(arg9), rv);
    2303           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2304           0 :             return false;
    2305             :           }
    2306           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2307           0 :           args.rval().setUndefined();
    2308           0 :           return true;
    2309             :         } while (0);
    2310             :       }
    2311             :       int64_t arg9;
    2312           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[9], &arg9)) {
    2313           0 :         return false;
    2314             :       }
    2315           0 :       binding_detail::FastErrorResult rv;
    2316           0 :       self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, rv);
    2317           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2318           0 :         return false;
    2319             :       }
    2320           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2321           0 :       args.rval().setUndefined();
    2322           0 :       return true;
    2323             :       break;
    2324             :     }
    2325             :     case 11: {
    2326             :       uint32_t arg0;
    2327           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2328           0 :         return false;
    2329             :       }
    2330             :       int32_t arg1;
    2331           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2332           0 :         return false;
    2333             :       }
    2334             :       int32_t arg2;
    2335           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    2336           0 :         return false;
    2337             :       }
    2338             :       int32_t arg3;
    2339           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2340           0 :         return false;
    2341             :       }
    2342             :       int32_t arg4;
    2343           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2344           0 :         return false;
    2345             :       }
    2346             :       int32_t arg5;
    2347           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2348           0 :         return false;
    2349             :       }
    2350             :       int32_t arg6;
    2351           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    2352           0 :         return false;
    2353             :       }
    2354             :       uint32_t arg7;
    2355           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    2356           0 :         return false;
    2357             :       }
    2358             :       uint32_t arg8;
    2359           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    2360           0 :         return false;
    2361             :       }
    2362           0 :       RootedTypedArray<ArrayBufferView> arg9(cx);
    2363           0 :       if (args[9].isObject()) {
    2364           0 :         if (!arg9.Init(&args[9].toObject())) {
    2365           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 10 of WebGL2RenderingContext.texImage3D", "ArrayBufferView");
    2366           0 :           return false;
    2367             :         }
    2368             :       } else {
    2369           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 10 of WebGL2RenderingContext.texImage3D");
    2370           0 :         return false;
    2371             :       }
    2372             :       uint32_t arg10;
    2373           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[10], &arg10)) {
    2374           0 :         return false;
    2375             :       }
    2376           0 :       binding_detail::FastErrorResult rv;
    2377           0 :       self->TexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, Constify(arg9), arg10, rv);
    2378           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2379           0 :         return false;
    2380             :       }
    2381           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2382           0 :       args.rval().setUndefined();
    2383           0 :       return true;
    2384             :       break;
    2385             :     }
    2386             :     default: {
    2387           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.texImage3D");
    2388             :       break;
    2389             :     }
    2390             :   }
    2391             :   MOZ_CRASH("We have an always-returning default case");
    2392             :   return false;
    2393             : }
    2394             : 
    2395             : static const JSJitInfo texImage3D_methodinfo = {
    2396             :   { (JSJitGetterOp)texImage3D },
    2397             :   { prototypes::id::WebGL2RenderingContext },
    2398             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    2399             :   JSJitInfo::Method,
    2400             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2401             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2402             :   false,  /* isInfallible. False in setters. */
    2403             :   false,  /* isMovable.  Not relevant for setters. */
    2404             :   false, /* isEliminatable.  Not relevant for setters. */
    2405             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2406             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2407             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2408             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2409             : };
    2410             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2411             : static_assert(0 < 1, "There is no slot for us");
    2412             : 
    2413             : static bool
    2414           0 : texSubImage3D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    2415             : {
    2416           0 :   unsigned argcount = std::min(args.length(), 12u);
    2417           0 :   switch (argcount) {
    2418             :     case 11: {
    2419             :       uint32_t arg0;
    2420           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2421           0 :         return false;
    2422             :       }
    2423             :       int32_t arg1;
    2424           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2425           0 :         return false;
    2426             :       }
    2427             :       int32_t arg2;
    2428           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    2429           0 :         return false;
    2430             :       }
    2431             :       int32_t arg3;
    2432           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2433           0 :         return false;
    2434             :       }
    2435             :       int32_t arg4;
    2436           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2437           0 :         return false;
    2438             :       }
    2439             :       int32_t arg5;
    2440           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2441           0 :         return false;
    2442             :       }
    2443             :       int32_t arg6;
    2444           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    2445           0 :         return false;
    2446             :       }
    2447             :       int32_t arg7;
    2448           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
    2449           0 :         return false;
    2450             :       }
    2451             :       uint32_t arg8;
    2452           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    2453           0 :         return false;
    2454             :       }
    2455             :       uint32_t arg9;
    2456           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
    2457           0 :         return false;
    2458             :       }
    2459           0 :       if (args[10].isNullOrUndefined()) {
    2460           0 :         RootedTypedArray<Nullable<ArrayBufferView>> arg10(cx);
    2461           0 :         arg10.SetNull();
    2462             :         uint32_t arg11;
    2463           0 :         if (args.hasDefined(11)) {
    2464           0 :           if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[11], &arg11)) {
    2465           0 :             return false;
    2466             :           }
    2467             :         } else {
    2468           0 :           arg11 = 0U;
    2469             :         }
    2470           0 :         binding_detail::FastErrorResult rv;
    2471           0 :         self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, Constify(arg10), arg11, rv);
    2472           0 :         if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2473           0 :           return false;
    2474             :         }
    2475           0 :         MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2476           0 :         args.rval().setUndefined();
    2477           0 :         return true;
    2478             :       }
    2479           0 :       if (args[10].isObject()) {
    2480             :         do {
    2481           0 :           NonNull<mozilla::dom::HTMLCanvasElement> arg10;
    2482             :           {
    2483           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLCanvasElement, mozilla::dom::HTMLCanvasElement>(args[10], arg10);
    2484           0 :             if (NS_FAILED(rv)) {
    2485           0 :               break;
    2486             :             }
    2487             :           }
    2488           0 :           binding_detail::FastErrorResult rv;
    2489           0 :           self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, NonNullHelper(arg10), rv);
    2490           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2491           0 :             return false;
    2492             :           }
    2493           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2494           0 :           args.rval().setUndefined();
    2495           0 :           return true;
    2496             :         } while (0);
    2497             :         do {
    2498           0 :           NonNull<mozilla::dom::HTMLImageElement> arg10;
    2499             :           {
    2500           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLImageElement, mozilla::dom::HTMLImageElement>(args[10], arg10);
    2501           0 :             if (NS_FAILED(rv)) {
    2502           0 :               break;
    2503             :             }
    2504             :           }
    2505           0 :           binding_detail::FastErrorResult rv;
    2506           0 :           self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, NonNullHelper(arg10), rv);
    2507           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2508           0 :             return false;
    2509             :           }
    2510           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2511           0 :           args.rval().setUndefined();
    2512           0 :           return true;
    2513             :         } while (0);
    2514             :         do {
    2515           0 :           NonNull<mozilla::dom::HTMLVideoElement> arg10;
    2516             :           {
    2517           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLVideoElement, mozilla::dom::HTMLVideoElement>(args[10], arg10);
    2518           0 :             if (NS_FAILED(rv)) {
    2519           0 :               break;
    2520             :             }
    2521             :           }
    2522           0 :           binding_detail::FastErrorResult rv;
    2523           0 :           self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, NonNullHelper(arg10), rv);
    2524           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2525           0 :             return false;
    2526             :           }
    2527           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2528           0 :           args.rval().setUndefined();
    2529           0 :           return true;
    2530             :         } while (0);
    2531             :         do {
    2532           0 :           NonNull<mozilla::dom::ImageBitmap> arg10;
    2533             :           {
    2534           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageBitmap, mozilla::dom::ImageBitmap>(args[10], arg10);
    2535           0 :             if (NS_FAILED(rv)) {
    2536           0 :               break;
    2537             :             }
    2538             :           }
    2539           0 :           binding_detail::FastErrorResult rv;
    2540           0 :           self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, NonNullHelper(arg10), rv);
    2541           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2542           0 :             return false;
    2543             :           }
    2544           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2545           0 :           args.rval().setUndefined();
    2546           0 :           return true;
    2547             :         } while (0);
    2548             :         do {
    2549           0 :           NonNull<mozilla::dom::ImageData> arg10;
    2550             :           {
    2551           0 :             nsresult rv = UnwrapObject<prototypes::id::ImageData, mozilla::dom::ImageData>(args[10], arg10);
    2552           0 :             if (NS_FAILED(rv)) {
    2553           0 :               break;
    2554             :             }
    2555             :           }
    2556           0 :           binding_detail::FastErrorResult rv;
    2557           0 :           self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, NonNullHelper(arg10), rv);
    2558           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2559           0 :             return false;
    2560             :           }
    2561           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2562           0 :           args.rval().setUndefined();
    2563           0 :           return true;
    2564             :         } while (0);
    2565             :         do {
    2566           0 :           RootedTypedArray<Nullable<ArrayBufferView>> arg10(cx);
    2567           0 :           if (!arg10.SetValue().Init(&args[10].toObject())) {
    2568           0 :             break;
    2569             :           }
    2570             :           uint32_t arg11;
    2571           0 :           if (args.hasDefined(11)) {
    2572           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[11], &arg11)) {
    2573           0 :               return false;
    2574             :             }
    2575             :           } else {
    2576           0 :             arg11 = 0U;
    2577             :           }
    2578           0 :           binding_detail::FastErrorResult rv;
    2579           0 :           self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, Constify(arg10), arg11, rv);
    2580           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2581           0 :             return false;
    2582             :           }
    2583           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2584           0 :           args.rval().setUndefined();
    2585           0 :           return true;
    2586             :         } while (0);
    2587             :       }
    2588             :       int64_t arg10;
    2589           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[10], &arg10)) {
    2590           0 :         return false;
    2591             :       }
    2592           0 :       binding_detail::FastErrorResult rv;
    2593           0 :       self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, rv);
    2594           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2595           0 :         return false;
    2596             :       }
    2597           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2598           0 :       args.rval().setUndefined();
    2599           0 :       return true;
    2600             :       break;
    2601             :     }
    2602             :     case 12: {
    2603             :       uint32_t arg0;
    2604           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2605           0 :         return false;
    2606             :       }
    2607             :       int32_t arg1;
    2608           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2609           0 :         return false;
    2610             :       }
    2611             :       int32_t arg2;
    2612           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    2613           0 :         return false;
    2614             :       }
    2615             :       int32_t arg3;
    2616           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2617           0 :         return false;
    2618             :       }
    2619             :       int32_t arg4;
    2620           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2621           0 :         return false;
    2622             :       }
    2623             :       int32_t arg5;
    2624           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2625           0 :         return false;
    2626             :       }
    2627             :       int32_t arg6;
    2628           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    2629           0 :         return false;
    2630             :       }
    2631             :       int32_t arg7;
    2632           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
    2633           0 :         return false;
    2634             :       }
    2635             :       uint32_t arg8;
    2636           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    2637           0 :         return false;
    2638             :       }
    2639             :       uint32_t arg9;
    2640           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
    2641           0 :         return false;
    2642             :       }
    2643           0 :       RootedTypedArray<Nullable<ArrayBufferView>> arg10(cx);
    2644           0 :       if (args[10].isObject()) {
    2645           0 :         if (!arg10.SetValue().Init(&args[10].toObject())) {
    2646           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 11 of WebGL2RenderingContext.texSubImage3D", "ArrayBufferViewOrNull");
    2647           0 :           return false;
    2648             :         }
    2649           0 :       } else if (args[10].isNullOrUndefined()) {
    2650           0 :         arg10.SetNull();
    2651             :       } else {
    2652           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 11 of WebGL2RenderingContext.texSubImage3D");
    2653           0 :         return false;
    2654             :       }
    2655             :       uint32_t arg11;
    2656           0 :       if (args.hasDefined(11)) {
    2657           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[11], &arg11)) {
    2658           0 :           return false;
    2659             :         }
    2660             :       } else {
    2661           0 :         arg11 = 0U;
    2662             :       }
    2663           0 :       binding_detail::FastErrorResult rv;
    2664           0 :       self->TexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, Constify(arg10), arg11, rv);
    2665           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2666           0 :         return false;
    2667             :       }
    2668           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2669           0 :       args.rval().setUndefined();
    2670           0 :       return true;
    2671             :       break;
    2672             :     }
    2673             :     default: {
    2674           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.texSubImage3D");
    2675             :       break;
    2676             :     }
    2677             :   }
    2678             :   MOZ_CRASH("We have an always-returning default case");
    2679             :   return false;
    2680             : }
    2681             : 
    2682             : static const JSJitInfo texSubImage3D_methodinfo = {
    2683             :   { (JSJitGetterOp)texSubImage3D },
    2684             :   { prototypes::id::WebGL2RenderingContext },
    2685             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    2686             :   JSJitInfo::Method,
    2687             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2688             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2689             :   false,  /* isInfallible. False in setters. */
    2690             :   false,  /* isMovable.  Not relevant for setters. */
    2691             :   false, /* isEliminatable.  Not relevant for setters. */
    2692             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2693             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2694             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2695             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2696             : };
    2697             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2698             : static_assert(0 < 1, "There is no slot for us");
    2699             : 
    2700             : static bool
    2701           0 : copyTexSubImage3D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    2702             : {
    2703           0 :   if (MOZ_UNLIKELY(args.length() < 9)) {
    2704           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.copyTexSubImage3D");
    2705             :   }
    2706             :   uint32_t arg0;
    2707           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2708           0 :     return false;
    2709             :   }
    2710             :   int32_t arg1;
    2711           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2712           0 :     return false;
    2713             :   }
    2714             :   int32_t arg2;
    2715           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    2716           0 :     return false;
    2717             :   }
    2718             :   int32_t arg3;
    2719           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2720           0 :     return false;
    2721             :   }
    2722             :   int32_t arg4;
    2723           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2724           0 :     return false;
    2725             :   }
    2726             :   int32_t arg5;
    2727           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2728           0 :     return false;
    2729             :   }
    2730             :   int32_t arg6;
    2731           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    2732           0 :     return false;
    2733             :   }
    2734             :   int32_t arg7;
    2735           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
    2736           0 :     return false;
    2737             :   }
    2738             :   int32_t arg8;
    2739           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[8], &arg8)) {
    2740           0 :     return false;
    2741             :   }
    2742           0 :   self->CopyTexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
    2743           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2744           0 :   args.rval().setUndefined();
    2745           0 :   return true;
    2746             : }
    2747             : 
    2748             : static const JSJitInfo copyTexSubImage3D_methodinfo = {
    2749             :   { (JSJitGetterOp)copyTexSubImage3D },
    2750             :   { prototypes::id::WebGL2RenderingContext },
    2751             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    2752             :   JSJitInfo::Method,
    2753             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2754             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2755             :   false,  /* isInfallible. False in setters. */
    2756             :   false,  /* isMovable.  Not relevant for setters. */
    2757             :   false, /* isEliminatable.  Not relevant for setters. */
    2758             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2759             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2760             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2761             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2762             : };
    2763             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2764             : static_assert(0 < 1, "There is no slot for us");
    2765             : 
    2766             : static bool
    2767           0 : compressedTexImage2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    2768             : {
    2769           0 :   unsigned argcount = std::min(args.length(), 9u);
    2770           0 :   switch (argcount) {
    2771             :     case 7: {
    2772             :       uint32_t arg0;
    2773           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2774           0 :         return false;
    2775             :       }
    2776             :       int32_t arg1;
    2777           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2778           0 :         return false;
    2779             :       }
    2780             :       uint32_t arg2;
    2781           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    2782           0 :         return false;
    2783             :       }
    2784             :       int32_t arg3;
    2785           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2786           0 :         return false;
    2787             :       }
    2788             :       int32_t arg4;
    2789           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2790           0 :         return false;
    2791             :       }
    2792             :       int32_t arg5;
    2793           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2794           0 :         return false;
    2795             :       }
    2796           0 :       if (args[6].isObject()) {
    2797             :         do {
    2798           0 :           RootedTypedArray<ArrayBufferView> arg6(cx);
    2799           0 :           if (!arg6.Init(&args[6].toObject())) {
    2800           0 :             break;
    2801             :           }
    2802             :           uint32_t arg7;
    2803           0 :           if (args.hasDefined(7)) {
    2804           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    2805           0 :               return false;
    2806             :             }
    2807             :           } else {
    2808           0 :             arg7 = 0U;
    2809             :           }
    2810             :           uint32_t arg8;
    2811           0 :           if (args.hasDefined(8)) {
    2812           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    2813           0 :               return false;
    2814             :             }
    2815             :           } else {
    2816           0 :             arg8 = 0U;
    2817             :           }
    2818           0 :           self->CompressedTexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, Constify(arg6), arg7, arg8);
    2819           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2820           0 :           args.rval().setUndefined();
    2821           0 :           return true;
    2822             :         } while (0);
    2823             :       }
    2824             :       int64_t arg6;
    2825           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[6], &arg6)) {
    2826           0 :         return false;
    2827             :       }
    2828           0 :       self->CompressedTexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
    2829           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2830           0 :       args.rval().setUndefined();
    2831           0 :       return true;
    2832             :       break;
    2833             :     }
    2834             :     case 8: {
    2835             :       MOZ_FALLTHROUGH;
    2836             :     }
    2837             :     case 9: {
    2838             :       uint32_t arg0;
    2839           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2840           0 :         return false;
    2841             :       }
    2842             :       int32_t arg1;
    2843           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2844           0 :         return false;
    2845             :       }
    2846             :       uint32_t arg2;
    2847           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    2848           0 :         return false;
    2849             :       }
    2850             :       int32_t arg3;
    2851           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2852           0 :         return false;
    2853             :       }
    2854             :       int32_t arg4;
    2855           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2856           0 :         return false;
    2857             :       }
    2858             :       int32_t arg5;
    2859           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2860           0 :         return false;
    2861             :       }
    2862           0 :       RootedTypedArray<ArrayBufferView> arg6(cx);
    2863           0 :       if (args[6].isObject()) {
    2864           0 :         if (!arg6.Init(&args[6].toObject())) {
    2865           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 7 of WebGL2RenderingContext.compressedTexImage2D", "ArrayBufferView");
    2866           0 :           return false;
    2867             :         }
    2868             :       } else {
    2869           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 7 of WebGL2RenderingContext.compressedTexImage2D");
    2870           0 :         return false;
    2871             :       }
    2872             :       uint32_t arg7;
    2873           0 :       if (args.hasDefined(7)) {
    2874           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    2875           0 :           return false;
    2876             :         }
    2877             :       } else {
    2878           0 :         arg7 = 0U;
    2879             :       }
    2880             :       uint32_t arg8;
    2881           0 :       if (args.hasDefined(8)) {
    2882           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    2883           0 :           return false;
    2884             :         }
    2885             :       } else {
    2886           0 :         arg8 = 0U;
    2887             :       }
    2888           0 :       self->CompressedTexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, Constify(arg6), arg7, arg8);
    2889           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2890           0 :       args.rval().setUndefined();
    2891           0 :       return true;
    2892             :       break;
    2893             :     }
    2894             :     default: {
    2895           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.compressedTexImage2D");
    2896             :       break;
    2897             :     }
    2898             :   }
    2899             :   MOZ_CRASH("We have an always-returning default case");
    2900             :   return false;
    2901             : }
    2902             : 
    2903             : static const JSJitInfo compressedTexImage2D_methodinfo = {
    2904             :   { (JSJitGetterOp)compressedTexImage2D },
    2905             :   { prototypes::id::WebGL2RenderingContext },
    2906             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    2907             :   JSJitInfo::Method,
    2908             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2909             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2910             :   false,  /* isInfallible. False in setters. */
    2911             :   false,  /* isMovable.  Not relevant for setters. */
    2912             :   false, /* isEliminatable.  Not relevant for setters. */
    2913             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2914             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2915             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2916             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2917             : };
    2918             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2919             : static_assert(0 < 1, "There is no slot for us");
    2920             : 
    2921             : static bool
    2922           0 : compressedTexImage3D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    2923             : {
    2924           0 :   unsigned argcount = std::min(args.length(), 10u);
    2925           0 :   switch (argcount) {
    2926             :     case 8: {
    2927             :       uint32_t arg0;
    2928           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2929           0 :         return false;
    2930             :       }
    2931             :       int32_t arg1;
    2932           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    2933           0 :         return false;
    2934             :       }
    2935             :       uint32_t arg2;
    2936           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    2937           0 :         return false;
    2938             :       }
    2939             :       int32_t arg3;
    2940           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    2941           0 :         return false;
    2942             :       }
    2943             :       int32_t arg4;
    2944           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    2945           0 :         return false;
    2946             :       }
    2947             :       int32_t arg5;
    2948           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    2949           0 :         return false;
    2950             :       }
    2951             :       int32_t arg6;
    2952           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    2953           0 :         return false;
    2954             :       }
    2955           0 :       if (args[7].isObject()) {
    2956             :         do {
    2957           0 :           RootedTypedArray<ArrayBufferView> arg7(cx);
    2958           0 :           if (!arg7.Init(&args[7].toObject())) {
    2959           0 :             break;
    2960             :           }
    2961             :           uint32_t arg8;
    2962           0 :           if (args.hasDefined(8)) {
    2963           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    2964           0 :               return false;
    2965             :             }
    2966             :           } else {
    2967           0 :             arg8 = 0U;
    2968             :           }
    2969             :           uint32_t arg9;
    2970           0 :           if (args.hasDefined(9)) {
    2971           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
    2972           0 :               return false;
    2973             :             }
    2974             :           } else {
    2975           0 :             arg9 = 0U;
    2976             :           }
    2977           0 :           self->CompressedTexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, Constify(arg7), arg8, arg9);
    2978           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2979           0 :           args.rval().setUndefined();
    2980           0 :           return true;
    2981             :         } while (0);
    2982             :       }
    2983             :       int64_t arg7;
    2984           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[7], &arg7)) {
    2985           0 :         return false;
    2986             :       }
    2987           0 :       self->CompressedTexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
    2988           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2989           0 :       args.rval().setUndefined();
    2990           0 :       return true;
    2991             :       break;
    2992             :     }
    2993             :     case 9: {
    2994             :       MOZ_FALLTHROUGH;
    2995             :     }
    2996             :     case 10: {
    2997             :       uint32_t arg0;
    2998           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2999           0 :         return false;
    3000             :       }
    3001             :       int32_t arg1;
    3002           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3003           0 :         return false;
    3004             :       }
    3005             :       uint32_t arg2;
    3006           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3007           0 :         return false;
    3008             :       }
    3009             :       int32_t arg3;
    3010           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    3011           0 :         return false;
    3012             :       }
    3013             :       int32_t arg4;
    3014           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    3015           0 :         return false;
    3016             :       }
    3017             :       int32_t arg5;
    3018           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    3019           0 :         return false;
    3020             :       }
    3021             :       int32_t arg6;
    3022           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    3023           0 :         return false;
    3024             :       }
    3025           0 :       RootedTypedArray<ArrayBufferView> arg7(cx);
    3026           0 :       if (args[7].isObject()) {
    3027           0 :         if (!arg7.Init(&args[7].toObject())) {
    3028           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 8 of WebGL2RenderingContext.compressedTexImage3D", "ArrayBufferView");
    3029           0 :           return false;
    3030             :         }
    3031             :       } else {
    3032           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 8 of WebGL2RenderingContext.compressedTexImage3D");
    3033           0 :         return false;
    3034             :       }
    3035             :       uint32_t arg8;
    3036           0 :       if (args.hasDefined(8)) {
    3037           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    3038           0 :           return false;
    3039             :         }
    3040             :       } else {
    3041           0 :         arg8 = 0U;
    3042             :       }
    3043             :       uint32_t arg9;
    3044           0 :       if (args.hasDefined(9)) {
    3045           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
    3046           0 :           return false;
    3047             :         }
    3048             :       } else {
    3049           0 :         arg9 = 0U;
    3050             :       }
    3051           0 :       self->CompressedTexImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, Constify(arg7), arg8, arg9);
    3052           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3053           0 :       args.rval().setUndefined();
    3054           0 :       return true;
    3055             :       break;
    3056             :     }
    3057             :     default: {
    3058           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.compressedTexImage3D");
    3059             :       break;
    3060             :     }
    3061             :   }
    3062             :   MOZ_CRASH("We have an always-returning default case");
    3063             :   return false;
    3064             : }
    3065             : 
    3066             : static const JSJitInfo compressedTexImage3D_methodinfo = {
    3067             :   { (JSJitGetterOp)compressedTexImage3D },
    3068             :   { prototypes::id::WebGL2RenderingContext },
    3069             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3070             :   JSJitInfo::Method,
    3071             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3072             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3073             :   false,  /* isInfallible. False in setters. */
    3074             :   false,  /* isMovable.  Not relevant for setters. */
    3075             :   false, /* isEliminatable.  Not relevant for setters. */
    3076             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3077             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3078             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3079             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3080             : };
    3081             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3082             : static_assert(0 < 1, "There is no slot for us");
    3083             : 
    3084             : static bool
    3085           0 : compressedTexSubImage2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3086             : {
    3087           0 :   unsigned argcount = std::min(args.length(), 10u);
    3088           0 :   switch (argcount) {
    3089             :     case 8: {
    3090             :       uint32_t arg0;
    3091           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    3092           0 :         return false;
    3093             :       }
    3094             :       int32_t arg1;
    3095           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3096           0 :         return false;
    3097             :       }
    3098             :       int32_t arg2;
    3099           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    3100           0 :         return false;
    3101             :       }
    3102             :       int32_t arg3;
    3103           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    3104           0 :         return false;
    3105             :       }
    3106             :       int32_t arg4;
    3107           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    3108           0 :         return false;
    3109             :       }
    3110             :       int32_t arg5;
    3111           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    3112           0 :         return false;
    3113             :       }
    3114             :       uint32_t arg6;
    3115           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[6], &arg6)) {
    3116           0 :         return false;
    3117             :       }
    3118           0 :       if (args[7].isObject()) {
    3119             :         do {
    3120           0 :           RootedTypedArray<ArrayBufferView> arg7(cx);
    3121           0 :           if (!arg7.Init(&args[7].toObject())) {
    3122           0 :             break;
    3123             :           }
    3124             :           uint32_t arg8;
    3125           0 :           if (args.hasDefined(8)) {
    3126           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    3127           0 :               return false;
    3128             :             }
    3129             :           } else {
    3130           0 :             arg8 = 0U;
    3131             :           }
    3132             :           uint32_t arg9;
    3133           0 :           if (args.hasDefined(9)) {
    3134           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
    3135           0 :               return false;
    3136             :             }
    3137             :           } else {
    3138           0 :             arg9 = 0U;
    3139             :           }
    3140           0 :           self->CompressedTexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, Constify(arg7), arg8, arg9);
    3141           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3142           0 :           args.rval().setUndefined();
    3143           0 :           return true;
    3144             :         } while (0);
    3145             :       }
    3146             :       int64_t arg7;
    3147           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[7], &arg7)) {
    3148           0 :         return false;
    3149             :       }
    3150           0 :       self->CompressedTexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
    3151           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3152           0 :       args.rval().setUndefined();
    3153           0 :       return true;
    3154             :       break;
    3155             :     }
    3156             :     case 9: {
    3157             :       MOZ_FALLTHROUGH;
    3158             :     }
    3159             :     case 10: {
    3160             :       uint32_t arg0;
    3161           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    3162           0 :         return false;
    3163             :       }
    3164             :       int32_t arg1;
    3165           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3166           0 :         return false;
    3167             :       }
    3168             :       int32_t arg2;
    3169           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    3170           0 :         return false;
    3171             :       }
    3172             :       int32_t arg3;
    3173           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    3174           0 :         return false;
    3175             :       }
    3176             :       int32_t arg4;
    3177           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    3178           0 :         return false;
    3179             :       }
    3180             :       int32_t arg5;
    3181           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    3182           0 :         return false;
    3183             :       }
    3184             :       uint32_t arg6;
    3185           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[6], &arg6)) {
    3186           0 :         return false;
    3187             :       }
    3188           0 :       RootedTypedArray<ArrayBufferView> arg7(cx);
    3189           0 :       if (args[7].isObject()) {
    3190           0 :         if (!arg7.Init(&args[7].toObject())) {
    3191           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 8 of WebGL2RenderingContext.compressedTexSubImage2D", "ArrayBufferView");
    3192           0 :           return false;
    3193             :         }
    3194             :       } else {
    3195           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 8 of WebGL2RenderingContext.compressedTexSubImage2D");
    3196           0 :         return false;
    3197             :       }
    3198             :       uint32_t arg8;
    3199           0 :       if (args.hasDefined(8)) {
    3200           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    3201           0 :           return false;
    3202             :         }
    3203             :       } else {
    3204           0 :         arg8 = 0U;
    3205             :       }
    3206             :       uint32_t arg9;
    3207           0 :       if (args.hasDefined(9)) {
    3208           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[9], &arg9)) {
    3209           0 :           return false;
    3210             :         }
    3211             :       } else {
    3212           0 :         arg9 = 0U;
    3213             :       }
    3214           0 :       self->CompressedTexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, Constify(arg7), arg8, arg9);
    3215           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3216           0 :       args.rval().setUndefined();
    3217           0 :       return true;
    3218             :       break;
    3219             :     }
    3220             :     default: {
    3221           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.compressedTexSubImage2D");
    3222             :       break;
    3223             :     }
    3224             :   }
    3225             :   MOZ_CRASH("We have an always-returning default case");
    3226             :   return false;
    3227             : }
    3228             : 
    3229             : static const JSJitInfo compressedTexSubImage2D_methodinfo = {
    3230             :   { (JSJitGetterOp)compressedTexSubImage2D },
    3231             :   { prototypes::id::WebGL2RenderingContext },
    3232             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3233             :   JSJitInfo::Method,
    3234             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3235             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3236             :   false,  /* isInfallible. False in setters. */
    3237             :   false,  /* isMovable.  Not relevant for setters. */
    3238             :   false, /* isEliminatable.  Not relevant for setters. */
    3239             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3240             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3241             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3242             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3243             : };
    3244             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3245             : static_assert(0 < 1, "There is no slot for us");
    3246             : 
    3247             : static bool
    3248           0 : compressedTexSubImage3D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3249             : {
    3250           0 :   unsigned argcount = std::min(args.length(), 12u);
    3251           0 :   switch (argcount) {
    3252             :     case 10: {
    3253             :       uint32_t arg0;
    3254           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    3255           0 :         return false;
    3256             :       }
    3257             :       int32_t arg1;
    3258           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3259           0 :         return false;
    3260             :       }
    3261             :       int32_t arg2;
    3262           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    3263           0 :         return false;
    3264             :       }
    3265             :       int32_t arg3;
    3266           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    3267           0 :         return false;
    3268             :       }
    3269             :       int32_t arg4;
    3270           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    3271           0 :         return false;
    3272             :       }
    3273             :       int32_t arg5;
    3274           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    3275           0 :         return false;
    3276             :       }
    3277             :       int32_t arg6;
    3278           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    3279           0 :         return false;
    3280             :       }
    3281             :       int32_t arg7;
    3282           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
    3283           0 :         return false;
    3284             :       }
    3285             :       uint32_t arg8;
    3286           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    3287           0 :         return false;
    3288             :       }
    3289           0 :       if (args[9].isObject()) {
    3290             :         do {
    3291           0 :           RootedTypedArray<ArrayBufferView> arg9(cx);
    3292           0 :           if (!arg9.Init(&args[9].toObject())) {
    3293           0 :             break;
    3294             :           }
    3295             :           uint32_t arg10;
    3296           0 :           if (args.hasDefined(10)) {
    3297           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[10], &arg10)) {
    3298           0 :               return false;
    3299             :             }
    3300             :           } else {
    3301           0 :             arg10 = 0U;
    3302             :           }
    3303             :           uint32_t arg11;
    3304           0 :           if (args.hasDefined(11)) {
    3305           0 :             if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[11], &arg11)) {
    3306           0 :               return false;
    3307             :             }
    3308             :           } else {
    3309           0 :             arg11 = 0U;
    3310             :           }
    3311           0 :           self->CompressedTexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, Constify(arg9), arg10, arg11);
    3312           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3313           0 :           args.rval().setUndefined();
    3314           0 :           return true;
    3315             :         } while (0);
    3316             :       }
    3317             :       int64_t arg9;
    3318           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[9], &arg9)) {
    3319           0 :         return false;
    3320             :       }
    3321           0 :       self->CompressedTexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
    3322           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3323           0 :       args.rval().setUndefined();
    3324           0 :       return true;
    3325             :       break;
    3326             :     }
    3327             :     case 11: {
    3328             :       MOZ_FALLTHROUGH;
    3329             :     }
    3330             :     case 12: {
    3331             :       uint32_t arg0;
    3332           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    3333           0 :         return false;
    3334             :       }
    3335             :       int32_t arg1;
    3336           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    3337           0 :         return false;
    3338             :       }
    3339             :       int32_t arg2;
    3340           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    3341           0 :         return false;
    3342             :       }
    3343             :       int32_t arg3;
    3344           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    3345           0 :         return false;
    3346             :       }
    3347             :       int32_t arg4;
    3348           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    3349           0 :         return false;
    3350             :       }
    3351             :       int32_t arg5;
    3352           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    3353           0 :         return false;
    3354             :       }
    3355             :       int32_t arg6;
    3356           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    3357           0 :         return false;
    3358             :       }
    3359             :       int32_t arg7;
    3360           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
    3361           0 :         return false;
    3362             :       }
    3363             :       uint32_t arg8;
    3364           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[8], &arg8)) {
    3365           0 :         return false;
    3366             :       }
    3367           0 :       RootedTypedArray<ArrayBufferView> arg9(cx);
    3368           0 :       if (args[9].isObject()) {
    3369           0 :         if (!arg9.Init(&args[9].toObject())) {
    3370           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 10 of WebGL2RenderingContext.compressedTexSubImage3D", "ArrayBufferView");
    3371           0 :           return false;
    3372             :         }
    3373             :       } else {
    3374           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 10 of WebGL2RenderingContext.compressedTexSubImage3D");
    3375           0 :         return false;
    3376             :       }
    3377             :       uint32_t arg10;
    3378           0 :       if (args.hasDefined(10)) {
    3379           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[10], &arg10)) {
    3380           0 :           return false;
    3381             :         }
    3382             :       } else {
    3383           0 :         arg10 = 0U;
    3384             :       }
    3385             :       uint32_t arg11;
    3386           0 :       if (args.hasDefined(11)) {
    3387           0 :         if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[11], &arg11)) {
    3388           0 :           return false;
    3389             :         }
    3390             :       } else {
    3391           0 :         arg11 = 0U;
    3392             :       }
    3393           0 :       self->CompressedTexSubImage3D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, Constify(arg9), arg10, arg11);
    3394           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3395           0 :       args.rval().setUndefined();
    3396           0 :       return true;
    3397             :       break;
    3398             :     }
    3399             :     default: {
    3400           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.compressedTexSubImage3D");
    3401             :       break;
    3402             :     }
    3403             :   }
    3404             :   MOZ_CRASH("We have an always-returning default case");
    3405             :   return false;
    3406             : }
    3407             : 
    3408             : static const JSJitInfo compressedTexSubImage3D_methodinfo = {
    3409             :   { (JSJitGetterOp)compressedTexSubImage3D },
    3410             :   { prototypes::id::WebGL2RenderingContext },
    3411             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3412             :   JSJitInfo::Method,
    3413             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3414             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3415             :   false,  /* isInfallible. False in setters. */
    3416             :   false,  /* isMovable.  Not relevant for setters. */
    3417             :   false, /* isEliminatable.  Not relevant for setters. */
    3418             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3419             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3420             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3421             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3422             : };
    3423             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3424             : static_assert(0 < 1, "There is no slot for us");
    3425             : 
    3426             : static bool
    3427           0 : getFragDataLocation(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3428             : {
    3429           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3430           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getFragDataLocation");
    3431             :   }
    3432           0 :   NonNull<mozilla::WebGLProgram> arg0;
    3433           0 :   if (args[0].isObject()) {
    3434             :     {
    3435           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    3436           0 :       if (NS_FAILED(rv)) {
    3437           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getFragDataLocation", "WebGLProgram");
    3438           0 :         return false;
    3439             :       }
    3440             :     }
    3441             :   } else {
    3442           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getFragDataLocation");
    3443           0 :     return false;
    3444             :   }
    3445           0 :   binding_detail::FakeString arg1;
    3446           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    3447           0 :     return false;
    3448             :   }
    3449           0 :   int32_t result(self->GetFragDataLocation(NonNullHelper(arg0), NonNullHelper(Constify(arg1))));
    3450           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3451           0 :   args.rval().setInt32(int32_t(result));
    3452           0 :   return true;
    3453             : }
    3454             : 
    3455             : static const JSJitInfo getFragDataLocation_methodinfo = {
    3456             :   { (JSJitGetterOp)getFragDataLocation },
    3457             :   { prototypes::id::WebGL2RenderingContext },
    3458             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3459             :   JSJitInfo::Method,
    3460             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3461             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    3462             :   false,  /* isInfallible. False in setters. */
    3463             :   false,  /* isMovable.  Not relevant for setters. */
    3464             :   false, /* isEliminatable.  Not relevant for setters. */
    3465             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3466             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3467             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3468             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3469             : };
    3470             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3471             : static_assert(0 < 1, "There is no slot for us");
    3472             : 
    3473             : static bool
    3474           0 : uniform1ui(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3475             : {
    3476           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3477           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform1ui");
    3478             :   }
    3479             :   mozilla::WebGLUniformLocation* arg0;
    3480           0 :   if (args[0].isObject()) {
    3481             :     {
    3482           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    3483           0 :       if (NS_FAILED(rv)) {
    3484           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform1ui", "WebGLUniformLocation");
    3485           0 :         return false;
    3486             :       }
    3487             :     }
    3488           0 :   } else if (args[0].isNullOrUndefined()) {
    3489           0 :     arg0 = nullptr;
    3490             :   } else {
    3491           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform1ui");
    3492           0 :     return false;
    3493             :   }
    3494             :   uint32_t arg1;
    3495           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    3496           0 :     return false;
    3497             :   }
    3498           0 :   self->Uniform1ui(Constify(arg0), arg1);
    3499           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3500           0 :   args.rval().setUndefined();
    3501           0 :   return true;
    3502             : }
    3503             : 
    3504             : static const JSJitInfo uniform1ui_methodinfo = {
    3505             :   { (JSJitGetterOp)uniform1ui },
    3506             :   { prototypes::id::WebGL2RenderingContext },
    3507             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3508             :   JSJitInfo::Method,
    3509             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3510             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3511             :   false,  /* isInfallible. False in setters. */
    3512             :   false,  /* isMovable.  Not relevant for setters. */
    3513             :   false, /* isEliminatable.  Not relevant for setters. */
    3514             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3515             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3516             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3517             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3518             : };
    3519             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3520             : static_assert(0 < 1, "There is no slot for us");
    3521             : 
    3522             : static bool
    3523           0 : uniform2ui(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3524             : {
    3525           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    3526           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform2ui");
    3527             :   }
    3528             :   mozilla::WebGLUniformLocation* arg0;
    3529           0 :   if (args[0].isObject()) {
    3530             :     {
    3531           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    3532           0 :       if (NS_FAILED(rv)) {
    3533           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform2ui", "WebGLUniformLocation");
    3534           0 :         return false;
    3535             :       }
    3536             :     }
    3537           0 :   } else if (args[0].isNullOrUndefined()) {
    3538           0 :     arg0 = nullptr;
    3539             :   } else {
    3540           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform2ui");
    3541           0 :     return false;
    3542             :   }
    3543             :   uint32_t arg1;
    3544           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    3545           0 :     return false;
    3546             :   }
    3547             :   uint32_t arg2;
    3548           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3549           0 :     return false;
    3550             :   }
    3551           0 :   self->Uniform2ui(Constify(arg0), arg1, arg2);
    3552           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3553           0 :   args.rval().setUndefined();
    3554           0 :   return true;
    3555             : }
    3556             : 
    3557             : static const JSJitInfo uniform2ui_methodinfo = {
    3558             :   { (JSJitGetterOp)uniform2ui },
    3559             :   { prototypes::id::WebGL2RenderingContext },
    3560             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3561             :   JSJitInfo::Method,
    3562             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3563             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3564             :   false,  /* isInfallible. False in setters. */
    3565             :   false,  /* isMovable.  Not relevant for setters. */
    3566             :   false, /* isEliminatable.  Not relevant for setters. */
    3567             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3568             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3569             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3570             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3571             : };
    3572             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3573             : static_assert(0 < 1, "There is no slot for us");
    3574             : 
    3575             : static bool
    3576           0 : uniform3ui(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3577             : {
    3578           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    3579           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform3ui");
    3580             :   }
    3581             :   mozilla::WebGLUniformLocation* arg0;
    3582           0 :   if (args[0].isObject()) {
    3583             :     {
    3584           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    3585           0 :       if (NS_FAILED(rv)) {
    3586           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform3ui", "WebGLUniformLocation");
    3587           0 :         return false;
    3588             :       }
    3589             :     }
    3590           0 :   } else if (args[0].isNullOrUndefined()) {
    3591           0 :     arg0 = nullptr;
    3592             :   } else {
    3593           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform3ui");
    3594           0 :     return false;
    3595             :   }
    3596             :   uint32_t arg1;
    3597           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    3598           0 :     return false;
    3599             :   }
    3600             :   uint32_t arg2;
    3601           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3602           0 :     return false;
    3603             :   }
    3604             :   uint32_t arg3;
    3605           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    3606           0 :     return false;
    3607             :   }
    3608           0 :   self->Uniform3ui(Constify(arg0), arg1, arg2, arg3);
    3609           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3610           0 :   args.rval().setUndefined();
    3611           0 :   return true;
    3612             : }
    3613             : 
    3614             : static const JSJitInfo uniform3ui_methodinfo = {
    3615             :   { (JSJitGetterOp)uniform3ui },
    3616             :   { prototypes::id::WebGL2RenderingContext },
    3617             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3618             :   JSJitInfo::Method,
    3619             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3620             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3621             :   false,  /* isInfallible. False in setters. */
    3622             :   false,  /* isMovable.  Not relevant for setters. */
    3623             :   false, /* isEliminatable.  Not relevant for setters. */
    3624             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3625             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3626             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3627             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3628             : };
    3629             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3630             : static_assert(0 < 1, "There is no slot for us");
    3631             : 
    3632             : static bool
    3633           0 : uniform4ui(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3634             : {
    3635           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
    3636           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform4ui");
    3637             :   }
    3638             :   mozilla::WebGLUniformLocation* arg0;
    3639           0 :   if (args[0].isObject()) {
    3640             :     {
    3641           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    3642           0 :       if (NS_FAILED(rv)) {
    3643           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform4ui", "WebGLUniformLocation");
    3644           0 :         return false;
    3645             :       }
    3646             :     }
    3647           0 :   } else if (args[0].isNullOrUndefined()) {
    3648           0 :     arg0 = nullptr;
    3649             :   } else {
    3650           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform4ui");
    3651           0 :     return false;
    3652             :   }
    3653             :   uint32_t arg1;
    3654           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    3655           0 :     return false;
    3656             :   }
    3657             :   uint32_t arg2;
    3658           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3659           0 :     return false;
    3660             :   }
    3661             :   uint32_t arg3;
    3662           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    3663           0 :     return false;
    3664             :   }
    3665             :   uint32_t arg4;
    3666           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    3667           0 :     return false;
    3668             :   }
    3669           0 :   self->Uniform4ui(Constify(arg0), arg1, arg2, arg3, arg4);
    3670           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3671           0 :   args.rval().setUndefined();
    3672           0 :   return true;
    3673             : }
    3674             : 
    3675             : static const JSJitInfo uniform4ui_methodinfo = {
    3676             :   { (JSJitGetterOp)uniform4ui },
    3677             :   { prototypes::id::WebGL2RenderingContext },
    3678             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3679             :   JSJitInfo::Method,
    3680             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3681             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3682             :   false,  /* isInfallible. False in setters. */
    3683             :   false,  /* isMovable.  Not relevant for setters. */
    3684             :   false, /* isEliminatable.  Not relevant for setters. */
    3685             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3686             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3687             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3688             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3689             : };
    3690             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3691             : static_assert(0 < 1, "There is no slot for us");
    3692             : 
    3693             : static bool
    3694           0 : uniform1fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3695             : {
    3696           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3697           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform1fv");
    3698             :   }
    3699             :   mozilla::WebGLUniformLocation* arg0;
    3700           0 :   if (args[0].isObject()) {
    3701             :     {
    3702           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    3703           0 :       if (NS_FAILED(rv)) {
    3704           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform1fv", "WebGLUniformLocation");
    3705           0 :         return false;
    3706             :       }
    3707             :     }
    3708           0 :   } else if (args[0].isNullOrUndefined()) {
    3709           0 :     arg0 = nullptr;
    3710             :   } else {
    3711           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform1fv");
    3712           0 :     return false;
    3713             :   }
    3714           0 :   Float32ArrayOrUnrestrictedFloatSequence arg1;
    3715           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg1_holder(arg1);
    3716             :   {
    3717           0 :     bool done = false, failed = false, tryNext;
    3718           0 :     if (args[1].isObject()) {
    3719           0 :       done = (failed = !arg1_holder.TrySetToFloat32Array(cx, args[1], tryNext, false)) || !tryNext;
    3720             : 
    3721           0 :       if (!done) {
    3722           0 :         done = (failed = !arg1_holder.TrySetToUnrestrictedFloatSequence(cx, args[1], tryNext, false)) || !tryNext;
    3723             :       }
    3724             :     }
    3725           0 :     if (failed) {
    3726           0 :       return false;
    3727             :     }
    3728           0 :     if (!done) {
    3729           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform1fv", "Float32Array, UnrestrictedFloatSequence");
    3730           0 :       return false;
    3731             :     }
    3732             :   }
    3733             :   uint32_t arg2;
    3734           0 :   if (args.hasDefined(2)) {
    3735           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3736           0 :       return false;
    3737             :     }
    3738             :   } else {
    3739           0 :     arg2 = 0U;
    3740             :   }
    3741             :   uint32_t arg3;
    3742           0 :   if (args.hasDefined(3)) {
    3743           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    3744           0 :       return false;
    3745             :     }
    3746             :   } else {
    3747           0 :     arg3 = 0U;
    3748             :   }
    3749           0 :   self->Uniform1fv(Constify(arg0), Constify(arg1), arg2, arg3);
    3750           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3751           0 :   args.rval().setUndefined();
    3752           0 :   return true;
    3753             : }
    3754             : 
    3755             : static const JSJitInfo uniform1fv_methodinfo = {
    3756             :   { (JSJitGetterOp)uniform1fv },
    3757             :   { prototypes::id::WebGL2RenderingContext },
    3758             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3759             :   JSJitInfo::Method,
    3760             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3761             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3762             :   false,  /* isInfallible. False in setters. */
    3763             :   false,  /* isMovable.  Not relevant for setters. */
    3764             :   false, /* isEliminatable.  Not relevant for setters. */
    3765             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3766             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3767             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3768             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3769             : };
    3770             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3771             : static_assert(0 < 1, "There is no slot for us");
    3772             : 
    3773             : static bool
    3774           0 : uniform2fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3775             : {
    3776           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3777           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform2fv");
    3778             :   }
    3779             :   mozilla::WebGLUniformLocation* arg0;
    3780           0 :   if (args[0].isObject()) {
    3781             :     {
    3782           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    3783           0 :       if (NS_FAILED(rv)) {
    3784           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform2fv", "WebGLUniformLocation");
    3785           0 :         return false;
    3786             :       }
    3787             :     }
    3788           0 :   } else if (args[0].isNullOrUndefined()) {
    3789           0 :     arg0 = nullptr;
    3790             :   } else {
    3791           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform2fv");
    3792           0 :     return false;
    3793             :   }
    3794           0 :   Float32ArrayOrUnrestrictedFloatSequence arg1;
    3795           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg1_holder(arg1);
    3796             :   {
    3797           0 :     bool done = false, failed = false, tryNext;
    3798           0 :     if (args[1].isObject()) {
    3799           0 :       done = (failed = !arg1_holder.TrySetToFloat32Array(cx, args[1], tryNext, false)) || !tryNext;
    3800             : 
    3801           0 :       if (!done) {
    3802           0 :         done = (failed = !arg1_holder.TrySetToUnrestrictedFloatSequence(cx, args[1], tryNext, false)) || !tryNext;
    3803             :       }
    3804             :     }
    3805           0 :     if (failed) {
    3806           0 :       return false;
    3807             :     }
    3808           0 :     if (!done) {
    3809           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform2fv", "Float32Array, UnrestrictedFloatSequence");
    3810           0 :       return false;
    3811             :     }
    3812             :   }
    3813             :   uint32_t arg2;
    3814           0 :   if (args.hasDefined(2)) {
    3815           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3816           0 :       return false;
    3817             :     }
    3818             :   } else {
    3819           0 :     arg2 = 0U;
    3820             :   }
    3821             :   uint32_t arg3;
    3822           0 :   if (args.hasDefined(3)) {
    3823           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    3824           0 :       return false;
    3825             :     }
    3826             :   } else {
    3827           0 :     arg3 = 0U;
    3828             :   }
    3829           0 :   self->Uniform2fv(Constify(arg0), Constify(arg1), arg2, arg3);
    3830           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3831           0 :   args.rval().setUndefined();
    3832           0 :   return true;
    3833             : }
    3834             : 
    3835             : static const JSJitInfo uniform2fv_methodinfo = {
    3836             :   { (JSJitGetterOp)uniform2fv },
    3837             :   { prototypes::id::WebGL2RenderingContext },
    3838             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3839             :   JSJitInfo::Method,
    3840             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3841             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3842             :   false,  /* isInfallible. False in setters. */
    3843             :   false,  /* isMovable.  Not relevant for setters. */
    3844             :   false, /* isEliminatable.  Not relevant for setters. */
    3845             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3846             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3847             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3848             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3849             : };
    3850             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3851             : static_assert(0 < 1, "There is no slot for us");
    3852             : 
    3853             : static bool
    3854           0 : uniform3fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3855             : {
    3856           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3857           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform3fv");
    3858             :   }
    3859             :   mozilla::WebGLUniformLocation* arg0;
    3860           0 :   if (args[0].isObject()) {
    3861             :     {
    3862           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    3863           0 :       if (NS_FAILED(rv)) {
    3864           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform3fv", "WebGLUniformLocation");
    3865           0 :         return false;
    3866             :       }
    3867             :     }
    3868           0 :   } else if (args[0].isNullOrUndefined()) {
    3869           0 :     arg0 = nullptr;
    3870             :   } else {
    3871           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform3fv");
    3872           0 :     return false;
    3873             :   }
    3874           0 :   Float32ArrayOrUnrestrictedFloatSequence arg1;
    3875           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg1_holder(arg1);
    3876             :   {
    3877           0 :     bool done = false, failed = false, tryNext;
    3878           0 :     if (args[1].isObject()) {
    3879           0 :       done = (failed = !arg1_holder.TrySetToFloat32Array(cx, args[1], tryNext, false)) || !tryNext;
    3880             : 
    3881           0 :       if (!done) {
    3882           0 :         done = (failed = !arg1_holder.TrySetToUnrestrictedFloatSequence(cx, args[1], 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, "Argument 2 of WebGL2RenderingContext.uniform3fv", "Float32Array, UnrestrictedFloatSequence");
    3890           0 :       return false;
    3891             :     }
    3892             :   }
    3893             :   uint32_t arg2;
    3894           0 :   if (args.hasDefined(2)) {
    3895           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3896           0 :       return false;
    3897             :     }
    3898             :   } else {
    3899           0 :     arg2 = 0U;
    3900             :   }
    3901             :   uint32_t arg3;
    3902           0 :   if (args.hasDefined(3)) {
    3903           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    3904           0 :       return false;
    3905             :     }
    3906             :   } else {
    3907           0 :     arg3 = 0U;
    3908             :   }
    3909           0 :   self->Uniform3fv(Constify(arg0), Constify(arg1), arg2, arg3);
    3910           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3911           0 :   args.rval().setUndefined();
    3912           0 :   return true;
    3913             : }
    3914             : 
    3915             : static const JSJitInfo uniform3fv_methodinfo = {
    3916             :   { (JSJitGetterOp)uniform3fv },
    3917             :   { prototypes::id::WebGL2RenderingContext },
    3918             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3919             :   JSJitInfo::Method,
    3920             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3921             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3922             :   false,  /* isInfallible. False in setters. */
    3923             :   false,  /* isMovable.  Not relevant for setters. */
    3924             :   false, /* isEliminatable.  Not relevant for setters. */
    3925             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3926             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3927             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3928             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3929             : };
    3930             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3931             : static_assert(0 < 1, "There is no slot for us");
    3932             : 
    3933             : static bool
    3934           0 : uniform4fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    3935             : {
    3936           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3937           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform4fv");
    3938             :   }
    3939             :   mozilla::WebGLUniformLocation* arg0;
    3940           0 :   if (args[0].isObject()) {
    3941             :     {
    3942           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    3943           0 :       if (NS_FAILED(rv)) {
    3944           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform4fv", "WebGLUniformLocation");
    3945           0 :         return false;
    3946             :       }
    3947             :     }
    3948           0 :   } else if (args[0].isNullOrUndefined()) {
    3949           0 :     arg0 = nullptr;
    3950             :   } else {
    3951           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform4fv");
    3952           0 :     return false;
    3953             :   }
    3954           0 :   Float32ArrayOrUnrestrictedFloatSequence arg1;
    3955           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg1_holder(arg1);
    3956             :   {
    3957           0 :     bool done = false, failed = false, tryNext;
    3958           0 :     if (args[1].isObject()) {
    3959           0 :       done = (failed = !arg1_holder.TrySetToFloat32Array(cx, args[1], tryNext, false)) || !tryNext;
    3960             : 
    3961           0 :       if (!done) {
    3962           0 :         done = (failed = !arg1_holder.TrySetToUnrestrictedFloatSequence(cx, args[1], tryNext, false)) || !tryNext;
    3963             :       }
    3964             :     }
    3965           0 :     if (failed) {
    3966           0 :       return false;
    3967             :     }
    3968           0 :     if (!done) {
    3969           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform4fv", "Float32Array, UnrestrictedFloatSequence");
    3970           0 :       return false;
    3971             :     }
    3972             :   }
    3973             :   uint32_t arg2;
    3974           0 :   if (args.hasDefined(2)) {
    3975           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3976           0 :       return false;
    3977             :     }
    3978             :   } else {
    3979           0 :     arg2 = 0U;
    3980             :   }
    3981             :   uint32_t arg3;
    3982           0 :   if (args.hasDefined(3)) {
    3983           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    3984           0 :       return false;
    3985             :     }
    3986             :   } else {
    3987           0 :     arg3 = 0U;
    3988             :   }
    3989           0 :   self->Uniform4fv(Constify(arg0), Constify(arg1), arg2, arg3);
    3990           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3991           0 :   args.rval().setUndefined();
    3992           0 :   return true;
    3993             : }
    3994             : 
    3995             : static const JSJitInfo uniform4fv_methodinfo = {
    3996             :   { (JSJitGetterOp)uniform4fv },
    3997             :   { prototypes::id::WebGL2RenderingContext },
    3998             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    3999             :   JSJitInfo::Method,
    4000             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4001             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4002             :   false,  /* isInfallible. False in setters. */
    4003             :   false,  /* isMovable.  Not relevant for setters. */
    4004             :   false, /* isEliminatable.  Not relevant for setters. */
    4005             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4006             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4007             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4008             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4009             : };
    4010             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4011             : static_assert(0 < 1, "There is no slot for us");
    4012             : 
    4013             : static bool
    4014           0 : uniform1iv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4015             : {
    4016           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    4017           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform1iv");
    4018             :   }
    4019             :   mozilla::WebGLUniformLocation* arg0;
    4020           0 :   if (args[0].isObject()) {
    4021             :     {
    4022           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4023           0 :       if (NS_FAILED(rv)) {
    4024           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform1iv", "WebGLUniformLocation");
    4025           0 :         return false;
    4026             :       }
    4027             :     }
    4028           0 :   } else if (args[0].isNullOrUndefined()) {
    4029           0 :     arg0 = nullptr;
    4030             :   } else {
    4031           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform1iv");
    4032           0 :     return false;
    4033             :   }
    4034           0 :   Int32ArrayOrLongSequence arg1;
    4035           0 :   Int32ArrayOrLongSequenceArgument arg1_holder(arg1);
    4036             :   {
    4037           0 :     bool done = false, failed = false, tryNext;
    4038           0 :     if (args[1].isObject()) {
    4039           0 :       done = (failed = !arg1_holder.TrySetToInt32Array(cx, args[1], tryNext, false)) || !tryNext;
    4040             : 
    4041           0 :       if (!done) {
    4042           0 :         done = (failed = !arg1_holder.TrySetToLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    4043             :       }
    4044             :     }
    4045           0 :     if (failed) {
    4046           0 :       return false;
    4047             :     }
    4048           0 :     if (!done) {
    4049           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform1iv", "Int32Array, LongSequence");
    4050           0 :       return false;
    4051             :     }
    4052             :   }
    4053             :   uint32_t arg2;
    4054           0 :   if (args.hasDefined(2)) {
    4055           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    4056           0 :       return false;
    4057             :     }
    4058             :   } else {
    4059           0 :     arg2 = 0U;
    4060             :   }
    4061             :   uint32_t arg3;
    4062           0 :   if (args.hasDefined(3)) {
    4063           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4064           0 :       return false;
    4065             :     }
    4066             :   } else {
    4067           0 :     arg3 = 0U;
    4068             :   }
    4069           0 :   self->Uniform1iv(Constify(arg0), Constify(arg1), arg2, arg3);
    4070           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4071           0 :   args.rval().setUndefined();
    4072           0 :   return true;
    4073             : }
    4074             : 
    4075             : static const JSJitInfo uniform1iv_methodinfo = {
    4076             :   { (JSJitGetterOp)uniform1iv },
    4077             :   { prototypes::id::WebGL2RenderingContext },
    4078             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4079             :   JSJitInfo::Method,
    4080             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4081             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4082             :   false,  /* isInfallible. False in setters. */
    4083             :   false,  /* isMovable.  Not relevant for setters. */
    4084             :   false, /* isEliminatable.  Not relevant for setters. */
    4085             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4086             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4087             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4088             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4089             : };
    4090             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4091             : static_assert(0 < 1, "There is no slot for us");
    4092             : 
    4093             : static bool
    4094           0 : uniform2iv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4095             : {
    4096           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    4097           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform2iv");
    4098             :   }
    4099             :   mozilla::WebGLUniformLocation* arg0;
    4100           0 :   if (args[0].isObject()) {
    4101             :     {
    4102           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4103           0 :       if (NS_FAILED(rv)) {
    4104           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform2iv", "WebGLUniformLocation");
    4105           0 :         return false;
    4106             :       }
    4107             :     }
    4108           0 :   } else if (args[0].isNullOrUndefined()) {
    4109           0 :     arg0 = nullptr;
    4110             :   } else {
    4111           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform2iv");
    4112           0 :     return false;
    4113             :   }
    4114           0 :   Int32ArrayOrLongSequence arg1;
    4115           0 :   Int32ArrayOrLongSequenceArgument arg1_holder(arg1);
    4116             :   {
    4117           0 :     bool done = false, failed = false, tryNext;
    4118           0 :     if (args[1].isObject()) {
    4119           0 :       done = (failed = !arg1_holder.TrySetToInt32Array(cx, args[1], tryNext, false)) || !tryNext;
    4120             : 
    4121           0 :       if (!done) {
    4122           0 :         done = (failed = !arg1_holder.TrySetToLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    4123             :       }
    4124             :     }
    4125           0 :     if (failed) {
    4126           0 :       return false;
    4127             :     }
    4128           0 :     if (!done) {
    4129           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform2iv", "Int32Array, LongSequence");
    4130           0 :       return false;
    4131             :     }
    4132             :   }
    4133             :   uint32_t arg2;
    4134           0 :   if (args.hasDefined(2)) {
    4135           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    4136           0 :       return false;
    4137             :     }
    4138             :   } else {
    4139           0 :     arg2 = 0U;
    4140             :   }
    4141             :   uint32_t arg3;
    4142           0 :   if (args.hasDefined(3)) {
    4143           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4144           0 :       return false;
    4145             :     }
    4146             :   } else {
    4147           0 :     arg3 = 0U;
    4148             :   }
    4149           0 :   self->Uniform2iv(Constify(arg0), Constify(arg1), arg2, arg3);
    4150           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4151           0 :   args.rval().setUndefined();
    4152           0 :   return true;
    4153             : }
    4154             : 
    4155             : static const JSJitInfo uniform2iv_methodinfo = {
    4156             :   { (JSJitGetterOp)uniform2iv },
    4157             :   { prototypes::id::WebGL2RenderingContext },
    4158             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4159             :   JSJitInfo::Method,
    4160             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4161             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4162             :   false,  /* isInfallible. False in setters. */
    4163             :   false,  /* isMovable.  Not relevant for setters. */
    4164             :   false, /* isEliminatable.  Not relevant for setters. */
    4165             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4166             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4167             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4168             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4169             : };
    4170             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4171             : static_assert(0 < 1, "There is no slot for us");
    4172             : 
    4173             : static bool
    4174           0 : uniform3iv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4175             : {
    4176           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    4177           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform3iv");
    4178             :   }
    4179             :   mozilla::WebGLUniformLocation* arg0;
    4180           0 :   if (args[0].isObject()) {
    4181             :     {
    4182           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4183           0 :       if (NS_FAILED(rv)) {
    4184           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform3iv", "WebGLUniformLocation");
    4185           0 :         return false;
    4186             :       }
    4187             :     }
    4188           0 :   } else if (args[0].isNullOrUndefined()) {
    4189           0 :     arg0 = nullptr;
    4190             :   } else {
    4191           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform3iv");
    4192           0 :     return false;
    4193             :   }
    4194           0 :   Int32ArrayOrLongSequence arg1;
    4195           0 :   Int32ArrayOrLongSequenceArgument arg1_holder(arg1);
    4196             :   {
    4197           0 :     bool done = false, failed = false, tryNext;
    4198           0 :     if (args[1].isObject()) {
    4199           0 :       done = (failed = !arg1_holder.TrySetToInt32Array(cx, args[1], tryNext, false)) || !tryNext;
    4200             : 
    4201           0 :       if (!done) {
    4202           0 :         done = (failed = !arg1_holder.TrySetToLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    4203             :       }
    4204             :     }
    4205           0 :     if (failed) {
    4206           0 :       return false;
    4207             :     }
    4208           0 :     if (!done) {
    4209           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform3iv", "Int32Array, LongSequence");
    4210           0 :       return false;
    4211             :     }
    4212             :   }
    4213             :   uint32_t arg2;
    4214           0 :   if (args.hasDefined(2)) {
    4215           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    4216           0 :       return false;
    4217             :     }
    4218             :   } else {
    4219           0 :     arg2 = 0U;
    4220             :   }
    4221             :   uint32_t arg3;
    4222           0 :   if (args.hasDefined(3)) {
    4223           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4224           0 :       return false;
    4225             :     }
    4226             :   } else {
    4227           0 :     arg3 = 0U;
    4228             :   }
    4229           0 :   self->Uniform3iv(Constify(arg0), Constify(arg1), arg2, arg3);
    4230           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4231           0 :   args.rval().setUndefined();
    4232           0 :   return true;
    4233             : }
    4234             : 
    4235             : static const JSJitInfo uniform3iv_methodinfo = {
    4236             :   { (JSJitGetterOp)uniform3iv },
    4237             :   { prototypes::id::WebGL2RenderingContext },
    4238             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4239             :   JSJitInfo::Method,
    4240             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4241             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4242             :   false,  /* isInfallible. False in setters. */
    4243             :   false,  /* isMovable.  Not relevant for setters. */
    4244             :   false, /* isEliminatable.  Not relevant for setters. */
    4245             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4246             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4247             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4248             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4249             : };
    4250             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4251             : static_assert(0 < 1, "There is no slot for us");
    4252             : 
    4253             : static bool
    4254           0 : uniform4iv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4255             : {
    4256           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    4257           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform4iv");
    4258             :   }
    4259             :   mozilla::WebGLUniformLocation* arg0;
    4260           0 :   if (args[0].isObject()) {
    4261             :     {
    4262           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4263           0 :       if (NS_FAILED(rv)) {
    4264           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform4iv", "WebGLUniformLocation");
    4265           0 :         return false;
    4266             :       }
    4267             :     }
    4268           0 :   } else if (args[0].isNullOrUndefined()) {
    4269           0 :     arg0 = nullptr;
    4270             :   } else {
    4271           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform4iv");
    4272           0 :     return false;
    4273             :   }
    4274           0 :   Int32ArrayOrLongSequence arg1;
    4275           0 :   Int32ArrayOrLongSequenceArgument arg1_holder(arg1);
    4276             :   {
    4277           0 :     bool done = false, failed = false, tryNext;
    4278           0 :     if (args[1].isObject()) {
    4279           0 :       done = (failed = !arg1_holder.TrySetToInt32Array(cx, args[1], tryNext, false)) || !tryNext;
    4280             : 
    4281           0 :       if (!done) {
    4282           0 :         done = (failed = !arg1_holder.TrySetToLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    4283             :       }
    4284             :     }
    4285           0 :     if (failed) {
    4286           0 :       return false;
    4287             :     }
    4288           0 :     if (!done) {
    4289           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform4iv", "Int32Array, LongSequence");
    4290           0 :       return false;
    4291             :     }
    4292             :   }
    4293             :   uint32_t arg2;
    4294           0 :   if (args.hasDefined(2)) {
    4295           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    4296           0 :       return false;
    4297             :     }
    4298             :   } else {
    4299           0 :     arg2 = 0U;
    4300             :   }
    4301             :   uint32_t arg3;
    4302           0 :   if (args.hasDefined(3)) {
    4303           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4304           0 :       return false;
    4305             :     }
    4306             :   } else {
    4307           0 :     arg3 = 0U;
    4308             :   }
    4309           0 :   self->Uniform4iv(Constify(arg0), Constify(arg1), arg2, arg3);
    4310           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4311           0 :   args.rval().setUndefined();
    4312           0 :   return true;
    4313             : }
    4314             : 
    4315             : static const JSJitInfo uniform4iv_methodinfo = {
    4316             :   { (JSJitGetterOp)uniform4iv },
    4317             :   { prototypes::id::WebGL2RenderingContext },
    4318             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4319             :   JSJitInfo::Method,
    4320             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4321             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4322             :   false,  /* isInfallible. False in setters. */
    4323             :   false,  /* isMovable.  Not relevant for setters. */
    4324             :   false, /* isEliminatable.  Not relevant for setters. */
    4325             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4326             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4327             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4328             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4329             : };
    4330             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4331             : static_assert(0 < 1, "There is no slot for us");
    4332             : 
    4333             : static bool
    4334           0 : uniform1uiv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4335             : {
    4336           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    4337           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform1uiv");
    4338             :   }
    4339             :   mozilla::WebGLUniformLocation* arg0;
    4340           0 :   if (args[0].isObject()) {
    4341             :     {
    4342           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4343           0 :       if (NS_FAILED(rv)) {
    4344           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform1uiv", "WebGLUniformLocation");
    4345           0 :         return false;
    4346             :       }
    4347             :     }
    4348           0 :   } else if (args[0].isNullOrUndefined()) {
    4349           0 :     arg0 = nullptr;
    4350             :   } else {
    4351           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform1uiv");
    4352           0 :     return false;
    4353             :   }
    4354           0 :   Uint32ArrayOrUnsignedLongSequence arg1;
    4355           0 :   Uint32ArrayOrUnsignedLongSequenceArgument arg1_holder(arg1);
    4356             :   {
    4357           0 :     bool done = false, failed = false, tryNext;
    4358           0 :     if (args[1].isObject()) {
    4359           0 :       done = (failed = !arg1_holder.TrySetToUint32Array(cx, args[1], tryNext, false)) || !tryNext;
    4360             : 
    4361           0 :       if (!done) {
    4362           0 :         done = (failed = !arg1_holder.TrySetToUnsignedLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    4363             :       }
    4364             :     }
    4365           0 :     if (failed) {
    4366           0 :       return false;
    4367             :     }
    4368           0 :     if (!done) {
    4369           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform1uiv", "Uint32Array, UnsignedLongSequence");
    4370           0 :       return false;
    4371             :     }
    4372             :   }
    4373             :   uint32_t arg2;
    4374           0 :   if (args.hasDefined(2)) {
    4375           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    4376           0 :       return false;
    4377             :     }
    4378             :   } else {
    4379           0 :     arg2 = 0U;
    4380             :   }
    4381             :   uint32_t arg3;
    4382           0 :   if (args.hasDefined(3)) {
    4383           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4384           0 :       return false;
    4385             :     }
    4386             :   } else {
    4387           0 :     arg3 = 0U;
    4388             :   }
    4389           0 :   self->Uniform1uiv(Constify(arg0), Constify(arg1), arg2, arg3);
    4390           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4391           0 :   args.rval().setUndefined();
    4392           0 :   return true;
    4393             : }
    4394             : 
    4395             : static const JSJitInfo uniform1uiv_methodinfo = {
    4396             :   { (JSJitGetterOp)uniform1uiv },
    4397             :   { prototypes::id::WebGL2RenderingContext },
    4398             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4399             :   JSJitInfo::Method,
    4400             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4401             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4402             :   false,  /* isInfallible. False in setters. */
    4403             :   false,  /* isMovable.  Not relevant for setters. */
    4404             :   false, /* isEliminatable.  Not relevant for setters. */
    4405             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4406             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4407             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4408             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4409             : };
    4410             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4411             : static_assert(0 < 1, "There is no slot for us");
    4412             : 
    4413             : static bool
    4414           0 : uniform2uiv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4415             : {
    4416           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    4417           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform2uiv");
    4418             :   }
    4419             :   mozilla::WebGLUniformLocation* arg0;
    4420           0 :   if (args[0].isObject()) {
    4421             :     {
    4422           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4423           0 :       if (NS_FAILED(rv)) {
    4424           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform2uiv", "WebGLUniformLocation");
    4425           0 :         return false;
    4426             :       }
    4427             :     }
    4428           0 :   } else if (args[0].isNullOrUndefined()) {
    4429           0 :     arg0 = nullptr;
    4430             :   } else {
    4431           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform2uiv");
    4432           0 :     return false;
    4433             :   }
    4434           0 :   Uint32ArrayOrUnsignedLongSequence arg1;
    4435           0 :   Uint32ArrayOrUnsignedLongSequenceArgument arg1_holder(arg1);
    4436             :   {
    4437           0 :     bool done = false, failed = false, tryNext;
    4438           0 :     if (args[1].isObject()) {
    4439           0 :       done = (failed = !arg1_holder.TrySetToUint32Array(cx, args[1], tryNext, false)) || !tryNext;
    4440             : 
    4441           0 :       if (!done) {
    4442           0 :         done = (failed = !arg1_holder.TrySetToUnsignedLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    4443             :       }
    4444             :     }
    4445           0 :     if (failed) {
    4446           0 :       return false;
    4447             :     }
    4448           0 :     if (!done) {
    4449           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform2uiv", "Uint32Array, UnsignedLongSequence");
    4450           0 :       return false;
    4451             :     }
    4452             :   }
    4453             :   uint32_t arg2;
    4454           0 :   if (args.hasDefined(2)) {
    4455           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    4456           0 :       return false;
    4457             :     }
    4458             :   } else {
    4459           0 :     arg2 = 0U;
    4460             :   }
    4461             :   uint32_t arg3;
    4462           0 :   if (args.hasDefined(3)) {
    4463           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4464           0 :       return false;
    4465             :     }
    4466             :   } else {
    4467           0 :     arg3 = 0U;
    4468             :   }
    4469           0 :   self->Uniform2uiv(Constify(arg0), Constify(arg1), arg2, arg3);
    4470           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4471           0 :   args.rval().setUndefined();
    4472           0 :   return true;
    4473             : }
    4474             : 
    4475             : static const JSJitInfo uniform2uiv_methodinfo = {
    4476             :   { (JSJitGetterOp)uniform2uiv },
    4477             :   { prototypes::id::WebGL2RenderingContext },
    4478             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4479             :   JSJitInfo::Method,
    4480             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4481             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4482             :   false,  /* isInfallible. False in setters. */
    4483             :   false,  /* isMovable.  Not relevant for setters. */
    4484             :   false, /* isEliminatable.  Not relevant for setters. */
    4485             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4486             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4487             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4488             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4489             : };
    4490             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4491             : static_assert(0 < 1, "There is no slot for us");
    4492             : 
    4493             : static bool
    4494           0 : uniform3uiv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4495             : {
    4496           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    4497           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform3uiv");
    4498             :   }
    4499             :   mozilla::WebGLUniformLocation* arg0;
    4500           0 :   if (args[0].isObject()) {
    4501             :     {
    4502           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4503           0 :       if (NS_FAILED(rv)) {
    4504           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform3uiv", "WebGLUniformLocation");
    4505           0 :         return false;
    4506             :       }
    4507             :     }
    4508           0 :   } else if (args[0].isNullOrUndefined()) {
    4509           0 :     arg0 = nullptr;
    4510             :   } else {
    4511           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform3uiv");
    4512           0 :     return false;
    4513             :   }
    4514           0 :   Uint32ArrayOrUnsignedLongSequence arg1;
    4515           0 :   Uint32ArrayOrUnsignedLongSequenceArgument arg1_holder(arg1);
    4516             :   {
    4517           0 :     bool done = false, failed = false, tryNext;
    4518           0 :     if (args[1].isObject()) {
    4519           0 :       done = (failed = !arg1_holder.TrySetToUint32Array(cx, args[1], tryNext, false)) || !tryNext;
    4520             : 
    4521           0 :       if (!done) {
    4522           0 :         done = (failed = !arg1_holder.TrySetToUnsignedLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    4523             :       }
    4524             :     }
    4525           0 :     if (failed) {
    4526           0 :       return false;
    4527             :     }
    4528           0 :     if (!done) {
    4529           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform3uiv", "Uint32Array, UnsignedLongSequence");
    4530           0 :       return false;
    4531             :     }
    4532             :   }
    4533             :   uint32_t arg2;
    4534           0 :   if (args.hasDefined(2)) {
    4535           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    4536           0 :       return false;
    4537             :     }
    4538             :   } else {
    4539           0 :     arg2 = 0U;
    4540             :   }
    4541             :   uint32_t arg3;
    4542           0 :   if (args.hasDefined(3)) {
    4543           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4544           0 :       return false;
    4545             :     }
    4546             :   } else {
    4547           0 :     arg3 = 0U;
    4548             :   }
    4549           0 :   self->Uniform3uiv(Constify(arg0), Constify(arg1), arg2, arg3);
    4550           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4551           0 :   args.rval().setUndefined();
    4552           0 :   return true;
    4553             : }
    4554             : 
    4555             : static const JSJitInfo uniform3uiv_methodinfo = {
    4556             :   { (JSJitGetterOp)uniform3uiv },
    4557             :   { prototypes::id::WebGL2RenderingContext },
    4558             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4559             :   JSJitInfo::Method,
    4560             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4561             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4562             :   false,  /* isInfallible. False in setters. */
    4563             :   false,  /* isMovable.  Not relevant for setters. */
    4564             :   false, /* isEliminatable.  Not relevant for setters. */
    4565             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4566             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4567             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4568             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4569             : };
    4570             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4571             : static_assert(0 < 1, "There is no slot for us");
    4572             : 
    4573             : static bool
    4574           0 : uniform4uiv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4575             : {
    4576           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    4577           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform4uiv");
    4578             :   }
    4579             :   mozilla::WebGLUniformLocation* arg0;
    4580           0 :   if (args[0].isObject()) {
    4581             :     {
    4582           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4583           0 :       if (NS_FAILED(rv)) {
    4584           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform4uiv", "WebGLUniformLocation");
    4585           0 :         return false;
    4586             :       }
    4587             :     }
    4588           0 :   } else if (args[0].isNullOrUndefined()) {
    4589           0 :     arg0 = nullptr;
    4590             :   } else {
    4591           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform4uiv");
    4592           0 :     return false;
    4593             :   }
    4594           0 :   Uint32ArrayOrUnsignedLongSequence arg1;
    4595           0 :   Uint32ArrayOrUnsignedLongSequenceArgument arg1_holder(arg1);
    4596             :   {
    4597           0 :     bool done = false, failed = false, tryNext;
    4598           0 :     if (args[1].isObject()) {
    4599           0 :       done = (failed = !arg1_holder.TrySetToUint32Array(cx, args[1], tryNext, false)) || !tryNext;
    4600             : 
    4601           0 :       if (!done) {
    4602           0 :         done = (failed = !arg1_holder.TrySetToUnsignedLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    4603             :       }
    4604             :     }
    4605           0 :     if (failed) {
    4606           0 :       return false;
    4607             :     }
    4608           0 :     if (!done) {
    4609           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.uniform4uiv", "Uint32Array, UnsignedLongSequence");
    4610           0 :       return false;
    4611             :     }
    4612             :   }
    4613             :   uint32_t arg2;
    4614           0 :   if (args.hasDefined(2)) {
    4615           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    4616           0 :       return false;
    4617             :     }
    4618             :   } else {
    4619           0 :     arg2 = 0U;
    4620             :   }
    4621             :   uint32_t arg3;
    4622           0 :   if (args.hasDefined(3)) {
    4623           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4624           0 :       return false;
    4625             :     }
    4626             :   } else {
    4627           0 :     arg3 = 0U;
    4628             :   }
    4629           0 :   self->Uniform4uiv(Constify(arg0), Constify(arg1), arg2, arg3);
    4630           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4631           0 :   args.rval().setUndefined();
    4632           0 :   return true;
    4633             : }
    4634             : 
    4635             : static const JSJitInfo uniform4uiv_methodinfo = {
    4636             :   { (JSJitGetterOp)uniform4uiv },
    4637             :   { prototypes::id::WebGL2RenderingContext },
    4638             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4639             :   JSJitInfo::Method,
    4640             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4641             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4642             :   false,  /* isInfallible. False in setters. */
    4643             :   false,  /* isMovable.  Not relevant for setters. */
    4644             :   false, /* isEliminatable.  Not relevant for setters. */
    4645             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4646             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4647             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4648             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4649             : };
    4650             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4651             : static_assert(0 < 1, "There is no slot for us");
    4652             : 
    4653             : static bool
    4654           0 : uniformMatrix2fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4655             : {
    4656           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    4657           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix2fv");
    4658             :   }
    4659             :   mozilla::WebGLUniformLocation* arg0;
    4660           0 :   if (args[0].isObject()) {
    4661             :     {
    4662           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4663           0 :       if (NS_FAILED(rv)) {
    4664           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix2fv", "WebGLUniformLocation");
    4665           0 :         return false;
    4666             :       }
    4667             :     }
    4668           0 :   } else if (args[0].isNullOrUndefined()) {
    4669           0 :     arg0 = nullptr;
    4670             :   } else {
    4671           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix2fv");
    4672           0 :     return false;
    4673             :   }
    4674             :   bool arg1;
    4675           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    4676           0 :     return false;
    4677             :   }
    4678           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    4679           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    4680             :   {
    4681           0 :     bool done = false, failed = false, tryNext;
    4682           0 :     if (args[2].isObject()) {
    4683           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    4684             : 
    4685           0 :       if (!done) {
    4686           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    4687             :       }
    4688             :     }
    4689           0 :     if (failed) {
    4690           0 :       return false;
    4691             :     }
    4692           0 :     if (!done) {
    4693           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix2fv", "Float32Array, UnrestrictedFloatSequence");
    4694           0 :       return false;
    4695             :     }
    4696             :   }
    4697             :   uint32_t arg3;
    4698           0 :   if (args.hasDefined(3)) {
    4699           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4700           0 :       return false;
    4701             :     }
    4702             :   } else {
    4703           0 :     arg3 = 0U;
    4704             :   }
    4705             :   uint32_t arg4;
    4706           0 :   if (args.hasDefined(4)) {
    4707           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    4708           0 :       return false;
    4709             :     }
    4710             :   } else {
    4711           0 :     arg4 = 0U;
    4712             :   }
    4713           0 :   self->UniformMatrix2fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    4714           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4715           0 :   args.rval().setUndefined();
    4716           0 :   return true;
    4717             : }
    4718             : 
    4719             : static const JSJitInfo uniformMatrix2fv_methodinfo = {
    4720             :   { (JSJitGetterOp)uniformMatrix2fv },
    4721             :   { prototypes::id::WebGL2RenderingContext },
    4722             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4723             :   JSJitInfo::Method,
    4724             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4725             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4726             :   false,  /* isInfallible. False in setters. */
    4727             :   false,  /* isMovable.  Not relevant for setters. */
    4728             :   false, /* isEliminatable.  Not relevant for setters. */
    4729             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4730             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4731             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4732             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4733             : };
    4734             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4735             : static_assert(0 < 1, "There is no slot for us");
    4736             : 
    4737             : static bool
    4738           0 : uniformMatrix3x2fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4739             : {
    4740           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    4741           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix3x2fv");
    4742             :   }
    4743             :   mozilla::WebGLUniformLocation* arg0;
    4744           0 :   if (args[0].isObject()) {
    4745             :     {
    4746           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4747           0 :       if (NS_FAILED(rv)) {
    4748           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix3x2fv", "WebGLUniformLocation");
    4749           0 :         return false;
    4750             :       }
    4751             :     }
    4752           0 :   } else if (args[0].isNullOrUndefined()) {
    4753           0 :     arg0 = nullptr;
    4754             :   } else {
    4755           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix3x2fv");
    4756           0 :     return false;
    4757             :   }
    4758             :   bool arg1;
    4759           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    4760           0 :     return false;
    4761             :   }
    4762           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    4763           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    4764             :   {
    4765           0 :     bool done = false, failed = false, tryNext;
    4766           0 :     if (args[2].isObject()) {
    4767           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    4768             : 
    4769           0 :       if (!done) {
    4770           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    4771             :       }
    4772             :     }
    4773           0 :     if (failed) {
    4774           0 :       return false;
    4775             :     }
    4776           0 :     if (!done) {
    4777           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix3x2fv", "Float32Array, UnrestrictedFloatSequence");
    4778           0 :       return false;
    4779             :     }
    4780             :   }
    4781             :   uint32_t arg3;
    4782           0 :   if (args.hasDefined(3)) {
    4783           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4784           0 :       return false;
    4785             :     }
    4786             :   } else {
    4787           0 :     arg3 = 0U;
    4788             :   }
    4789             :   uint32_t arg4;
    4790           0 :   if (args.hasDefined(4)) {
    4791           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    4792           0 :       return false;
    4793             :     }
    4794             :   } else {
    4795           0 :     arg4 = 0U;
    4796             :   }
    4797           0 :   self->UniformMatrix3x2fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    4798           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4799           0 :   args.rval().setUndefined();
    4800           0 :   return true;
    4801             : }
    4802             : 
    4803             : static const JSJitInfo uniformMatrix3x2fv_methodinfo = {
    4804             :   { (JSJitGetterOp)uniformMatrix3x2fv },
    4805             :   { prototypes::id::WebGL2RenderingContext },
    4806             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4807             :   JSJitInfo::Method,
    4808             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4809             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4810             :   false,  /* isInfallible. False in setters. */
    4811             :   false,  /* isMovable.  Not relevant for setters. */
    4812             :   false, /* isEliminatable.  Not relevant for setters. */
    4813             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4814             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4815             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4816             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4817             : };
    4818             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4819             : static_assert(0 < 1, "There is no slot for us");
    4820             : 
    4821             : static bool
    4822           0 : uniformMatrix4x2fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4823             : {
    4824           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    4825           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix4x2fv");
    4826             :   }
    4827             :   mozilla::WebGLUniformLocation* arg0;
    4828           0 :   if (args[0].isObject()) {
    4829             :     {
    4830           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4831           0 :       if (NS_FAILED(rv)) {
    4832           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix4x2fv", "WebGLUniformLocation");
    4833           0 :         return false;
    4834             :       }
    4835             :     }
    4836           0 :   } else if (args[0].isNullOrUndefined()) {
    4837           0 :     arg0 = nullptr;
    4838             :   } else {
    4839           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix4x2fv");
    4840           0 :     return false;
    4841             :   }
    4842             :   bool arg1;
    4843           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    4844           0 :     return false;
    4845             :   }
    4846           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    4847           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    4848             :   {
    4849           0 :     bool done = false, failed = false, tryNext;
    4850           0 :     if (args[2].isObject()) {
    4851           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    4852             : 
    4853           0 :       if (!done) {
    4854           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    4855             :       }
    4856             :     }
    4857           0 :     if (failed) {
    4858           0 :       return false;
    4859             :     }
    4860           0 :     if (!done) {
    4861           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix4x2fv", "Float32Array, UnrestrictedFloatSequence");
    4862           0 :       return false;
    4863             :     }
    4864             :   }
    4865             :   uint32_t arg3;
    4866           0 :   if (args.hasDefined(3)) {
    4867           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4868           0 :       return false;
    4869             :     }
    4870             :   } else {
    4871           0 :     arg3 = 0U;
    4872             :   }
    4873             :   uint32_t arg4;
    4874           0 :   if (args.hasDefined(4)) {
    4875           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    4876           0 :       return false;
    4877             :     }
    4878             :   } else {
    4879           0 :     arg4 = 0U;
    4880             :   }
    4881           0 :   self->UniformMatrix4x2fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    4882           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4883           0 :   args.rval().setUndefined();
    4884           0 :   return true;
    4885             : }
    4886             : 
    4887             : static const JSJitInfo uniformMatrix4x2fv_methodinfo = {
    4888             :   { (JSJitGetterOp)uniformMatrix4x2fv },
    4889             :   { prototypes::id::WebGL2RenderingContext },
    4890             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4891             :   JSJitInfo::Method,
    4892             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4893             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4894             :   false,  /* isInfallible. False in setters. */
    4895             :   false,  /* isMovable.  Not relevant for setters. */
    4896             :   false, /* isEliminatable.  Not relevant for setters. */
    4897             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4898             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4899             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4900             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4901             : };
    4902             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4903             : static_assert(0 < 1, "There is no slot for us");
    4904             : 
    4905             : static bool
    4906           0 : uniformMatrix2x3fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4907             : {
    4908           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    4909           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix2x3fv");
    4910             :   }
    4911             :   mozilla::WebGLUniformLocation* arg0;
    4912           0 :   if (args[0].isObject()) {
    4913             :     {
    4914           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4915           0 :       if (NS_FAILED(rv)) {
    4916           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix2x3fv", "WebGLUniformLocation");
    4917           0 :         return false;
    4918             :       }
    4919             :     }
    4920           0 :   } else if (args[0].isNullOrUndefined()) {
    4921           0 :     arg0 = nullptr;
    4922             :   } else {
    4923           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix2x3fv");
    4924           0 :     return false;
    4925             :   }
    4926             :   bool arg1;
    4927           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    4928           0 :     return false;
    4929             :   }
    4930           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    4931           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    4932             :   {
    4933           0 :     bool done = false, failed = false, tryNext;
    4934           0 :     if (args[2].isObject()) {
    4935           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    4936             : 
    4937           0 :       if (!done) {
    4938           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    4939             :       }
    4940             :     }
    4941           0 :     if (failed) {
    4942           0 :       return false;
    4943             :     }
    4944           0 :     if (!done) {
    4945           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix2x3fv", "Float32Array, UnrestrictedFloatSequence");
    4946           0 :       return false;
    4947             :     }
    4948             :   }
    4949             :   uint32_t arg3;
    4950           0 :   if (args.hasDefined(3)) {
    4951           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    4952           0 :       return false;
    4953             :     }
    4954             :   } else {
    4955           0 :     arg3 = 0U;
    4956             :   }
    4957             :   uint32_t arg4;
    4958           0 :   if (args.hasDefined(4)) {
    4959           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    4960           0 :       return false;
    4961             :     }
    4962             :   } else {
    4963           0 :     arg4 = 0U;
    4964             :   }
    4965           0 :   self->UniformMatrix2x3fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    4966           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4967           0 :   args.rval().setUndefined();
    4968           0 :   return true;
    4969             : }
    4970             : 
    4971             : static const JSJitInfo uniformMatrix2x3fv_methodinfo = {
    4972             :   { (JSJitGetterOp)uniformMatrix2x3fv },
    4973             :   { prototypes::id::WebGL2RenderingContext },
    4974             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    4975             :   JSJitInfo::Method,
    4976             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4977             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4978             :   false,  /* isInfallible. False in setters. */
    4979             :   false,  /* isMovable.  Not relevant for setters. */
    4980             :   false, /* isEliminatable.  Not relevant for setters. */
    4981             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4982             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4983             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4984             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4985             : };
    4986             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4987             : static_assert(0 < 1, "There is no slot for us");
    4988             : 
    4989             : static bool
    4990           0 : uniformMatrix3fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    4991             : {
    4992           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    4993           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix3fv");
    4994             :   }
    4995             :   mozilla::WebGLUniformLocation* arg0;
    4996           0 :   if (args[0].isObject()) {
    4997             :     {
    4998           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    4999           0 :       if (NS_FAILED(rv)) {
    5000           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix3fv", "WebGLUniformLocation");
    5001           0 :         return false;
    5002             :       }
    5003             :     }
    5004           0 :   } else if (args[0].isNullOrUndefined()) {
    5005           0 :     arg0 = nullptr;
    5006             :   } else {
    5007           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix3fv");
    5008           0 :     return false;
    5009             :   }
    5010             :   bool arg1;
    5011           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    5012           0 :     return false;
    5013             :   }
    5014           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    5015           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    5016             :   {
    5017           0 :     bool done = false, failed = false, tryNext;
    5018           0 :     if (args[2].isObject()) {
    5019           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    5020             : 
    5021           0 :       if (!done) {
    5022           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    5023             :       }
    5024             :     }
    5025           0 :     if (failed) {
    5026           0 :       return false;
    5027             :     }
    5028           0 :     if (!done) {
    5029           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix3fv", "Float32Array, UnrestrictedFloatSequence");
    5030           0 :       return false;
    5031             :     }
    5032             :   }
    5033             :   uint32_t arg3;
    5034           0 :   if (args.hasDefined(3)) {
    5035           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    5036           0 :       return false;
    5037             :     }
    5038             :   } else {
    5039           0 :     arg3 = 0U;
    5040             :   }
    5041             :   uint32_t arg4;
    5042           0 :   if (args.hasDefined(4)) {
    5043           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5044           0 :       return false;
    5045             :     }
    5046             :   } else {
    5047           0 :     arg4 = 0U;
    5048             :   }
    5049           0 :   self->UniformMatrix3fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    5050           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5051           0 :   args.rval().setUndefined();
    5052           0 :   return true;
    5053             : }
    5054             : 
    5055             : static const JSJitInfo uniformMatrix3fv_methodinfo = {
    5056             :   { (JSJitGetterOp)uniformMatrix3fv },
    5057             :   { prototypes::id::WebGL2RenderingContext },
    5058             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5059             :   JSJitInfo::Method,
    5060             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5061             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5062             :   false,  /* isInfallible. False in setters. */
    5063             :   false,  /* isMovable.  Not relevant for setters. */
    5064             :   false, /* isEliminatable.  Not relevant for setters. */
    5065             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5066             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5067             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5068             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5069             : };
    5070             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5071             : static_assert(0 < 1, "There is no slot for us");
    5072             : 
    5073             : static bool
    5074           0 : uniformMatrix4x3fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5075             : {
    5076           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    5077           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix4x3fv");
    5078             :   }
    5079             :   mozilla::WebGLUniformLocation* arg0;
    5080           0 :   if (args[0].isObject()) {
    5081             :     {
    5082           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    5083           0 :       if (NS_FAILED(rv)) {
    5084           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix4x3fv", "WebGLUniformLocation");
    5085           0 :         return false;
    5086             :       }
    5087             :     }
    5088           0 :   } else if (args[0].isNullOrUndefined()) {
    5089           0 :     arg0 = nullptr;
    5090             :   } else {
    5091           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix4x3fv");
    5092           0 :     return false;
    5093             :   }
    5094             :   bool arg1;
    5095           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    5096           0 :     return false;
    5097             :   }
    5098           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    5099           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    5100             :   {
    5101           0 :     bool done = false, failed = false, tryNext;
    5102           0 :     if (args[2].isObject()) {
    5103           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    5104             : 
    5105           0 :       if (!done) {
    5106           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    5107             :       }
    5108             :     }
    5109           0 :     if (failed) {
    5110           0 :       return false;
    5111             :     }
    5112           0 :     if (!done) {
    5113           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix4x3fv", "Float32Array, UnrestrictedFloatSequence");
    5114           0 :       return false;
    5115             :     }
    5116             :   }
    5117             :   uint32_t arg3;
    5118           0 :   if (args.hasDefined(3)) {
    5119           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    5120           0 :       return false;
    5121             :     }
    5122             :   } else {
    5123           0 :     arg3 = 0U;
    5124             :   }
    5125             :   uint32_t arg4;
    5126           0 :   if (args.hasDefined(4)) {
    5127           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5128           0 :       return false;
    5129             :     }
    5130             :   } else {
    5131           0 :     arg4 = 0U;
    5132             :   }
    5133           0 :   self->UniformMatrix4x3fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    5134           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5135           0 :   args.rval().setUndefined();
    5136           0 :   return true;
    5137             : }
    5138             : 
    5139             : static const JSJitInfo uniformMatrix4x3fv_methodinfo = {
    5140             :   { (JSJitGetterOp)uniformMatrix4x3fv },
    5141             :   { prototypes::id::WebGL2RenderingContext },
    5142             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5143             :   JSJitInfo::Method,
    5144             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5145             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5146             :   false,  /* isInfallible. False in setters. */
    5147             :   false,  /* isMovable.  Not relevant for setters. */
    5148             :   false, /* isEliminatable.  Not relevant for setters. */
    5149             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5150             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5151             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5152             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5153             : };
    5154             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5155             : static_assert(0 < 1, "There is no slot for us");
    5156             : 
    5157             : static bool
    5158           0 : uniformMatrix2x4fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5159             : {
    5160           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    5161           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix2x4fv");
    5162             :   }
    5163             :   mozilla::WebGLUniformLocation* arg0;
    5164           0 :   if (args[0].isObject()) {
    5165             :     {
    5166           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    5167           0 :       if (NS_FAILED(rv)) {
    5168           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix2x4fv", "WebGLUniformLocation");
    5169           0 :         return false;
    5170             :       }
    5171             :     }
    5172           0 :   } else if (args[0].isNullOrUndefined()) {
    5173           0 :     arg0 = nullptr;
    5174             :   } else {
    5175           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix2x4fv");
    5176           0 :     return false;
    5177             :   }
    5178             :   bool arg1;
    5179           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    5180           0 :     return false;
    5181             :   }
    5182           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    5183           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    5184             :   {
    5185           0 :     bool done = false, failed = false, tryNext;
    5186           0 :     if (args[2].isObject()) {
    5187           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    5188             : 
    5189           0 :       if (!done) {
    5190           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    5191             :       }
    5192             :     }
    5193           0 :     if (failed) {
    5194           0 :       return false;
    5195             :     }
    5196           0 :     if (!done) {
    5197           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix2x4fv", "Float32Array, UnrestrictedFloatSequence");
    5198           0 :       return false;
    5199             :     }
    5200             :   }
    5201             :   uint32_t arg3;
    5202           0 :   if (args.hasDefined(3)) {
    5203           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    5204           0 :       return false;
    5205             :     }
    5206             :   } else {
    5207           0 :     arg3 = 0U;
    5208             :   }
    5209             :   uint32_t arg4;
    5210           0 :   if (args.hasDefined(4)) {
    5211           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5212           0 :       return false;
    5213             :     }
    5214             :   } else {
    5215           0 :     arg4 = 0U;
    5216             :   }
    5217           0 :   self->UniformMatrix2x4fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    5218           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5219           0 :   args.rval().setUndefined();
    5220           0 :   return true;
    5221             : }
    5222             : 
    5223             : static const JSJitInfo uniformMatrix2x4fv_methodinfo = {
    5224             :   { (JSJitGetterOp)uniformMatrix2x4fv },
    5225             :   { prototypes::id::WebGL2RenderingContext },
    5226             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5227             :   JSJitInfo::Method,
    5228             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5229             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5230             :   false,  /* isInfallible. False in setters. */
    5231             :   false,  /* isMovable.  Not relevant for setters. */
    5232             :   false, /* isEliminatable.  Not relevant for setters. */
    5233             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5234             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5235             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5236             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5237             : };
    5238             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5239             : static_assert(0 < 1, "There is no slot for us");
    5240             : 
    5241             : static bool
    5242           0 : uniformMatrix3x4fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5243             : {
    5244           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    5245           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix3x4fv");
    5246             :   }
    5247             :   mozilla::WebGLUniformLocation* arg0;
    5248           0 :   if (args[0].isObject()) {
    5249             :     {
    5250           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    5251           0 :       if (NS_FAILED(rv)) {
    5252           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix3x4fv", "WebGLUniformLocation");
    5253           0 :         return false;
    5254             :       }
    5255             :     }
    5256           0 :   } else if (args[0].isNullOrUndefined()) {
    5257           0 :     arg0 = nullptr;
    5258             :   } else {
    5259           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix3x4fv");
    5260           0 :     return false;
    5261             :   }
    5262             :   bool arg1;
    5263           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    5264           0 :     return false;
    5265             :   }
    5266           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    5267           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    5268             :   {
    5269           0 :     bool done = false, failed = false, tryNext;
    5270           0 :     if (args[2].isObject()) {
    5271           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    5272             : 
    5273           0 :       if (!done) {
    5274           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    5275             :       }
    5276             :     }
    5277           0 :     if (failed) {
    5278           0 :       return false;
    5279             :     }
    5280           0 :     if (!done) {
    5281           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix3x4fv", "Float32Array, UnrestrictedFloatSequence");
    5282           0 :       return false;
    5283             :     }
    5284             :   }
    5285             :   uint32_t arg3;
    5286           0 :   if (args.hasDefined(3)) {
    5287           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    5288           0 :       return false;
    5289             :     }
    5290             :   } else {
    5291           0 :     arg3 = 0U;
    5292             :   }
    5293             :   uint32_t arg4;
    5294           0 :   if (args.hasDefined(4)) {
    5295           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5296           0 :       return false;
    5297             :     }
    5298             :   } else {
    5299           0 :     arg4 = 0U;
    5300             :   }
    5301           0 :   self->UniformMatrix3x4fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    5302           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5303           0 :   args.rval().setUndefined();
    5304           0 :   return true;
    5305             : }
    5306             : 
    5307             : static const JSJitInfo uniformMatrix3x4fv_methodinfo = {
    5308             :   { (JSJitGetterOp)uniformMatrix3x4fv },
    5309             :   { prototypes::id::WebGL2RenderingContext },
    5310             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5311             :   JSJitInfo::Method,
    5312             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5313             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5314             :   false,  /* isInfallible. False in setters. */
    5315             :   false,  /* isMovable.  Not relevant for setters. */
    5316             :   false, /* isEliminatable.  Not relevant for setters. */
    5317             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5318             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5319             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5320             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5321             : };
    5322             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5323             : static_assert(0 < 1, "There is no slot for us");
    5324             : 
    5325             : static bool
    5326           0 : uniformMatrix4fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5327             : {
    5328           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    5329           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformMatrix4fv");
    5330             :   }
    5331             :   mozilla::WebGLUniformLocation* arg0;
    5332           0 :   if (args[0].isObject()) {
    5333             :     {
    5334           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
    5335           0 :       if (NS_FAILED(rv)) {
    5336           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformMatrix4fv", "WebGLUniformLocation");
    5337           0 :         return false;
    5338             :       }
    5339             :     }
    5340           0 :   } else if (args[0].isNullOrUndefined()) {
    5341           0 :     arg0 = nullptr;
    5342             :   } else {
    5343           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformMatrix4fv");
    5344           0 :     return false;
    5345             :   }
    5346             :   bool arg1;
    5347           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    5348           0 :     return false;
    5349             :   }
    5350           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    5351           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    5352             :   {
    5353           0 :     bool done = false, failed = false, tryNext;
    5354           0 :     if (args[2].isObject()) {
    5355           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    5356             : 
    5357           0 :       if (!done) {
    5358           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    5359             :       }
    5360             :     }
    5361           0 :     if (failed) {
    5362           0 :       return false;
    5363             :     }
    5364           0 :     if (!done) {
    5365           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.uniformMatrix4fv", "Float32Array, UnrestrictedFloatSequence");
    5366           0 :       return false;
    5367             :     }
    5368             :   }
    5369             :   uint32_t arg3;
    5370           0 :   if (args.hasDefined(3)) {
    5371           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    5372           0 :       return false;
    5373             :     }
    5374             :   } else {
    5375           0 :     arg3 = 0U;
    5376             :   }
    5377             :   uint32_t arg4;
    5378           0 :   if (args.hasDefined(4)) {
    5379           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5380           0 :       return false;
    5381             :     }
    5382             :   } else {
    5383           0 :     arg4 = 0U;
    5384             :   }
    5385           0 :   self->UniformMatrix4fv(Constify(arg0), arg1, Constify(arg2), arg3, arg4);
    5386           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5387           0 :   args.rval().setUndefined();
    5388           0 :   return true;
    5389             : }
    5390             : 
    5391             : static const JSJitInfo uniformMatrix4fv_methodinfo = {
    5392             :   { (JSJitGetterOp)uniformMatrix4fv },
    5393             :   { prototypes::id::WebGL2RenderingContext },
    5394             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5395             :   JSJitInfo::Method,
    5396             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5397             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5398             :   false,  /* isInfallible. False in setters. */
    5399             :   false,  /* isMovable.  Not relevant for setters. */
    5400             :   false, /* isEliminatable.  Not relevant for setters. */
    5401             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5402             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5403             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5404             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5405             : };
    5406             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5407             : static_assert(0 < 1, "There is no slot for us");
    5408             : 
    5409             : static bool
    5410           0 : vertexAttribI4i(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5411             : {
    5412           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
    5413           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttribI4i");
    5414             :   }
    5415             :   uint32_t arg0;
    5416           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5417           0 :     return false;
    5418             :   }
    5419             :   int32_t arg1;
    5420           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    5421           0 :     return false;
    5422             :   }
    5423             :   int32_t arg2;
    5424           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    5425           0 :     return false;
    5426             :   }
    5427             :   int32_t arg3;
    5428           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    5429           0 :     return false;
    5430             :   }
    5431             :   int32_t arg4;
    5432           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    5433           0 :     return false;
    5434             :   }
    5435           0 :   self->VertexAttribI4i(arg0, arg1, arg2, arg3, arg4);
    5436           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5437           0 :   args.rval().setUndefined();
    5438           0 :   return true;
    5439             : }
    5440             : 
    5441             : static const JSJitInfo vertexAttribI4i_methodinfo = {
    5442             :   { (JSJitGetterOp)vertexAttribI4i },
    5443             :   { prototypes::id::WebGL2RenderingContext },
    5444             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5445             :   JSJitInfo::Method,
    5446             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5447             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5448             :   false,  /* isInfallible. False in setters. */
    5449             :   false,  /* isMovable.  Not relevant for setters. */
    5450             :   false, /* isEliminatable.  Not relevant for setters. */
    5451             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5452             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5453             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5454             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5455             : };
    5456             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5457             : static_assert(0 < 1, "There is no slot for us");
    5458             : 
    5459             : static bool
    5460           0 : vertexAttribI4iv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5461             : {
    5462           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    5463           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttribI4iv");
    5464             :   }
    5465             :   uint32_t arg0;
    5466           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5467           0 :     return false;
    5468             :   }
    5469           0 :   Int32ArrayOrLongSequence arg1;
    5470           0 :   Int32ArrayOrLongSequenceArgument arg1_holder(arg1);
    5471             :   {
    5472           0 :     bool done = false, failed = false, tryNext;
    5473           0 :     if (args[1].isObject()) {
    5474           0 :       done = (failed = !arg1_holder.TrySetToInt32Array(cx, args[1], tryNext, false)) || !tryNext;
    5475             : 
    5476           0 :       if (!done) {
    5477           0 :         done = (failed = !arg1_holder.TrySetToLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    5478             :       }
    5479             :     }
    5480           0 :     if (failed) {
    5481           0 :       return false;
    5482             :     }
    5483           0 :     if (!done) {
    5484           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.vertexAttribI4iv", "Int32Array, LongSequence");
    5485           0 :       return false;
    5486             :     }
    5487             :   }
    5488           0 :   self->VertexAttribI4iv(arg0, Constify(arg1));
    5489           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5490           0 :   args.rval().setUndefined();
    5491           0 :   return true;
    5492             : }
    5493             : 
    5494             : static const JSJitInfo vertexAttribI4iv_methodinfo = {
    5495             :   { (JSJitGetterOp)vertexAttribI4iv },
    5496             :   { prototypes::id::WebGL2RenderingContext },
    5497             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5498             :   JSJitInfo::Method,
    5499             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5500             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5501             :   false,  /* isInfallible. False in setters. */
    5502             :   false,  /* isMovable.  Not relevant for setters. */
    5503             :   false, /* isEliminatable.  Not relevant for setters. */
    5504             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5505             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5506             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5507             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5508             : };
    5509             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5510             : static_assert(0 < 1, "There is no slot for us");
    5511             : 
    5512             : static bool
    5513           0 : vertexAttribI4ui(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5514             : {
    5515           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
    5516           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttribI4ui");
    5517             :   }
    5518             :   uint32_t arg0;
    5519           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5520           0 :     return false;
    5521             :   }
    5522             :   uint32_t arg1;
    5523           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    5524           0 :     return false;
    5525             :   }
    5526             :   uint32_t arg2;
    5527           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    5528           0 :     return false;
    5529             :   }
    5530             :   uint32_t arg3;
    5531           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    5532           0 :     return false;
    5533             :   }
    5534             :   uint32_t arg4;
    5535           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5536           0 :     return false;
    5537             :   }
    5538           0 :   self->VertexAttribI4ui(arg0, arg1, arg2, arg3, arg4);
    5539           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5540           0 :   args.rval().setUndefined();
    5541           0 :   return true;
    5542             : }
    5543             : 
    5544             : static const JSJitInfo vertexAttribI4ui_methodinfo = {
    5545             :   { (JSJitGetterOp)vertexAttribI4ui },
    5546             :   { prototypes::id::WebGL2RenderingContext },
    5547             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5548             :   JSJitInfo::Method,
    5549             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5550             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5551             :   false,  /* isInfallible. False in setters. */
    5552             :   false,  /* isMovable.  Not relevant for setters. */
    5553             :   false, /* isEliminatable.  Not relevant for setters. */
    5554             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5555             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5556             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5557             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5558             : };
    5559             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5560             : static_assert(0 < 1, "There is no slot for us");
    5561             : 
    5562             : static bool
    5563           0 : vertexAttribI4uiv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5564             : {
    5565           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    5566           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttribI4uiv");
    5567             :   }
    5568             :   uint32_t arg0;
    5569           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5570           0 :     return false;
    5571             :   }
    5572           0 :   Uint32ArrayOrUnsignedLongSequence arg1;
    5573           0 :   Uint32ArrayOrUnsignedLongSequenceArgument arg1_holder(arg1);
    5574             :   {
    5575           0 :     bool done = false, failed = false, tryNext;
    5576           0 :     if (args[1].isObject()) {
    5577           0 :       done = (failed = !arg1_holder.TrySetToUint32Array(cx, args[1], tryNext, false)) || !tryNext;
    5578             : 
    5579           0 :       if (!done) {
    5580           0 :         done = (failed = !arg1_holder.TrySetToUnsignedLongSequence(cx, args[1], tryNext, false)) || !tryNext;
    5581             :       }
    5582             :     }
    5583           0 :     if (failed) {
    5584           0 :       return false;
    5585             :     }
    5586           0 :     if (!done) {
    5587           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.vertexAttribI4uiv", "Uint32Array, UnsignedLongSequence");
    5588           0 :       return false;
    5589             :     }
    5590             :   }
    5591           0 :   self->VertexAttribI4uiv(arg0, Constify(arg1));
    5592           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5593           0 :   args.rval().setUndefined();
    5594           0 :   return true;
    5595             : }
    5596             : 
    5597             : static const JSJitInfo vertexAttribI4uiv_methodinfo = {
    5598             :   { (JSJitGetterOp)vertexAttribI4uiv },
    5599             :   { prototypes::id::WebGL2RenderingContext },
    5600             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5601             :   JSJitInfo::Method,
    5602             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5603             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5604             :   false,  /* isInfallible. False in setters. */
    5605             :   false,  /* isMovable.  Not relevant for setters. */
    5606             :   false, /* isEliminatable.  Not relevant for setters. */
    5607             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5608             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5609             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5610             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5611             : };
    5612             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5613             : static_assert(0 < 1, "There is no slot for us");
    5614             : 
    5615             : static bool
    5616           0 : vertexAttribIPointer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5617             : {
    5618           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
    5619           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttribIPointer");
    5620             :   }
    5621             :   uint32_t arg0;
    5622           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5623           0 :     return false;
    5624             :   }
    5625             :   int32_t arg1;
    5626           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    5627           0 :     return false;
    5628             :   }
    5629             :   uint32_t arg2;
    5630           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    5631           0 :     return false;
    5632             :   }
    5633             :   int32_t arg3;
    5634           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    5635           0 :     return false;
    5636             :   }
    5637             :   int64_t arg4;
    5638           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[4], &arg4)) {
    5639           0 :     return false;
    5640             :   }
    5641           0 :   self->VertexAttribIPointer(arg0, arg1, arg2, arg3, arg4);
    5642           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5643           0 :   args.rval().setUndefined();
    5644           0 :   return true;
    5645             : }
    5646             : 
    5647             : static const JSJitInfo vertexAttribIPointer_methodinfo = {
    5648             :   { (JSJitGetterOp)vertexAttribIPointer },
    5649             :   { prototypes::id::WebGL2RenderingContext },
    5650             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5651             :   JSJitInfo::Method,
    5652             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5653             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5654             :   false,  /* isInfallible. False in setters. */
    5655             :   false,  /* isMovable.  Not relevant for setters. */
    5656             :   false, /* isEliminatable.  Not relevant for setters. */
    5657             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5658             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5659             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5660             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5661             : };
    5662             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5663             : static_assert(0 < 1, "There is no slot for us");
    5664             : 
    5665             : static bool
    5666           0 : vertexAttribDivisor(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5667             : {
    5668           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    5669           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttribDivisor");
    5670             :   }
    5671             :   uint32_t arg0;
    5672           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5673           0 :     return false;
    5674             :   }
    5675             :   uint32_t arg1;
    5676           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    5677           0 :     return false;
    5678             :   }
    5679           0 :   self->VertexAttribDivisor(arg0, arg1);
    5680           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5681           0 :   args.rval().setUndefined();
    5682           0 :   return true;
    5683             : }
    5684             : 
    5685             : static const JSJitInfo vertexAttribDivisor_methodinfo = {
    5686             :   { (JSJitGetterOp)vertexAttribDivisor },
    5687             :   { prototypes::id::WebGL2RenderingContext },
    5688             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5689             :   JSJitInfo::Method,
    5690             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5691             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5692             :   false,  /* isInfallible. False in setters. */
    5693             :   false,  /* isMovable.  Not relevant for setters. */
    5694             :   false, /* isEliminatable.  Not relevant for setters. */
    5695             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5696             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5697             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5698             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5699             : };
    5700             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5701             : static_assert(0 < 1, "There is no slot for us");
    5702             : 
    5703             : static bool
    5704           0 : drawArraysInstanced(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5705             : {
    5706           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    5707           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.drawArraysInstanced");
    5708             :   }
    5709             :   uint32_t arg0;
    5710           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5711           0 :     return false;
    5712             :   }
    5713             :   int32_t arg1;
    5714           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    5715           0 :     return false;
    5716             :   }
    5717             :   int32_t arg2;
    5718           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    5719           0 :     return false;
    5720             :   }
    5721             :   int32_t arg3;
    5722           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    5723           0 :     return false;
    5724             :   }
    5725           0 :   self->DrawArraysInstanced(arg0, arg1, arg2, arg3);
    5726           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5727           0 :   args.rval().setUndefined();
    5728           0 :   return true;
    5729             : }
    5730             : 
    5731             : static const JSJitInfo drawArraysInstanced_methodinfo = {
    5732             :   { (JSJitGetterOp)drawArraysInstanced },
    5733             :   { prototypes::id::WebGL2RenderingContext },
    5734             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5735             :   JSJitInfo::Method,
    5736             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5737             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5738             :   false,  /* isInfallible. False in setters. */
    5739             :   false,  /* isMovable.  Not relevant for setters. */
    5740             :   false, /* isEliminatable.  Not relevant for setters. */
    5741             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5742             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5743             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5744             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5745             : };
    5746             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5747             : static_assert(0 < 1, "There is no slot for us");
    5748             : 
    5749             : static bool
    5750           0 : drawElementsInstanced(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5751             : {
    5752           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
    5753           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.drawElementsInstanced");
    5754             :   }
    5755             :   uint32_t arg0;
    5756           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5757           0 :     return false;
    5758             :   }
    5759             :   int32_t arg1;
    5760           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    5761           0 :     return false;
    5762             :   }
    5763             :   uint32_t arg2;
    5764           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    5765           0 :     return false;
    5766             :   }
    5767             :   int64_t arg3;
    5768           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[3], &arg3)) {
    5769           0 :     return false;
    5770             :   }
    5771             :   int32_t arg4;
    5772           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    5773           0 :     return false;
    5774             :   }
    5775           0 :   self->DrawElementsInstanced(arg0, arg1, arg2, arg3, arg4);
    5776           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5777           0 :   args.rval().setUndefined();
    5778           0 :   return true;
    5779             : }
    5780             : 
    5781             : static const JSJitInfo drawElementsInstanced_methodinfo = {
    5782             :   { (JSJitGetterOp)drawElementsInstanced },
    5783             :   { prototypes::id::WebGL2RenderingContext },
    5784             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5785             :   JSJitInfo::Method,
    5786             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5787             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5788             :   false,  /* isInfallible. False in setters. */
    5789             :   false,  /* isMovable.  Not relevant for setters. */
    5790             :   false, /* isEliminatable.  Not relevant for setters. */
    5791             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5792             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5793             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5794             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5795             : };
    5796             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5797             : static_assert(0 < 1, "There is no slot for us");
    5798             : 
    5799             : static bool
    5800           0 : drawRangeElements(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5801             : {
    5802           0 :   if (MOZ_UNLIKELY(args.length() < 6)) {
    5803           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.drawRangeElements");
    5804             :   }
    5805             :   uint32_t arg0;
    5806           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    5807           0 :     return false;
    5808             :   }
    5809             :   uint32_t arg1;
    5810           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    5811           0 :     return false;
    5812             :   }
    5813             :   uint32_t arg2;
    5814           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    5815           0 :     return false;
    5816             :   }
    5817             :   int32_t arg3;
    5818           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    5819           0 :     return false;
    5820             :   }
    5821             :   uint32_t arg4;
    5822           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5823           0 :     return false;
    5824             :   }
    5825             :   int64_t arg5;
    5826           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[5], &arg5)) {
    5827           0 :     return false;
    5828             :   }
    5829           0 :   self->DrawRangeElements(arg0, arg1, arg2, arg3, arg4, arg5);
    5830           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5831           0 :   args.rval().setUndefined();
    5832           0 :   return true;
    5833             : }
    5834             : 
    5835             : static const JSJitInfo drawRangeElements_methodinfo = {
    5836             :   { (JSJitGetterOp)drawRangeElements },
    5837             :   { prototypes::id::WebGL2RenderingContext },
    5838             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5839             :   JSJitInfo::Method,
    5840             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5841             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5842             :   false,  /* isInfallible. False in setters. */
    5843             :   false,  /* isMovable.  Not relevant for setters. */
    5844             :   false, /* isEliminatable.  Not relevant for setters. */
    5845             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5846             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5847             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5848             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5849             : };
    5850             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5851             : static_assert(0 < 1, "There is no slot for us");
    5852             : 
    5853             : static bool
    5854           0 : readPixels(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    5855             : {
    5856           0 :   unsigned argcount = std::min(args.length(), 8u);
    5857           0 :   switch (argcount) {
    5858             :     case 7: {
    5859             :       int32_t arg0;
    5860           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    5861           0 :         return false;
    5862             :       }
    5863             :       int32_t arg1;
    5864           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    5865           0 :         return false;
    5866             :       }
    5867             :       int32_t arg2;
    5868           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    5869           0 :         return false;
    5870             :       }
    5871             :       int32_t arg3;
    5872           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    5873           0 :         return false;
    5874             :       }
    5875             :       uint32_t arg4;
    5876           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5877           0 :         return false;
    5878             :       }
    5879             :       uint32_t arg5;
    5880           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[5], &arg5)) {
    5881           0 :         return false;
    5882             :       }
    5883           0 :       if (args[6].isNullOrUndefined()) {
    5884           0 :         RootedTypedArray<Nullable<ArrayBufferView>> arg6(cx);
    5885           0 :         arg6.SetNull();
    5886           0 :         binding_detail::FastErrorResult rv;
    5887           0 :         self->ReadPixels(arg0, arg1, arg2, arg3, arg4, arg5, Constify(arg6), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    5888           0 :         if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5889           0 :           return false;
    5890             :         }
    5891           0 :         MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5892           0 :         args.rval().setUndefined();
    5893           0 :         return true;
    5894             :       }
    5895           0 :       if (args[6].isObject()) {
    5896             :         do {
    5897           0 :           RootedTypedArray<Nullable<ArrayBufferView>> arg6(cx);
    5898           0 :           if (!arg6.SetValue().Init(&args[6].toObject())) {
    5899           0 :             break;
    5900             :           }
    5901           0 :           binding_detail::FastErrorResult rv;
    5902           0 :           self->ReadPixels(arg0, arg1, arg2, arg3, arg4, arg5, Constify(arg6), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    5903           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5904           0 :             return false;
    5905             :           }
    5906           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5907           0 :           args.rval().setUndefined();
    5908           0 :           return true;
    5909             :         } while (0);
    5910             :       }
    5911             :       int64_t arg6;
    5912           0 :       if (!ValueToPrimitive<int64_t, eDefault>(cx, args[6], &arg6)) {
    5913           0 :         return false;
    5914             :       }
    5915           0 :       binding_detail::FastErrorResult rv;
    5916           0 :       self->ReadPixels(arg0, arg1, arg2, arg3, arg4, arg5, arg6, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    5917           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5918           0 :         return false;
    5919             :       }
    5920           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5921           0 :       args.rval().setUndefined();
    5922           0 :       return true;
    5923             :       break;
    5924             :     }
    5925             :     case 8: {
    5926             :       int32_t arg0;
    5927           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    5928           0 :         return false;
    5929             :       }
    5930             :       int32_t arg1;
    5931           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    5932           0 :         return false;
    5933             :       }
    5934             :       int32_t arg2;
    5935           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    5936           0 :         return false;
    5937             :       }
    5938             :       int32_t arg3;
    5939           0 :       if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    5940           0 :         return false;
    5941             :       }
    5942             :       uint32_t arg4;
    5943           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[4], &arg4)) {
    5944           0 :         return false;
    5945             :       }
    5946             :       uint32_t arg5;
    5947           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[5], &arg5)) {
    5948           0 :         return false;
    5949             :       }
    5950           0 :       RootedTypedArray<ArrayBufferView> arg6(cx);
    5951           0 :       if (args[6].isObject()) {
    5952           0 :         if (!arg6.Init(&args[6].toObject())) {
    5953           0 :           ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 7 of WebGL2RenderingContext.readPixels", "ArrayBufferView");
    5954           0 :           return false;
    5955             :         }
    5956             :       } else {
    5957           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 7 of WebGL2RenderingContext.readPixels");
    5958           0 :         return false;
    5959             :       }
    5960             :       uint32_t arg7;
    5961           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[7], &arg7)) {
    5962           0 :         return false;
    5963             :       }
    5964           0 :       binding_detail::FastErrorResult rv;
    5965           0 :       self->ReadPixels(arg0, arg1, arg2, arg3, arg4, arg5, Constify(arg6), arg7, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    5966           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5967           0 :         return false;
    5968             :       }
    5969           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5970           0 :       args.rval().setUndefined();
    5971           0 :       return true;
    5972             :       break;
    5973             :     }
    5974             :     default: {
    5975           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.readPixels");
    5976             :       break;
    5977             :     }
    5978             :   }
    5979             :   MOZ_CRASH("We have an always-returning default case");
    5980             :   return false;
    5981             : }
    5982             : 
    5983             : static const JSJitInfo readPixels_methodinfo = {
    5984             :   { (JSJitGetterOp)readPixels },
    5985             :   { prototypes::id::WebGL2RenderingContext },
    5986             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    5987             :   JSJitInfo::Method,
    5988             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5989             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5990             :   false,  /* isInfallible. False in setters. */
    5991             :   false,  /* isMovable.  Not relevant for setters. */
    5992             :   false, /* isEliminatable.  Not relevant for setters. */
    5993             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5994             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5995             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5996             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5997             : };
    5998             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5999             : static_assert(0 < 1, "There is no slot for us");
    6000             : 
    6001             : static bool
    6002           0 : drawBuffers(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6003             : {
    6004           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6005           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.drawBuffers");
    6006             :   }
    6007           0 :   binding_detail::AutoSequence<uint32_t> arg0;
    6008           0 :   if (args[0].isObject()) {
    6009           0 :     JS::ForOfIterator iter(cx);
    6010           0 :     if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
    6011           0 :       return false;
    6012             :     }
    6013           0 :     if (!iter.valueIsIterable()) {
    6014           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of WebGL2RenderingContext.drawBuffers");
    6015           0 :       return false;
    6016             :     }
    6017           0 :     binding_detail::AutoSequence<uint32_t> &arr = arg0;
    6018           0 :     JS::Rooted<JS::Value> temp(cx);
    6019             :     while (true) {
    6020             :       bool done;
    6021           0 :       if (!iter.next(&temp, &done)) {
    6022           0 :         return false;
    6023             :       }
    6024           0 :       if (done) {
    6025           0 :         break;
    6026             :       }
    6027           0 :       uint32_t* slotPtr = arr.AppendElement(mozilla::fallible);
    6028           0 :       if (!slotPtr) {
    6029           0 :         JS_ReportOutOfMemory(cx);
    6030           0 :         return false;
    6031             :       }
    6032           0 :       uint32_t& slot = *slotPtr;
    6033           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, temp, &slot)) {
    6034           0 :         return false;
    6035             :       }
    6036           0 :     }
    6037             :   } else {
    6038           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of WebGL2RenderingContext.drawBuffers");
    6039           0 :     return false;
    6040             :   }
    6041           0 :   self->DrawBuffers(Constify(arg0));
    6042           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6043           0 :   args.rval().setUndefined();
    6044           0 :   return true;
    6045             : }
    6046             : 
    6047             : static const JSJitInfo drawBuffers_methodinfo = {
    6048             :   { (JSJitGetterOp)drawBuffers },
    6049             :   { prototypes::id::WebGL2RenderingContext },
    6050             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6051             :   JSJitInfo::Method,
    6052             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6053             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6054             :   false,  /* isInfallible. False in setters. */
    6055             :   false,  /* isMovable.  Not relevant for setters. */
    6056             :   false, /* isEliminatable.  Not relevant for setters. */
    6057             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6058             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6059             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6060             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6061             : };
    6062             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6063             : static_assert(0 < 1, "There is no slot for us");
    6064             : 
    6065             : static bool
    6066           0 : clearBufferfv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6067             : {
    6068           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    6069           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clearBufferfv");
    6070             :   }
    6071             :   uint32_t arg0;
    6072           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6073           0 :     return false;
    6074             :   }
    6075             :   int32_t arg1;
    6076           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    6077           0 :     return false;
    6078             :   }
    6079           0 :   Float32ArrayOrUnrestrictedFloatSequence arg2;
    6080           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg2_holder(arg2);
    6081             :   {
    6082           0 :     bool done = false, failed = false, tryNext;
    6083           0 :     if (args[2].isObject()) {
    6084           0 :       done = (failed = !arg2_holder.TrySetToFloat32Array(cx, args[2], tryNext, false)) || !tryNext;
    6085             : 
    6086           0 :       if (!done) {
    6087           0 :         done = (failed = !arg2_holder.TrySetToUnrestrictedFloatSequence(cx, args[2], tryNext, false)) || !tryNext;
    6088             :       }
    6089             :     }
    6090           0 :     if (failed) {
    6091           0 :       return false;
    6092             :     }
    6093           0 :     if (!done) {
    6094           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.clearBufferfv", "Float32Array, UnrestrictedFloatSequence");
    6095           0 :       return false;
    6096             :     }
    6097             :   }
    6098             :   uint32_t arg3;
    6099           0 :   if (args.hasDefined(3)) {
    6100           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    6101           0 :       return false;
    6102             :     }
    6103             :   } else {
    6104           0 :     arg3 = 0U;
    6105             :   }
    6106           0 :   self->ClearBufferfv(arg0, arg1, Constify(arg2), arg3);
    6107           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6108           0 :   args.rval().setUndefined();
    6109           0 :   return true;
    6110             : }
    6111             : 
    6112             : static const JSJitInfo clearBufferfv_methodinfo = {
    6113             :   { (JSJitGetterOp)clearBufferfv },
    6114             :   { prototypes::id::WebGL2RenderingContext },
    6115             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6116             :   JSJitInfo::Method,
    6117             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6118             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6119             :   false,  /* isInfallible. False in setters. */
    6120             :   false,  /* isMovable.  Not relevant for setters. */
    6121             :   false, /* isEliminatable.  Not relevant for setters. */
    6122             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6123             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6124             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6125             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6126             : };
    6127             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6128             : static_assert(0 < 1, "There is no slot for us");
    6129             : 
    6130             : static bool
    6131           0 : clearBufferiv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6132             : {
    6133           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    6134           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clearBufferiv");
    6135             :   }
    6136             :   uint32_t arg0;
    6137           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6138           0 :     return false;
    6139             :   }
    6140             :   int32_t arg1;
    6141           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    6142           0 :     return false;
    6143             :   }
    6144           0 :   Int32ArrayOrLongSequence arg2;
    6145           0 :   Int32ArrayOrLongSequenceArgument arg2_holder(arg2);
    6146             :   {
    6147           0 :     bool done = false, failed = false, tryNext;
    6148           0 :     if (args[2].isObject()) {
    6149           0 :       done = (failed = !arg2_holder.TrySetToInt32Array(cx, args[2], tryNext, false)) || !tryNext;
    6150             : 
    6151           0 :       if (!done) {
    6152           0 :         done = (failed = !arg2_holder.TrySetToLongSequence(cx, args[2], tryNext, false)) || !tryNext;
    6153             :       }
    6154             :     }
    6155           0 :     if (failed) {
    6156           0 :       return false;
    6157             :     }
    6158           0 :     if (!done) {
    6159           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.clearBufferiv", "Int32Array, LongSequence");
    6160           0 :       return false;
    6161             :     }
    6162             :   }
    6163             :   uint32_t arg3;
    6164           0 :   if (args.hasDefined(3)) {
    6165           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    6166           0 :       return false;
    6167             :     }
    6168             :   } else {
    6169           0 :     arg3 = 0U;
    6170             :   }
    6171           0 :   self->ClearBufferiv(arg0, arg1, Constify(arg2), arg3);
    6172           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6173           0 :   args.rval().setUndefined();
    6174           0 :   return true;
    6175             : }
    6176             : 
    6177             : static const JSJitInfo clearBufferiv_methodinfo = {
    6178             :   { (JSJitGetterOp)clearBufferiv },
    6179             :   { prototypes::id::WebGL2RenderingContext },
    6180             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6181             :   JSJitInfo::Method,
    6182             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6183             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6184             :   false,  /* isInfallible. False in setters. */
    6185             :   false,  /* isMovable.  Not relevant for setters. */
    6186             :   false, /* isEliminatable.  Not relevant for setters. */
    6187             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6188             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6189             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6190             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6191             : };
    6192             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6193             : static_assert(0 < 1, "There is no slot for us");
    6194             : 
    6195             : static bool
    6196           0 : clearBufferuiv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6197             : {
    6198           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    6199           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clearBufferuiv");
    6200             :   }
    6201             :   uint32_t arg0;
    6202           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6203           0 :     return false;
    6204             :   }
    6205             :   int32_t arg1;
    6206           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    6207           0 :     return false;
    6208             :   }
    6209           0 :   Uint32ArrayOrUnsignedLongSequence arg2;
    6210           0 :   Uint32ArrayOrUnsignedLongSequenceArgument arg2_holder(arg2);
    6211             :   {
    6212           0 :     bool done = false, failed = false, tryNext;
    6213           0 :     if (args[2].isObject()) {
    6214           0 :       done = (failed = !arg2_holder.TrySetToUint32Array(cx, args[2], tryNext, false)) || !tryNext;
    6215             : 
    6216           0 :       if (!done) {
    6217           0 :         done = (failed = !arg2_holder.TrySetToUnsignedLongSequence(cx, args[2], tryNext, false)) || !tryNext;
    6218             :       }
    6219             :     }
    6220           0 :     if (failed) {
    6221           0 :       return false;
    6222             :     }
    6223           0 :     if (!done) {
    6224           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 3 of WebGL2RenderingContext.clearBufferuiv", "Uint32Array, UnsignedLongSequence");
    6225           0 :       return false;
    6226             :     }
    6227             :   }
    6228             :   uint32_t arg3;
    6229           0 :   if (args.hasDefined(3)) {
    6230           0 :     if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    6231           0 :       return false;
    6232             :     }
    6233             :   } else {
    6234           0 :     arg3 = 0U;
    6235             :   }
    6236           0 :   self->ClearBufferuiv(arg0, arg1, Constify(arg2), arg3);
    6237           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6238           0 :   args.rval().setUndefined();
    6239           0 :   return true;
    6240             : }
    6241             : 
    6242             : static const JSJitInfo clearBufferuiv_methodinfo = {
    6243             :   { (JSJitGetterOp)clearBufferuiv },
    6244             :   { prototypes::id::WebGL2RenderingContext },
    6245             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6246             :   JSJitInfo::Method,
    6247             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6248             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6249             :   false,  /* isInfallible. False in setters. */
    6250             :   false,  /* isMovable.  Not relevant for setters. */
    6251             :   false, /* isEliminatable.  Not relevant for setters. */
    6252             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6253             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6254             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6255             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6256             : };
    6257             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6258             : static_assert(0 < 1, "There is no slot for us");
    6259             : 
    6260             : static bool
    6261           0 : clearBufferfi(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6262             : {
    6263           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    6264           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clearBufferfi");
    6265             :   }
    6266             :   uint32_t arg0;
    6267           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6268           0 :     return false;
    6269             :   }
    6270             :   int32_t arg1;
    6271           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    6272           0 :     return false;
    6273             :   }
    6274             :   float arg2;
    6275           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
    6276           0 :     return false;
    6277             :   }
    6278             :   int32_t arg3;
    6279           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    6280           0 :     return false;
    6281             :   }
    6282           0 :   self->ClearBufferfi(arg0, arg1, arg2, arg3);
    6283           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6284           0 :   args.rval().setUndefined();
    6285           0 :   return true;
    6286             : }
    6287             : 
    6288             : static const JSJitInfo clearBufferfi_methodinfo = {
    6289             :   { (JSJitGetterOp)clearBufferfi },
    6290             :   { prototypes::id::WebGL2RenderingContext },
    6291             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6292             :   JSJitInfo::Method,
    6293             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6294             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6295             :   false,  /* isInfallible. False in setters. */
    6296             :   false,  /* isMovable.  Not relevant for setters. */
    6297             :   false, /* isEliminatable.  Not relevant for setters. */
    6298             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6299             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6300             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6301             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6302             : };
    6303             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6304             : static_assert(0 < 1, "There is no slot for us");
    6305             : 
    6306             : static bool
    6307           0 : createQuery(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6308             : {
    6309           0 :   auto result(StrongOrRawPtr<mozilla::WebGLQuery>(self->CreateQuery()));
    6310           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6311           0 :   if (!result) {
    6312           0 :     args.rval().setNull();
    6313           0 :     return true;
    6314             :   }
    6315           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    6316           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    6317           0 :     return false;
    6318             :   }
    6319           0 :   return true;
    6320             : }
    6321             : 
    6322             : static const JSJitInfo createQuery_methodinfo = {
    6323             :   { (JSJitGetterOp)createQuery },
    6324             :   { prototypes::id::WebGL2RenderingContext },
    6325             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6326             :   JSJitInfo::Method,
    6327             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6328             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6329             :   false,  /* isInfallible. False in setters. */
    6330             :   false,  /* isMovable.  Not relevant for setters. */
    6331             :   false, /* isEliminatable.  Not relevant for setters. */
    6332             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6333             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6334             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6335             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6336             : };
    6337             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6338             : static_assert(0 < 1, "There is no slot for us");
    6339             : 
    6340             : static bool
    6341           0 : deleteQuery(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6342             : {
    6343           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6344           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteQuery");
    6345             :   }
    6346             :   mozilla::WebGLQuery* arg0;
    6347           0 :   if (args[0].isObject()) {
    6348             :     {
    6349           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLQuery, mozilla::WebGLQuery>(args[0], arg0);
    6350           0 :       if (NS_FAILED(rv)) {
    6351           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteQuery", "WebGLQuery");
    6352           0 :         return false;
    6353             :       }
    6354             :     }
    6355           0 :   } else if (args[0].isNullOrUndefined()) {
    6356           0 :     arg0 = nullptr;
    6357             :   } else {
    6358           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteQuery");
    6359           0 :     return false;
    6360             :   }
    6361           0 :   self->DeleteQuery(Constify(arg0));
    6362           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6363           0 :   args.rval().setUndefined();
    6364           0 :   return true;
    6365             : }
    6366             : 
    6367             : static const JSJitInfo deleteQuery_methodinfo = {
    6368             :   { (JSJitGetterOp)deleteQuery },
    6369             :   { prototypes::id::WebGL2RenderingContext },
    6370             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6371             :   JSJitInfo::Method,
    6372             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6373             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6374             :   false,  /* isInfallible. False in setters. */
    6375             :   false,  /* isMovable.  Not relevant for setters. */
    6376             :   false, /* isEliminatable.  Not relevant for setters. */
    6377             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6378             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6379             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6380             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6381             : };
    6382             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6383             : static_assert(0 < 1, "There is no slot for us");
    6384             : 
    6385             : static bool
    6386           0 : isQuery(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6387             : {
    6388           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6389           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isQuery");
    6390             :   }
    6391             :   mozilla::WebGLQuery* arg0;
    6392           0 :   if (args[0].isObject()) {
    6393             :     {
    6394           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLQuery, mozilla::WebGLQuery>(args[0], arg0);
    6395           0 :       if (NS_FAILED(rv)) {
    6396           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isQuery", "WebGLQuery");
    6397           0 :         return false;
    6398             :       }
    6399             :     }
    6400           0 :   } else if (args[0].isNullOrUndefined()) {
    6401           0 :     arg0 = nullptr;
    6402             :   } else {
    6403           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isQuery");
    6404           0 :     return false;
    6405             :   }
    6406           0 :   bool result(self->IsQuery(Constify(arg0)));
    6407           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6408           0 :   args.rval().setBoolean(result);
    6409           0 :   return true;
    6410             : }
    6411             : 
    6412             : static const JSJitInfo isQuery_methodinfo = {
    6413             :   { (JSJitGetterOp)isQuery },
    6414             :   { prototypes::id::WebGL2RenderingContext },
    6415             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6416             :   JSJitInfo::Method,
    6417             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6418             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    6419             :   false,  /* isInfallible. False in setters. */
    6420             :   false,  /* isMovable.  Not relevant for setters. */
    6421             :   false, /* isEliminatable.  Not relevant for setters. */
    6422             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6423             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6424             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6425             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6426             : };
    6427             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6428             : static_assert(0 < 1, "There is no slot for us");
    6429             : 
    6430             : static bool
    6431           0 : beginQuery(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6432             : {
    6433           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    6434           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.beginQuery");
    6435             :   }
    6436             :   uint32_t arg0;
    6437           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6438           0 :     return false;
    6439             :   }
    6440           0 :   NonNull<mozilla::WebGLQuery> arg1;
    6441           0 :   if (args[1].isObject()) {
    6442             :     {
    6443           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLQuery, mozilla::WebGLQuery>(args[1], arg1);
    6444           0 :       if (NS_FAILED(rv)) {
    6445           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.beginQuery", "WebGLQuery");
    6446           0 :         return false;
    6447             :       }
    6448             :     }
    6449             :   } else {
    6450           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.beginQuery");
    6451           0 :     return false;
    6452             :   }
    6453           0 :   self->BeginQuery(arg0, NonNullHelper(arg1));
    6454           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6455           0 :   args.rval().setUndefined();
    6456           0 :   return true;
    6457             : }
    6458             : 
    6459             : static const JSJitInfo beginQuery_methodinfo = {
    6460             :   { (JSJitGetterOp)beginQuery },
    6461             :   { prototypes::id::WebGL2RenderingContext },
    6462             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6463             :   JSJitInfo::Method,
    6464             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6465             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6466             :   false,  /* isInfallible. False in setters. */
    6467             :   false,  /* isMovable.  Not relevant for setters. */
    6468             :   false, /* isEliminatable.  Not relevant for setters. */
    6469             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6470             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6471             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6472             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6473             : };
    6474             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6475             : static_assert(0 < 1, "There is no slot for us");
    6476             : 
    6477             : static bool
    6478           0 : endQuery(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6479             : {
    6480           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6481           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.endQuery");
    6482             :   }
    6483             :   uint32_t arg0;
    6484           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6485           0 :     return false;
    6486             :   }
    6487           0 :   self->EndQuery(arg0);
    6488           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6489           0 :   args.rval().setUndefined();
    6490           0 :   return true;
    6491             : }
    6492             : 
    6493             : static const JSJitInfo endQuery_methodinfo = {
    6494             :   { (JSJitGetterOp)endQuery },
    6495             :   { prototypes::id::WebGL2RenderingContext },
    6496             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6497             :   JSJitInfo::Method,
    6498             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6499             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6500             :   false,  /* isInfallible. False in setters. */
    6501             :   false,  /* isMovable.  Not relevant for setters. */
    6502             :   false, /* isEliminatable.  Not relevant for setters. */
    6503             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6504             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6505             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6506             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6507             : };
    6508             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6509             : static_assert(0 < 1, "There is no slot for us");
    6510             : 
    6511             : static bool
    6512           0 : getQuery(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6513             : {
    6514           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    6515           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getQuery");
    6516             :   }
    6517             :   uint32_t arg0;
    6518           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6519           0 :     return false;
    6520             :   }
    6521             :   uint32_t arg1;
    6522           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    6523           0 :     return false;
    6524             :   }
    6525           0 :   JS::Rooted<JS::Value> result(cx);
    6526           0 :   self->GetQuery(cx, arg0, arg1, &result);
    6527           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6528           0 :   JS::ExposeValueToActiveJS(result);
    6529           0 :   args.rval().set(result);
    6530           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    6531           0 :     return false;
    6532             :   }
    6533           0 :   return true;
    6534             : }
    6535             : 
    6536             : static const JSJitInfo getQuery_methodinfo = {
    6537             :   { (JSJitGetterOp)getQuery },
    6538             :   { prototypes::id::WebGL2RenderingContext },
    6539             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6540             :   JSJitInfo::Method,
    6541             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6542             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6543             :   false,  /* isInfallible. False in setters. */
    6544             :   false,  /* isMovable.  Not relevant for setters. */
    6545             :   false, /* isEliminatable.  Not relevant for setters. */
    6546             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6547             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6548             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6549             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6550             : };
    6551             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6552             : static_assert(0 < 1, "There is no slot for us");
    6553             : 
    6554             : static bool
    6555           0 : getQueryParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6556             : {
    6557           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    6558           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getQueryParameter");
    6559             :   }
    6560           0 :   NonNull<mozilla::WebGLQuery> arg0;
    6561           0 :   if (args[0].isObject()) {
    6562             :     {
    6563           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLQuery, mozilla::WebGLQuery>(args[0], arg0);
    6564           0 :       if (NS_FAILED(rv)) {
    6565           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getQueryParameter", "WebGLQuery");
    6566           0 :         return false;
    6567             :       }
    6568             :     }
    6569             :   } else {
    6570           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getQueryParameter");
    6571           0 :     return false;
    6572             :   }
    6573             :   uint32_t arg1;
    6574           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    6575           0 :     return false;
    6576             :   }
    6577           0 :   JS::Rooted<JS::Value> result(cx);
    6578           0 :   self->GetQueryParameter(cx, NonNullHelper(arg0), arg1, &result);
    6579           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6580           0 :   JS::ExposeValueToActiveJS(result);
    6581           0 :   args.rval().set(result);
    6582           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    6583           0 :     return false;
    6584             :   }
    6585           0 :   return true;
    6586             : }
    6587             : 
    6588             : static const JSJitInfo getQueryParameter_methodinfo = {
    6589             :   { (JSJitGetterOp)getQueryParameter },
    6590             :   { prototypes::id::WebGL2RenderingContext },
    6591             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6592             :   JSJitInfo::Method,
    6593             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6594             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6595             :   false,  /* isInfallible. False in setters. */
    6596             :   false,  /* isMovable.  Not relevant for setters. */
    6597             :   false, /* isEliminatable.  Not relevant for setters. */
    6598             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6599             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6600             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6601             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6602             : };
    6603             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6604             : static_assert(0 < 1, "There is no slot for us");
    6605             : 
    6606             : static bool
    6607           0 : createSampler(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6608             : {
    6609           0 :   auto result(StrongOrRawPtr<mozilla::WebGLSampler>(self->CreateSampler()));
    6610           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6611           0 :   if (!result) {
    6612           0 :     args.rval().setNull();
    6613           0 :     return true;
    6614             :   }
    6615           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    6616           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    6617           0 :     return false;
    6618             :   }
    6619           0 :   return true;
    6620             : }
    6621             : 
    6622             : static const JSJitInfo createSampler_methodinfo = {
    6623             :   { (JSJitGetterOp)createSampler },
    6624             :   { prototypes::id::WebGL2RenderingContext },
    6625             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6626             :   JSJitInfo::Method,
    6627             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6628             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6629             :   false,  /* isInfallible. False in setters. */
    6630             :   false,  /* isMovable.  Not relevant for setters. */
    6631             :   false, /* isEliminatable.  Not relevant for setters. */
    6632             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6633             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6634             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6635             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6636             : };
    6637             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6638             : static_assert(0 < 1, "There is no slot for us");
    6639             : 
    6640             : static bool
    6641           0 : deleteSampler(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6642             : {
    6643           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6644           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteSampler");
    6645             :   }
    6646             :   mozilla::WebGLSampler* arg0;
    6647           0 :   if (args[0].isObject()) {
    6648             :     {
    6649           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSampler, mozilla::WebGLSampler>(args[0], arg0);
    6650           0 :       if (NS_FAILED(rv)) {
    6651           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteSampler", "WebGLSampler");
    6652           0 :         return false;
    6653             :       }
    6654             :     }
    6655           0 :   } else if (args[0].isNullOrUndefined()) {
    6656           0 :     arg0 = nullptr;
    6657             :   } else {
    6658           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteSampler");
    6659           0 :     return false;
    6660             :   }
    6661           0 :   self->DeleteSampler(Constify(arg0));
    6662           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6663           0 :   args.rval().setUndefined();
    6664           0 :   return true;
    6665             : }
    6666             : 
    6667             : static const JSJitInfo deleteSampler_methodinfo = {
    6668             :   { (JSJitGetterOp)deleteSampler },
    6669             :   { prototypes::id::WebGL2RenderingContext },
    6670             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6671             :   JSJitInfo::Method,
    6672             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6673             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6674             :   false,  /* isInfallible. False in setters. */
    6675             :   false,  /* isMovable.  Not relevant for setters. */
    6676             :   false, /* isEliminatable.  Not relevant for setters. */
    6677             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6678             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6679             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6680             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6681             : };
    6682             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6683             : static_assert(0 < 1, "There is no slot for us");
    6684             : 
    6685             : static bool
    6686           0 : isSampler(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6687             : {
    6688           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6689           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isSampler");
    6690             :   }
    6691             :   mozilla::WebGLSampler* arg0;
    6692           0 :   if (args[0].isObject()) {
    6693             :     {
    6694           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSampler, mozilla::WebGLSampler>(args[0], arg0);
    6695           0 :       if (NS_FAILED(rv)) {
    6696           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isSampler", "WebGLSampler");
    6697           0 :         return false;
    6698             :       }
    6699             :     }
    6700           0 :   } else if (args[0].isNullOrUndefined()) {
    6701           0 :     arg0 = nullptr;
    6702             :   } else {
    6703           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isSampler");
    6704           0 :     return false;
    6705             :   }
    6706           0 :   bool result(self->IsSampler(Constify(arg0)));
    6707           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6708           0 :   args.rval().setBoolean(result);
    6709           0 :   return true;
    6710             : }
    6711             : 
    6712             : static const JSJitInfo isSampler_methodinfo = {
    6713             :   { (JSJitGetterOp)isSampler },
    6714             :   { prototypes::id::WebGL2RenderingContext },
    6715             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6716             :   JSJitInfo::Method,
    6717             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6718             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    6719             :   false,  /* isInfallible. False in setters. */
    6720             :   false,  /* isMovable.  Not relevant for setters. */
    6721             :   false, /* isEliminatable.  Not relevant for setters. */
    6722             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6723             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6724             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6725             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6726             : };
    6727             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6728             : static_assert(0 < 1, "There is no slot for us");
    6729             : 
    6730             : static bool
    6731           0 : bindSampler(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6732             : {
    6733           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    6734           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindSampler");
    6735             :   }
    6736             :   uint32_t arg0;
    6737           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6738           0 :     return false;
    6739             :   }
    6740             :   mozilla::WebGLSampler* arg1;
    6741           0 :   if (args[1].isObject()) {
    6742             :     {
    6743           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSampler, mozilla::WebGLSampler>(args[1], arg1);
    6744           0 :       if (NS_FAILED(rv)) {
    6745           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.bindSampler", "WebGLSampler");
    6746           0 :         return false;
    6747             :       }
    6748             :     }
    6749           0 :   } else if (args[1].isNullOrUndefined()) {
    6750           0 :     arg1 = nullptr;
    6751             :   } else {
    6752           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.bindSampler");
    6753           0 :     return false;
    6754             :   }
    6755           0 :   self->BindSampler(arg0, Constify(arg1));
    6756           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6757           0 :   args.rval().setUndefined();
    6758           0 :   return true;
    6759             : }
    6760             : 
    6761             : static const JSJitInfo bindSampler_methodinfo = {
    6762             :   { (JSJitGetterOp)bindSampler },
    6763             :   { prototypes::id::WebGL2RenderingContext },
    6764             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6765             :   JSJitInfo::Method,
    6766             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6767             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6768             :   false,  /* isInfallible. False in setters. */
    6769             :   false,  /* isMovable.  Not relevant for setters. */
    6770             :   false, /* isEliminatable.  Not relevant for setters. */
    6771             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6772             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6773             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6774             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6775             : };
    6776             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6777             : static_assert(0 < 1, "There is no slot for us");
    6778             : 
    6779             : static bool
    6780           0 : samplerParameteri(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6781             : {
    6782           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    6783           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.samplerParameteri");
    6784             :   }
    6785           0 :   NonNull<mozilla::WebGLSampler> arg0;
    6786           0 :   if (args[0].isObject()) {
    6787             :     {
    6788           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSampler, mozilla::WebGLSampler>(args[0], arg0);
    6789           0 :       if (NS_FAILED(rv)) {
    6790           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.samplerParameteri", "WebGLSampler");
    6791           0 :         return false;
    6792             :       }
    6793             :     }
    6794             :   } else {
    6795           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.samplerParameteri");
    6796           0 :     return false;
    6797             :   }
    6798             :   uint32_t arg1;
    6799           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    6800           0 :     return false;
    6801             :   }
    6802             :   int32_t arg2;
    6803           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    6804           0 :     return false;
    6805             :   }
    6806           0 :   self->SamplerParameteri(NonNullHelper(arg0), arg1, arg2);
    6807           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6808           0 :   args.rval().setUndefined();
    6809           0 :   return true;
    6810             : }
    6811             : 
    6812             : static const JSJitInfo samplerParameteri_methodinfo = {
    6813             :   { (JSJitGetterOp)samplerParameteri },
    6814             :   { prototypes::id::WebGL2RenderingContext },
    6815             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6816             :   JSJitInfo::Method,
    6817             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6818             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6819             :   false,  /* isInfallible. False in setters. */
    6820             :   false,  /* isMovable.  Not relevant for setters. */
    6821             :   false, /* isEliminatable.  Not relevant for setters. */
    6822             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6823             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6824             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6825             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6826             : };
    6827             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6828             : static_assert(0 < 1, "There is no slot for us");
    6829             : 
    6830             : static bool
    6831           0 : samplerParameterf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6832             : {
    6833           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    6834           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.samplerParameterf");
    6835             :   }
    6836           0 :   NonNull<mozilla::WebGLSampler> arg0;
    6837           0 :   if (args[0].isObject()) {
    6838             :     {
    6839           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSampler, mozilla::WebGLSampler>(args[0], arg0);
    6840           0 :       if (NS_FAILED(rv)) {
    6841           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.samplerParameterf", "WebGLSampler");
    6842           0 :         return false;
    6843             :       }
    6844             :     }
    6845             :   } else {
    6846           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.samplerParameterf");
    6847           0 :     return false;
    6848             :   }
    6849             :   uint32_t arg1;
    6850           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    6851           0 :     return false;
    6852             :   }
    6853             :   float arg2;
    6854           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
    6855           0 :     return false;
    6856             :   }
    6857           0 :   self->SamplerParameterf(NonNullHelper(arg0), arg1, arg2);
    6858           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6859           0 :   args.rval().setUndefined();
    6860           0 :   return true;
    6861             : }
    6862             : 
    6863             : static const JSJitInfo samplerParameterf_methodinfo = {
    6864             :   { (JSJitGetterOp)samplerParameterf },
    6865             :   { prototypes::id::WebGL2RenderingContext },
    6866             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6867             :   JSJitInfo::Method,
    6868             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6869             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6870             :   false,  /* isInfallible. False in setters. */
    6871             :   false,  /* isMovable.  Not relevant for setters. */
    6872             :   false, /* isEliminatable.  Not relevant for setters. */
    6873             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6874             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6875             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6876             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6877             : };
    6878             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6879             : static_assert(0 < 1, "There is no slot for us");
    6880             : 
    6881             : static bool
    6882           0 : getSamplerParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6883             : {
    6884           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    6885           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getSamplerParameter");
    6886             :   }
    6887           0 :   NonNull<mozilla::WebGLSampler> arg0;
    6888           0 :   if (args[0].isObject()) {
    6889             :     {
    6890           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSampler, mozilla::WebGLSampler>(args[0], arg0);
    6891           0 :       if (NS_FAILED(rv)) {
    6892           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getSamplerParameter", "WebGLSampler");
    6893           0 :         return false;
    6894             :       }
    6895             :     }
    6896             :   } else {
    6897           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getSamplerParameter");
    6898           0 :     return false;
    6899             :   }
    6900             :   uint32_t arg1;
    6901           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    6902           0 :     return false;
    6903             :   }
    6904           0 :   JS::Rooted<JS::Value> result(cx);
    6905           0 :   self->GetSamplerParameter(cx, NonNullHelper(arg0), arg1, &result);
    6906           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6907           0 :   JS::ExposeValueToActiveJS(result);
    6908           0 :   args.rval().set(result);
    6909           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    6910           0 :     return false;
    6911             :   }
    6912           0 :   return true;
    6913             : }
    6914             : 
    6915             : static const JSJitInfo getSamplerParameter_methodinfo = {
    6916             :   { (JSJitGetterOp)getSamplerParameter },
    6917             :   { prototypes::id::WebGL2RenderingContext },
    6918             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6919             :   JSJitInfo::Method,
    6920             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6921             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6922             :   false,  /* isInfallible. False in setters. */
    6923             :   false,  /* isMovable.  Not relevant for setters. */
    6924             :   false, /* isEliminatable.  Not relevant for setters. */
    6925             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6926             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6927             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6928             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6929             : };
    6930             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6931             : static_assert(0 < 1, "There is no slot for us");
    6932             : 
    6933             : static bool
    6934           0 : fenceSync(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6935             : {
    6936           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    6937           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.fenceSync");
    6938             :   }
    6939             :   uint32_t arg0;
    6940           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    6941           0 :     return false;
    6942             :   }
    6943             :   uint32_t arg1;
    6944           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    6945           0 :     return false;
    6946             :   }
    6947           0 :   auto result(StrongOrRawPtr<mozilla::WebGLSync>(self->FenceSync(arg0, arg1)));
    6948           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6949           0 :   if (!result) {
    6950           0 :     args.rval().setNull();
    6951           0 :     return true;
    6952             :   }
    6953           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    6954           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    6955           0 :     return false;
    6956             :   }
    6957           0 :   return true;
    6958             : }
    6959             : 
    6960             : static const JSJitInfo fenceSync_methodinfo = {
    6961             :   { (JSJitGetterOp)fenceSync },
    6962             :   { prototypes::id::WebGL2RenderingContext },
    6963             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    6964             :   JSJitInfo::Method,
    6965             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6966             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6967             :   false,  /* isInfallible. False in setters. */
    6968             :   false,  /* isMovable.  Not relevant for setters. */
    6969             :   false, /* isEliminatable.  Not relevant for setters. */
    6970             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6971             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6972             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6973             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6974             : };
    6975             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6976             : static_assert(0 < 1, "There is no slot for us");
    6977             : 
    6978             : static bool
    6979           0 : isSync(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    6980             : {
    6981           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    6982           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isSync");
    6983             :   }
    6984             :   mozilla::WebGLSync* arg0;
    6985           0 :   if (args[0].isObject()) {
    6986             :     {
    6987           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSync, mozilla::WebGLSync>(args[0], arg0);
    6988           0 :       if (NS_FAILED(rv)) {
    6989           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isSync", "WebGLSync");
    6990           0 :         return false;
    6991             :       }
    6992             :     }
    6993           0 :   } else if (args[0].isNullOrUndefined()) {
    6994           0 :     arg0 = nullptr;
    6995             :   } else {
    6996           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isSync");
    6997           0 :     return false;
    6998             :   }
    6999           0 :   bool result(self->IsSync(Constify(arg0)));
    7000           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7001           0 :   args.rval().setBoolean(result);
    7002           0 :   return true;
    7003             : }
    7004             : 
    7005             : static const JSJitInfo isSync_methodinfo = {
    7006             :   { (JSJitGetterOp)isSync },
    7007             :   { prototypes::id::WebGL2RenderingContext },
    7008             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7009             :   JSJitInfo::Method,
    7010             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7011             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    7012             :   false,  /* isInfallible. False in setters. */
    7013             :   false,  /* isMovable.  Not relevant for setters. */
    7014             :   false, /* isEliminatable.  Not relevant for setters. */
    7015             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7016             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7017             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7018             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7019             : };
    7020             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7021             : static_assert(0 < 1, "There is no slot for us");
    7022             : 
    7023             : static bool
    7024           0 : deleteSync(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7025             : {
    7026           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7027           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteSync");
    7028             :   }
    7029             :   mozilla::WebGLSync* arg0;
    7030           0 :   if (args[0].isObject()) {
    7031             :     {
    7032           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSync, mozilla::WebGLSync>(args[0], arg0);
    7033           0 :       if (NS_FAILED(rv)) {
    7034           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteSync", "WebGLSync");
    7035           0 :         return false;
    7036             :       }
    7037             :     }
    7038           0 :   } else if (args[0].isNullOrUndefined()) {
    7039           0 :     arg0 = nullptr;
    7040             :   } else {
    7041           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteSync");
    7042           0 :     return false;
    7043             :   }
    7044           0 :   self->DeleteSync(Constify(arg0));
    7045           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7046           0 :   args.rval().setUndefined();
    7047           0 :   return true;
    7048             : }
    7049             : 
    7050             : static const JSJitInfo deleteSync_methodinfo = {
    7051             :   { (JSJitGetterOp)deleteSync },
    7052             :   { prototypes::id::WebGL2RenderingContext },
    7053             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7054             :   JSJitInfo::Method,
    7055             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7056             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7057             :   false,  /* isInfallible. False in setters. */
    7058             :   false,  /* isMovable.  Not relevant for setters. */
    7059             :   false, /* isEliminatable.  Not relevant for setters. */
    7060             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7061             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7062             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7063             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7064             : };
    7065             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7066             : static_assert(0 < 1, "There is no slot for us");
    7067             : 
    7068             : static bool
    7069           0 : clientWaitSync(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7070             : {
    7071           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    7072           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clientWaitSync");
    7073             :   }
    7074           0 :   NonNull<mozilla::WebGLSync> arg0;
    7075           0 :   if (args[0].isObject()) {
    7076             :     {
    7077           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSync, mozilla::WebGLSync>(args[0], arg0);
    7078           0 :       if (NS_FAILED(rv)) {
    7079           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.clientWaitSync", "WebGLSync");
    7080           0 :         return false;
    7081             :       }
    7082             :     }
    7083             :   } else {
    7084           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.clientWaitSync");
    7085           0 :     return false;
    7086             :   }
    7087             :   uint32_t arg1;
    7088           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    7089           0 :     return false;
    7090             :   }
    7091             :   uint64_t arg2;
    7092           0 :   if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[2], &arg2)) {
    7093           0 :     return false;
    7094             :   }
    7095           0 :   uint32_t result(self->ClientWaitSync(NonNullHelper(arg0), arg1, arg2));
    7096           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7097           0 :   args.rval().setNumber(result);
    7098           0 :   return true;
    7099             : }
    7100             : 
    7101             : static const JSJitInfo clientWaitSync_methodinfo = {
    7102             :   { (JSJitGetterOp)clientWaitSync },
    7103             :   { prototypes::id::WebGL2RenderingContext },
    7104             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7105             :   JSJitInfo::Method,
    7106             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7107             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    7108             :   false,  /* isInfallible. False in setters. */
    7109             :   false,  /* isMovable.  Not relevant for setters. */
    7110             :   false, /* isEliminatable.  Not relevant for setters. */
    7111             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7112             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7113             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7114             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7115             : };
    7116             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7117             : static_assert(0 < 1, "There is no slot for us");
    7118             : 
    7119             : static bool
    7120           0 : waitSync(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7121             : {
    7122           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    7123           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.waitSync");
    7124             :   }
    7125           0 :   NonNull<mozilla::WebGLSync> arg0;
    7126           0 :   if (args[0].isObject()) {
    7127             :     {
    7128           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSync, mozilla::WebGLSync>(args[0], arg0);
    7129           0 :       if (NS_FAILED(rv)) {
    7130           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.waitSync", "WebGLSync");
    7131           0 :         return false;
    7132             :       }
    7133             :     }
    7134             :   } else {
    7135           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.waitSync");
    7136           0 :     return false;
    7137             :   }
    7138             :   uint32_t arg1;
    7139           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    7140           0 :     return false;
    7141             :   }
    7142             :   int64_t arg2;
    7143           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[2], &arg2)) {
    7144           0 :     return false;
    7145             :   }
    7146           0 :   self->WaitSync(NonNullHelper(arg0), arg1, arg2);
    7147           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7148           0 :   args.rval().setUndefined();
    7149           0 :   return true;
    7150             : }
    7151             : 
    7152             : static const JSJitInfo waitSync_methodinfo = {
    7153             :   { (JSJitGetterOp)waitSync },
    7154             :   { prototypes::id::WebGL2RenderingContext },
    7155             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7156             :   JSJitInfo::Method,
    7157             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7158             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7159             :   false,  /* isInfallible. False in setters. */
    7160             :   false,  /* isMovable.  Not relevant for setters. */
    7161             :   false, /* isEliminatable.  Not relevant for setters. */
    7162             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7163             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7164             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7165             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7166             : };
    7167             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7168             : static_assert(0 < 1, "There is no slot for us");
    7169             : 
    7170             : static bool
    7171           0 : getSyncParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7172             : {
    7173           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    7174           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getSyncParameter");
    7175             :   }
    7176           0 :   NonNull<mozilla::WebGLSync> arg0;
    7177           0 :   if (args[0].isObject()) {
    7178             :     {
    7179           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLSync, mozilla::WebGLSync>(args[0], arg0);
    7180           0 :       if (NS_FAILED(rv)) {
    7181           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getSyncParameter", "WebGLSync");
    7182           0 :         return false;
    7183             :       }
    7184             :     }
    7185             :   } else {
    7186           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getSyncParameter");
    7187           0 :     return false;
    7188             :   }
    7189             :   uint32_t arg1;
    7190           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    7191           0 :     return false;
    7192             :   }
    7193           0 :   JS::Rooted<JS::Value> result(cx);
    7194           0 :   self->GetSyncParameter(cx, NonNullHelper(arg0), arg1, &result);
    7195           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7196           0 :   JS::ExposeValueToActiveJS(result);
    7197           0 :   args.rval().set(result);
    7198           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    7199           0 :     return false;
    7200             :   }
    7201           0 :   return true;
    7202             : }
    7203             : 
    7204             : static const JSJitInfo getSyncParameter_methodinfo = {
    7205             :   { (JSJitGetterOp)getSyncParameter },
    7206             :   { prototypes::id::WebGL2RenderingContext },
    7207             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7208             :   JSJitInfo::Method,
    7209             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7210             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7211             :   false,  /* isInfallible. False in setters. */
    7212             :   false,  /* isMovable.  Not relevant for setters. */
    7213             :   false, /* isEliminatable.  Not relevant for setters. */
    7214             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7215             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7216             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7217             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7218             : };
    7219             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7220             : static_assert(0 < 1, "There is no slot for us");
    7221             : 
    7222             : static bool
    7223           0 : createTransformFeedback(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7224             : {
    7225           0 :   auto result(StrongOrRawPtr<mozilla::WebGLTransformFeedback>(self->CreateTransformFeedback()));
    7226           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7227           0 :   if (!result) {
    7228           0 :     args.rval().setNull();
    7229           0 :     return true;
    7230             :   }
    7231           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    7232           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    7233           0 :     return false;
    7234             :   }
    7235           0 :   return true;
    7236             : }
    7237             : 
    7238             : static const JSJitInfo createTransformFeedback_methodinfo = {
    7239             :   { (JSJitGetterOp)createTransformFeedback },
    7240             :   { prototypes::id::WebGL2RenderingContext },
    7241             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7242             :   JSJitInfo::Method,
    7243             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7244             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7245             :   false,  /* isInfallible. False in setters. */
    7246             :   false,  /* isMovable.  Not relevant for setters. */
    7247             :   false, /* isEliminatable.  Not relevant for setters. */
    7248             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7249             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7250             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7251             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7252             : };
    7253             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7254             : static_assert(0 < 1, "There is no slot for us");
    7255             : 
    7256             : static bool
    7257           0 : deleteTransformFeedback(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7258             : {
    7259           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7260           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteTransformFeedback");
    7261             :   }
    7262             :   mozilla::WebGLTransformFeedback* arg0;
    7263           0 :   if (args[0].isObject()) {
    7264             :     {
    7265           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLTransformFeedback, mozilla::WebGLTransformFeedback>(args[0], arg0);
    7266           0 :       if (NS_FAILED(rv)) {
    7267           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteTransformFeedback", "WebGLTransformFeedback");
    7268           0 :         return false;
    7269             :       }
    7270             :     }
    7271           0 :   } else if (args[0].isNullOrUndefined()) {
    7272           0 :     arg0 = nullptr;
    7273             :   } else {
    7274           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteTransformFeedback");
    7275           0 :     return false;
    7276             :   }
    7277           0 :   self->DeleteTransformFeedback(Constify(arg0));
    7278           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7279           0 :   args.rval().setUndefined();
    7280           0 :   return true;
    7281             : }
    7282             : 
    7283             : static const JSJitInfo deleteTransformFeedback_methodinfo = {
    7284             :   { (JSJitGetterOp)deleteTransformFeedback },
    7285             :   { prototypes::id::WebGL2RenderingContext },
    7286             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7287             :   JSJitInfo::Method,
    7288             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7289             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7290             :   false,  /* isInfallible. False in setters. */
    7291             :   false,  /* isMovable.  Not relevant for setters. */
    7292             :   false, /* isEliminatable.  Not relevant for setters. */
    7293             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7294             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7295             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7296             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7297             : };
    7298             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7299             : static_assert(0 < 1, "There is no slot for us");
    7300             : 
    7301             : static bool
    7302           0 : isTransformFeedback(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7303             : {
    7304           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7305           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isTransformFeedback");
    7306             :   }
    7307             :   mozilla::WebGLTransformFeedback* arg0;
    7308           0 :   if (args[0].isObject()) {
    7309             :     {
    7310           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLTransformFeedback, mozilla::WebGLTransformFeedback>(args[0], arg0);
    7311           0 :       if (NS_FAILED(rv)) {
    7312           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isTransformFeedback", "WebGLTransformFeedback");
    7313           0 :         return false;
    7314             :       }
    7315             :     }
    7316           0 :   } else if (args[0].isNullOrUndefined()) {
    7317           0 :     arg0 = nullptr;
    7318             :   } else {
    7319           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isTransformFeedback");
    7320           0 :     return false;
    7321             :   }
    7322           0 :   bool result(self->IsTransformFeedback(Constify(arg0)));
    7323           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7324           0 :   args.rval().setBoolean(result);
    7325           0 :   return true;
    7326             : }
    7327             : 
    7328             : static const JSJitInfo isTransformFeedback_methodinfo = {
    7329             :   { (JSJitGetterOp)isTransformFeedback },
    7330             :   { prototypes::id::WebGL2RenderingContext },
    7331             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7332             :   JSJitInfo::Method,
    7333             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7334             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    7335             :   false,  /* isInfallible. False in setters. */
    7336             :   false,  /* isMovable.  Not relevant for setters. */
    7337             :   false, /* isEliminatable.  Not relevant for setters. */
    7338             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7339             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7340             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7341             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7342             : };
    7343             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7344             : static_assert(0 < 1, "There is no slot for us");
    7345             : 
    7346             : static bool
    7347           0 : bindTransformFeedback(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7348             : {
    7349           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    7350           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindTransformFeedback");
    7351             :   }
    7352             :   uint32_t arg0;
    7353           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    7354           0 :     return false;
    7355             :   }
    7356             :   mozilla::WebGLTransformFeedback* arg1;
    7357           0 :   if (args[1].isObject()) {
    7358             :     {
    7359           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLTransformFeedback, mozilla::WebGLTransformFeedback>(args[1], arg1);
    7360           0 :       if (NS_FAILED(rv)) {
    7361           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.bindTransformFeedback", "WebGLTransformFeedback");
    7362           0 :         return false;
    7363             :       }
    7364             :     }
    7365           0 :   } else if (args[1].isNullOrUndefined()) {
    7366           0 :     arg1 = nullptr;
    7367             :   } else {
    7368           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.bindTransformFeedback");
    7369           0 :     return false;
    7370             :   }
    7371           0 :   self->BindTransformFeedback(arg0, Constify(arg1));
    7372           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7373           0 :   args.rval().setUndefined();
    7374           0 :   return true;
    7375             : }
    7376             : 
    7377             : static const JSJitInfo bindTransformFeedback_methodinfo = {
    7378             :   { (JSJitGetterOp)bindTransformFeedback },
    7379             :   { prototypes::id::WebGL2RenderingContext },
    7380             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7381             :   JSJitInfo::Method,
    7382             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7383             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7384             :   false,  /* isInfallible. False in setters. */
    7385             :   false,  /* isMovable.  Not relevant for setters. */
    7386             :   false, /* isEliminatable.  Not relevant for setters. */
    7387             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7388             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7389             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7390             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7391             : };
    7392             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7393             : static_assert(0 < 1, "There is no slot for us");
    7394             : 
    7395             : static bool
    7396           0 : beginTransformFeedback(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7397             : {
    7398           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    7399           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.beginTransformFeedback");
    7400             :   }
    7401             :   uint32_t arg0;
    7402           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    7403           0 :     return false;
    7404             :   }
    7405           0 :   self->BeginTransformFeedback(arg0);
    7406           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7407           0 :   args.rval().setUndefined();
    7408           0 :   return true;
    7409             : }
    7410             : 
    7411             : static const JSJitInfo beginTransformFeedback_methodinfo = {
    7412             :   { (JSJitGetterOp)beginTransformFeedback },
    7413             :   { prototypes::id::WebGL2RenderingContext },
    7414             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7415             :   JSJitInfo::Method,
    7416             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7417             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7418             :   false,  /* isInfallible. False in setters. */
    7419             :   false,  /* isMovable.  Not relevant for setters. */
    7420             :   false, /* isEliminatable.  Not relevant for setters. */
    7421             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7422             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7423             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7424             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7425             : };
    7426             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7427             : static_assert(0 < 1, "There is no slot for us");
    7428             : 
    7429             : static bool
    7430           0 : endTransformFeedback(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7431             : {
    7432           0 :   self->EndTransformFeedback();
    7433           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7434           0 :   args.rval().setUndefined();
    7435           0 :   return true;
    7436             : }
    7437             : 
    7438             : static const JSJitInfo endTransformFeedback_methodinfo = {
    7439             :   { (JSJitGetterOp)endTransformFeedback },
    7440             :   { prototypes::id::WebGL2RenderingContext },
    7441             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7442             :   JSJitInfo::Method,
    7443             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7444             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7445             :   true,  /* isInfallible. False in setters. */
    7446             :   false,  /* isMovable.  Not relevant for setters. */
    7447             :   false, /* isEliminatable.  Not relevant for setters. */
    7448             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7449             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7450             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7451             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7452             : };
    7453             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7454             : static_assert(0 < 1, "There is no slot for us");
    7455             : 
    7456             : static bool
    7457           0 : transformFeedbackVaryings(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7458             : {
    7459           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    7460           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.transformFeedbackVaryings");
    7461             :   }
    7462           0 :   NonNull<mozilla::WebGLProgram> arg0;
    7463           0 :   if (args[0].isObject()) {
    7464             :     {
    7465           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    7466           0 :       if (NS_FAILED(rv)) {
    7467           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.transformFeedbackVaryings", "WebGLProgram");
    7468           0 :         return false;
    7469             :       }
    7470             :     }
    7471             :   } else {
    7472           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.transformFeedbackVaryings");
    7473           0 :     return false;
    7474             :   }
    7475           0 :   binding_detail::AutoSequence<nsString> arg1;
    7476           0 :   if (args[1].isObject()) {
    7477           0 :     JS::ForOfIterator iter(cx);
    7478           0 :     if (!iter.init(args[1], JS::ForOfIterator::AllowNonIterable)) {
    7479           0 :       return false;
    7480             :     }
    7481           0 :     if (!iter.valueIsIterable()) {
    7482           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.transformFeedbackVaryings");
    7483           0 :       return false;
    7484             :     }
    7485           0 :     binding_detail::AutoSequence<nsString> &arr = arg1;
    7486           0 :     JS::Rooted<JS::Value> temp(cx);
    7487             :     while (true) {
    7488             :       bool done;
    7489           0 :       if (!iter.next(&temp, &done)) {
    7490           0 :         return false;
    7491             :       }
    7492           0 :       if (done) {
    7493           0 :         break;
    7494             :       }
    7495           0 :       nsString* slotPtr = arr.AppendElement(mozilla::fallible);
    7496           0 :       if (!slotPtr) {
    7497           0 :         JS_ReportOutOfMemory(cx);
    7498           0 :         return false;
    7499             :       }
    7500           0 :       nsString& slot = *slotPtr;
    7501           0 :       if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) {
    7502           0 :         return false;
    7503             :       }
    7504           0 :     }
    7505             :   } else {
    7506           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.transformFeedbackVaryings");
    7507           0 :     return false;
    7508             :   }
    7509             :   uint32_t arg2;
    7510           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    7511           0 :     return false;
    7512             :   }
    7513           0 :   self->TransformFeedbackVaryings(NonNullHelper(arg0), Constify(arg1), arg2);
    7514           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7515           0 :   args.rval().setUndefined();
    7516           0 :   return true;
    7517             : }
    7518             : 
    7519             : static const JSJitInfo transformFeedbackVaryings_methodinfo = {
    7520             :   { (JSJitGetterOp)transformFeedbackVaryings },
    7521             :   { prototypes::id::WebGL2RenderingContext },
    7522             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7523             :   JSJitInfo::Method,
    7524             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7525             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7526             :   false,  /* isInfallible. False in setters. */
    7527             :   false,  /* isMovable.  Not relevant for setters. */
    7528             :   false, /* isEliminatable.  Not relevant for setters. */
    7529             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7530             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7531             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7532             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7533             : };
    7534             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7535             : static_assert(0 < 1, "There is no slot for us");
    7536             : 
    7537             : static bool
    7538           0 : getTransformFeedbackVarying(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7539             : {
    7540           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    7541           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getTransformFeedbackVarying");
    7542             :   }
    7543           0 :   NonNull<mozilla::WebGLProgram> arg0;
    7544           0 :   if (args[0].isObject()) {
    7545             :     {
    7546           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    7547           0 :       if (NS_FAILED(rv)) {
    7548           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getTransformFeedbackVarying", "WebGLProgram");
    7549           0 :         return false;
    7550             :       }
    7551             :     }
    7552             :   } else {
    7553           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getTransformFeedbackVarying");
    7554           0 :     return false;
    7555             :   }
    7556             :   uint32_t arg1;
    7557           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    7558           0 :     return false;
    7559             :   }
    7560           0 :   auto result(StrongOrRawPtr<mozilla::WebGLActiveInfo>(self->GetTransformFeedbackVarying(NonNullHelper(arg0), arg1)));
    7561           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7562             :   static_assert(!IsPointer<decltype(result)>::value,
    7563             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    7564           0 :   if (!result) {
    7565           0 :     args.rval().setNull();
    7566           0 :     return true;
    7567             :   }
    7568           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    7569           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    7570           0 :     return false;
    7571             :   }
    7572           0 :   return true;
    7573             : }
    7574             : 
    7575             : static const JSJitInfo getTransformFeedbackVarying_methodinfo = {
    7576             :   { (JSJitGetterOp)getTransformFeedbackVarying },
    7577             :   { prototypes::id::WebGL2RenderingContext },
    7578             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7579             :   JSJitInfo::Method,
    7580             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7581             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7582             :   false,  /* isInfallible. False in setters. */
    7583             :   false,  /* isMovable.  Not relevant for setters. */
    7584             :   false, /* isEliminatable.  Not relevant for setters. */
    7585             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7586             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7587             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7588             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7589             : };
    7590             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7591             : static_assert(0 < 1, "There is no slot for us");
    7592             : 
    7593             : static bool
    7594           0 : pauseTransformFeedback(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7595             : {
    7596           0 :   self->PauseTransformFeedback();
    7597           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7598           0 :   args.rval().setUndefined();
    7599           0 :   return true;
    7600             : }
    7601             : 
    7602             : static const JSJitInfo pauseTransformFeedback_methodinfo = {
    7603             :   { (JSJitGetterOp)pauseTransformFeedback },
    7604             :   { prototypes::id::WebGL2RenderingContext },
    7605             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7606             :   JSJitInfo::Method,
    7607             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7608             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7609             :   true,  /* isInfallible. False in setters. */
    7610             :   false,  /* isMovable.  Not relevant for setters. */
    7611             :   false, /* isEliminatable.  Not relevant for setters. */
    7612             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7613             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7614             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7615             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7616             : };
    7617             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7618             : static_assert(0 < 1, "There is no slot for us");
    7619             : 
    7620             : static bool
    7621           0 : resumeTransformFeedback(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7622             : {
    7623           0 :   self->ResumeTransformFeedback();
    7624           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7625           0 :   args.rval().setUndefined();
    7626           0 :   return true;
    7627             : }
    7628             : 
    7629             : static const JSJitInfo resumeTransformFeedback_methodinfo = {
    7630             :   { (JSJitGetterOp)resumeTransformFeedback },
    7631             :   { prototypes::id::WebGL2RenderingContext },
    7632             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7633             :   JSJitInfo::Method,
    7634             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7635             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7636             :   true,  /* isInfallible. False in setters. */
    7637             :   false,  /* isMovable.  Not relevant for setters. */
    7638             :   false, /* isEliminatable.  Not relevant for setters. */
    7639             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7640             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7641             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7642             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7643             : };
    7644             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7645             : static_assert(0 < 1, "There is no slot for us");
    7646             : 
    7647             : static bool
    7648           0 : bindBufferBase(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7649             : {
    7650           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    7651           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindBufferBase");
    7652             :   }
    7653             :   uint32_t arg0;
    7654           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    7655           0 :     return false;
    7656             :   }
    7657             :   uint32_t arg1;
    7658           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    7659           0 :     return false;
    7660             :   }
    7661             :   mozilla::WebGLBuffer* arg2;
    7662           0 :   if (args[2].isObject()) {
    7663             :     {
    7664           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLBuffer, mozilla::WebGLBuffer>(args[2], arg2);
    7665           0 :       if (NS_FAILED(rv)) {
    7666           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of WebGL2RenderingContext.bindBufferBase", "WebGLBuffer");
    7667           0 :         return false;
    7668             :       }
    7669             :     }
    7670           0 :   } else if (args[2].isNullOrUndefined()) {
    7671           0 :     arg2 = nullptr;
    7672             :   } else {
    7673           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of WebGL2RenderingContext.bindBufferBase");
    7674           0 :     return false;
    7675             :   }
    7676           0 :   self->BindBufferBase(arg0, arg1, Constify(arg2));
    7677           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7678           0 :   args.rval().setUndefined();
    7679           0 :   return true;
    7680             : }
    7681             : 
    7682             : static const JSJitInfo bindBufferBase_methodinfo = {
    7683             :   { (JSJitGetterOp)bindBufferBase },
    7684             :   { prototypes::id::WebGL2RenderingContext },
    7685             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7686             :   JSJitInfo::Method,
    7687             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7688             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7689             :   false,  /* isInfallible. False in setters. */
    7690             :   false,  /* isMovable.  Not relevant for setters. */
    7691             :   false, /* isEliminatable.  Not relevant for setters. */
    7692             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7693             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7694             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7695             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7696             : };
    7697             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7698             : static_assert(0 < 1, "There is no slot for us");
    7699             : 
    7700             : static bool
    7701           0 : bindBufferRange(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7702             : {
    7703           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
    7704           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindBufferRange");
    7705             :   }
    7706             :   uint32_t arg0;
    7707           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    7708           0 :     return false;
    7709             :   }
    7710             :   uint32_t arg1;
    7711           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    7712           0 :     return false;
    7713             :   }
    7714             :   mozilla::WebGLBuffer* arg2;
    7715           0 :   if (args[2].isObject()) {
    7716             :     {
    7717           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLBuffer, mozilla::WebGLBuffer>(args[2], arg2);
    7718           0 :       if (NS_FAILED(rv)) {
    7719           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 3 of WebGL2RenderingContext.bindBufferRange", "WebGLBuffer");
    7720           0 :         return false;
    7721             :       }
    7722             :     }
    7723           0 :   } else if (args[2].isNullOrUndefined()) {
    7724           0 :     arg2 = nullptr;
    7725             :   } else {
    7726           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 3 of WebGL2RenderingContext.bindBufferRange");
    7727           0 :     return false;
    7728             :   }
    7729             :   int64_t arg3;
    7730           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[3], &arg3)) {
    7731           0 :     return false;
    7732             :   }
    7733             :   int64_t arg4;
    7734           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[4], &arg4)) {
    7735           0 :     return false;
    7736             :   }
    7737           0 :   self->BindBufferRange(arg0, arg1, Constify(arg2), arg3, arg4);
    7738           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7739           0 :   args.rval().setUndefined();
    7740           0 :   return true;
    7741             : }
    7742             : 
    7743             : static const JSJitInfo bindBufferRange_methodinfo = {
    7744             :   { (JSJitGetterOp)bindBufferRange },
    7745             :   { prototypes::id::WebGL2RenderingContext },
    7746             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7747             :   JSJitInfo::Method,
    7748             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7749             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7750             :   false,  /* isInfallible. False in setters. */
    7751             :   false,  /* isMovable.  Not relevant for setters. */
    7752             :   false, /* isEliminatable.  Not relevant for setters. */
    7753             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7754             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7755             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7756             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7757             : };
    7758             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7759             : static_assert(0 < 1, "There is no slot for us");
    7760             : 
    7761             : static bool
    7762           0 : getIndexedParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7763             : {
    7764           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    7765           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getIndexedParameter");
    7766             :   }
    7767             :   uint32_t arg0;
    7768           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    7769           0 :     return false;
    7770             :   }
    7771             :   uint32_t arg1;
    7772           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    7773           0 :     return false;
    7774             :   }
    7775           0 :   binding_detail::FastErrorResult rv;
    7776           0 :   JS::Rooted<JS::Value> result(cx);
    7777           0 :   self->GetIndexedParameter(cx, arg0, arg1, &result, rv);
    7778           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    7779           0 :     return false;
    7780             :   }
    7781           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7782           0 :   JS::ExposeValueToActiveJS(result);
    7783           0 :   args.rval().set(result);
    7784           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    7785           0 :     return false;
    7786             :   }
    7787           0 :   return true;
    7788             : }
    7789             : 
    7790             : static const JSJitInfo getIndexedParameter_methodinfo = {
    7791             :   { (JSJitGetterOp)getIndexedParameter },
    7792             :   { prototypes::id::WebGL2RenderingContext },
    7793             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7794             :   JSJitInfo::Method,
    7795             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7796             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7797             :   false,  /* isInfallible. False in setters. */
    7798             :   false,  /* isMovable.  Not relevant for setters. */
    7799             :   false, /* isEliminatable.  Not relevant for setters. */
    7800             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7801             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7802             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7803             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7804             : };
    7805             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7806             : static_assert(0 < 1, "There is no slot for us");
    7807             : 
    7808             : static bool
    7809           0 : getUniformIndices(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7810             : {
    7811           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    7812           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getUniformIndices");
    7813             :   }
    7814           0 :   NonNull<mozilla::WebGLProgram> arg0;
    7815           0 :   if (args[0].isObject()) {
    7816             :     {
    7817           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    7818           0 :       if (NS_FAILED(rv)) {
    7819           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getUniformIndices", "WebGLProgram");
    7820           0 :         return false;
    7821             :       }
    7822             :     }
    7823             :   } else {
    7824           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getUniformIndices");
    7825           0 :     return false;
    7826             :   }
    7827           0 :   binding_detail::AutoSequence<nsString> arg1;
    7828           0 :   if (args[1].isObject()) {
    7829           0 :     JS::ForOfIterator iter(cx);
    7830           0 :     if (!iter.init(args[1], JS::ForOfIterator::AllowNonIterable)) {
    7831           0 :       return false;
    7832             :     }
    7833           0 :     if (!iter.valueIsIterable()) {
    7834           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.getUniformIndices");
    7835           0 :       return false;
    7836             :     }
    7837           0 :     binding_detail::AutoSequence<nsString> &arr = arg1;
    7838           0 :     JS::Rooted<JS::Value> temp(cx);
    7839             :     while (true) {
    7840             :       bool done;
    7841           0 :       if (!iter.next(&temp, &done)) {
    7842           0 :         return false;
    7843             :       }
    7844           0 :       if (done) {
    7845           0 :         break;
    7846             :       }
    7847           0 :       nsString* slotPtr = arr.AppendElement(mozilla::fallible);
    7848           0 :       if (!slotPtr) {
    7849           0 :         JS_ReportOutOfMemory(cx);
    7850           0 :         return false;
    7851             :       }
    7852           0 :       nsString& slot = *slotPtr;
    7853           0 :       if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) {
    7854           0 :         return false;
    7855             :       }
    7856           0 :     }
    7857             :   } else {
    7858           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.getUniformIndices");
    7859           0 :     return false;
    7860             :   }
    7861           0 :   Nullable<nsTArray<uint32_t>> result;
    7862           0 :   self->GetUniformIndices(NonNullHelper(arg0), Constify(arg1), result);
    7863           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7864             : 
    7865           0 :   if (result.IsNull()) {
    7866           0 :     args.rval().setNull();
    7867           0 :     return true;
    7868             :   }
    7869             : 
    7870           0 :   uint32_t length = result.Value().Length();
    7871           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    7872           0 :   if (!returnArray) {
    7873           0 :     return false;
    7874             :   }
    7875             :   // Scope for 'tmp'
    7876             :   {
    7877           0 :     JS::Rooted<JS::Value> tmp(cx);
    7878           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    7879             :       // Control block to let us common up the JS_DefineElement calls when there
    7880             :       // are different ways to succeed at wrapping the object.
    7881             :       do {
    7882           0 :         tmp.setNumber(result.Value()[sequenceIdx0]);
    7883           0 :         break;
    7884             :       } while (0);
    7885           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    7886             :                             JSPROP_ENUMERATE)) {
    7887           0 :         return false;
    7888             :       }
    7889             :     }
    7890             :   }
    7891           0 :   args.rval().setObject(*returnArray);
    7892           0 :   return true;
    7893             : }
    7894             : 
    7895             : static const JSJitInfo getUniformIndices_methodinfo = {
    7896             :   { (JSJitGetterOp)getUniformIndices },
    7897             :   { prototypes::id::WebGL2RenderingContext },
    7898             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7899             :   JSJitInfo::Method,
    7900             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7901             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7902             :   false,  /* isInfallible. False in setters. */
    7903             :   false,  /* isMovable.  Not relevant for setters. */
    7904             :   false, /* isEliminatable.  Not relevant for setters. */
    7905             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7906             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7907             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7908             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7909             : };
    7910             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7911             : static_assert(0 < 1, "There is no slot for us");
    7912             : 
    7913             : static bool
    7914           0 : getActiveUniforms(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    7915             : {
    7916           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    7917           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getActiveUniforms");
    7918             :   }
    7919           0 :   NonNull<mozilla::WebGLProgram> arg0;
    7920           0 :   if (args[0].isObject()) {
    7921             :     {
    7922           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    7923           0 :       if (NS_FAILED(rv)) {
    7924           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getActiveUniforms", "WebGLProgram");
    7925           0 :         return false;
    7926             :       }
    7927             :     }
    7928             :   } else {
    7929           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getActiveUniforms");
    7930           0 :     return false;
    7931             :   }
    7932           0 :   binding_detail::AutoSequence<uint32_t> arg1;
    7933           0 :   if (args[1].isObject()) {
    7934           0 :     JS::ForOfIterator iter(cx);
    7935           0 :     if (!iter.init(args[1], JS::ForOfIterator::AllowNonIterable)) {
    7936           0 :       return false;
    7937             :     }
    7938           0 :     if (!iter.valueIsIterable()) {
    7939           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.getActiveUniforms");
    7940           0 :       return false;
    7941             :     }
    7942           0 :     binding_detail::AutoSequence<uint32_t> &arr = arg1;
    7943           0 :     JS::Rooted<JS::Value> temp(cx);
    7944             :     while (true) {
    7945             :       bool done;
    7946           0 :       if (!iter.next(&temp, &done)) {
    7947           0 :         return false;
    7948             :       }
    7949           0 :       if (done) {
    7950           0 :         break;
    7951             :       }
    7952           0 :       uint32_t* slotPtr = arr.AppendElement(mozilla::fallible);
    7953           0 :       if (!slotPtr) {
    7954           0 :         JS_ReportOutOfMemory(cx);
    7955           0 :         return false;
    7956             :       }
    7957           0 :       uint32_t& slot = *slotPtr;
    7958           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, temp, &slot)) {
    7959           0 :         return false;
    7960             :       }
    7961           0 :     }
    7962             :   } else {
    7963           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 2 of WebGL2RenderingContext.getActiveUniforms");
    7964           0 :     return false;
    7965             :   }
    7966             :   uint32_t arg2;
    7967           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    7968           0 :     return false;
    7969             :   }
    7970           0 :   JS::Rooted<JS::Value> result(cx);
    7971           0 :   self->GetActiveUniforms(cx, NonNullHelper(arg0), Constify(arg1), arg2, &result);
    7972           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7973           0 :   JS::ExposeValueToActiveJS(result);
    7974           0 :   args.rval().set(result);
    7975           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    7976           0 :     return false;
    7977             :   }
    7978           0 :   return true;
    7979             : }
    7980             : 
    7981             : static const JSJitInfo getActiveUniforms_methodinfo = {
    7982             :   { (JSJitGetterOp)getActiveUniforms },
    7983             :   { prototypes::id::WebGL2RenderingContext },
    7984             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    7985             :   JSJitInfo::Method,
    7986             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7987             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7988             :   false,  /* isInfallible. False in setters. */
    7989             :   false,  /* isMovable.  Not relevant for setters. */
    7990             :   false, /* isEliminatable.  Not relevant for setters. */
    7991             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7992             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7993             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7994             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7995             : };
    7996             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7997             : static_assert(0 < 1, "There is no slot for us");
    7998             : 
    7999             : static bool
    8000           0 : getUniformBlockIndex(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8001             : {
    8002           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    8003           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getUniformBlockIndex");
    8004             :   }
    8005           0 :   NonNull<mozilla::WebGLProgram> arg0;
    8006           0 :   if (args[0].isObject()) {
    8007             :     {
    8008           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    8009           0 :       if (NS_FAILED(rv)) {
    8010           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getUniformBlockIndex", "WebGLProgram");
    8011           0 :         return false;
    8012             :       }
    8013             :     }
    8014             :   } else {
    8015           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getUniformBlockIndex");
    8016           0 :     return false;
    8017             :   }
    8018           0 :   binding_detail::FakeString arg1;
    8019           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    8020           0 :     return false;
    8021             :   }
    8022           0 :   uint32_t result(self->GetUniformBlockIndex(NonNullHelper(arg0), NonNullHelper(Constify(arg1))));
    8023           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8024           0 :   args.rval().setNumber(result);
    8025           0 :   return true;
    8026             : }
    8027             : 
    8028             : static const JSJitInfo getUniformBlockIndex_methodinfo = {
    8029             :   { (JSJitGetterOp)getUniformBlockIndex },
    8030             :   { prototypes::id::WebGL2RenderingContext },
    8031             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8032             :   JSJitInfo::Method,
    8033             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8034             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    8035             :   false,  /* isInfallible. False in setters. */
    8036             :   false,  /* isMovable.  Not relevant for setters. */
    8037             :   false, /* isEliminatable.  Not relevant for setters. */
    8038             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8039             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8040             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8041             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8042             : };
    8043             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8044             : static_assert(0 < 1, "There is no slot for us");
    8045             : 
    8046             : static bool
    8047           0 : getActiveUniformBlockParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8048             : {
    8049           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    8050           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getActiveUniformBlockParameter");
    8051             :   }
    8052           0 :   NonNull<mozilla::WebGLProgram> arg0;
    8053           0 :   if (args[0].isObject()) {
    8054             :     {
    8055           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    8056           0 :       if (NS_FAILED(rv)) {
    8057           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getActiveUniformBlockParameter", "WebGLProgram");
    8058           0 :         return false;
    8059             :       }
    8060             :     }
    8061             :   } else {
    8062           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getActiveUniformBlockParameter");
    8063           0 :     return false;
    8064             :   }
    8065             :   uint32_t arg1;
    8066           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    8067           0 :     return false;
    8068             :   }
    8069             :   uint32_t arg2;
    8070           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    8071           0 :     return false;
    8072             :   }
    8073           0 :   binding_detail::FastErrorResult rv;
    8074           0 :   JS::Rooted<JS::Value> result(cx);
    8075           0 :   self->GetActiveUniformBlockParameter(cx, NonNullHelper(arg0), arg1, arg2, &result, rv);
    8076           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    8077           0 :     return false;
    8078             :   }
    8079           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8080           0 :   JS::ExposeValueToActiveJS(result);
    8081           0 :   args.rval().set(result);
    8082           0 :   if (!MaybeWrapValue(cx, args.rval())) {
    8083           0 :     return false;
    8084             :   }
    8085           0 :   return true;
    8086             : }
    8087             : 
    8088             : static const JSJitInfo getActiveUniformBlockParameter_methodinfo = {
    8089             :   { (JSJitGetterOp)getActiveUniformBlockParameter },
    8090             :   { prototypes::id::WebGL2RenderingContext },
    8091             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8092             :   JSJitInfo::Method,
    8093             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8094             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8095             :   false,  /* isInfallible. False in setters. */
    8096             :   false,  /* isMovable.  Not relevant for setters. */
    8097             :   false, /* isEliminatable.  Not relevant for setters. */
    8098             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8099             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8100             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8101             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8102             : };
    8103             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8104             : static_assert(0 < 1, "There is no slot for us");
    8105             : 
    8106             : static bool
    8107           0 : getActiveUniformBlockName(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8108             : {
    8109           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    8110           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getActiveUniformBlockName");
    8111             :   }
    8112           0 :   NonNull<mozilla::WebGLProgram> arg0;
    8113           0 :   if (args[0].isObject()) {
    8114             :     {
    8115           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    8116           0 :       if (NS_FAILED(rv)) {
    8117           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getActiveUniformBlockName", "WebGLProgram");
    8118           0 :         return false;
    8119             :       }
    8120             :     }
    8121             :   } else {
    8122           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getActiveUniformBlockName");
    8123           0 :     return false;
    8124             :   }
    8125             :   uint32_t arg1;
    8126           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    8127           0 :     return false;
    8128             :   }
    8129           0 :   DOMString result;
    8130           0 :   self->GetActiveUniformBlockName(NonNullHelper(arg0), arg1, result);
    8131           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8132           0 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
    8133           0 :     return false;
    8134             :   }
    8135           0 :   return true;
    8136             : }
    8137             : 
    8138             : static const JSJitInfo getActiveUniformBlockName_methodinfo = {
    8139             :   { (JSJitGetterOp)getActiveUniformBlockName },
    8140             :   { prototypes::id::WebGL2RenderingContext },
    8141             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8142             :   JSJitInfo::Method,
    8143             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8144             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8145             :   false,  /* isInfallible. False in setters. */
    8146             :   false,  /* isMovable.  Not relevant for setters. */
    8147             :   false, /* isEliminatable.  Not relevant for setters. */
    8148             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8149             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8150             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8151             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8152             : };
    8153             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8154             : static_assert(0 < 1, "There is no slot for us");
    8155             : 
    8156             : static bool
    8157           0 : uniformBlockBinding(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8158             : {
    8159           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    8160           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniformBlockBinding");
    8161             :   }
    8162           0 :   NonNull<mozilla::WebGLProgram> arg0;
    8163           0 :   if (args[0].isObject()) {
    8164             :     {
    8165           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    8166           0 :       if (NS_FAILED(rv)) {
    8167           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniformBlockBinding", "WebGLProgram");
    8168           0 :         return false;
    8169             :       }
    8170             :     }
    8171             :   } else {
    8172           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniformBlockBinding");
    8173           0 :     return false;
    8174             :   }
    8175             :   uint32_t arg1;
    8176           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    8177           0 :     return false;
    8178             :   }
    8179             :   uint32_t arg2;
    8180           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    8181           0 :     return false;
    8182             :   }
    8183           0 :   self->UniformBlockBinding(NonNullHelper(arg0), arg1, arg2);
    8184           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8185           0 :   args.rval().setUndefined();
    8186           0 :   return true;
    8187             : }
    8188             : 
    8189             : static const JSJitInfo uniformBlockBinding_methodinfo = {
    8190             :   { (JSJitGetterOp)uniformBlockBinding },
    8191             :   { prototypes::id::WebGL2RenderingContext },
    8192             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8193             :   JSJitInfo::Method,
    8194             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8195             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8196             :   false,  /* isInfallible. False in setters. */
    8197             :   false,  /* isMovable.  Not relevant for setters. */
    8198             :   false, /* isEliminatable.  Not relevant for setters. */
    8199             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8200             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8201             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8202             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8203             : };
    8204             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8205             : static_assert(0 < 1, "There is no slot for us");
    8206             : 
    8207             : static bool
    8208           0 : createVertexArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8209             : {
    8210           0 :   auto result(StrongOrRawPtr<mozilla::WebGLVertexArray>(self->CreateVertexArray()));
    8211           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8212           0 :   if (!result) {
    8213           0 :     args.rval().setNull();
    8214           0 :     return true;
    8215             :   }
    8216           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    8217           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    8218           0 :     return false;
    8219             :   }
    8220           0 :   return true;
    8221             : }
    8222             : 
    8223             : static const JSJitInfo createVertexArray_methodinfo = {
    8224             :   { (JSJitGetterOp)createVertexArray },
    8225             :   { prototypes::id::WebGL2RenderingContext },
    8226             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8227             :   JSJitInfo::Method,
    8228             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8229             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8230             :   false,  /* isInfallible. False in setters. */
    8231             :   false,  /* isMovable.  Not relevant for setters. */
    8232             :   false, /* isEliminatable.  Not relevant for setters. */
    8233             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8234             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8235             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8236             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8237             : };
    8238             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8239             : static_assert(0 < 1, "There is no slot for us");
    8240             : 
    8241             : static bool
    8242           0 : deleteVertexArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8243             : {
    8244           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    8245           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteVertexArray");
    8246             :   }
    8247             :   mozilla::WebGLVertexArray* arg0;
    8248           0 :   if (args[0].isObject()) {
    8249             :     {
    8250           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLVertexArrayObject, mozilla::WebGLVertexArray>(args[0], arg0);
    8251           0 :       if (NS_FAILED(rv)) {
    8252           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteVertexArray", "WebGLVertexArrayObject");
    8253           0 :         return false;
    8254             :       }
    8255             :     }
    8256           0 :   } else if (args[0].isNullOrUndefined()) {
    8257           0 :     arg0 = nullptr;
    8258             :   } else {
    8259           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteVertexArray");
    8260           0 :     return false;
    8261             :   }
    8262           0 :   self->DeleteVertexArray(Constify(arg0));
    8263           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8264           0 :   args.rval().setUndefined();
    8265           0 :   return true;
    8266             : }
    8267             : 
    8268             : static const JSJitInfo deleteVertexArray_methodinfo = {
    8269             :   { (JSJitGetterOp)deleteVertexArray },
    8270             :   { prototypes::id::WebGL2RenderingContext },
    8271             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8272             :   JSJitInfo::Method,
    8273             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8274             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8275             :   false,  /* isInfallible. False in setters. */
    8276             :   false,  /* isMovable.  Not relevant for setters. */
    8277             :   false, /* isEliminatable.  Not relevant for setters. */
    8278             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8279             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8280             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8281             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8282             : };
    8283             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8284             : static_assert(0 < 1, "There is no slot for us");
    8285             : 
    8286             : static bool
    8287           0 : isVertexArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8288             : {
    8289           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    8290           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isVertexArray");
    8291             :   }
    8292             :   mozilla::WebGLVertexArray* arg0;
    8293           0 :   if (args[0].isObject()) {
    8294             :     {
    8295           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLVertexArrayObject, mozilla::WebGLVertexArray>(args[0], arg0);
    8296           0 :       if (NS_FAILED(rv)) {
    8297           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isVertexArray", "WebGLVertexArrayObject");
    8298           0 :         return false;
    8299             :       }
    8300             :     }
    8301           0 :   } else if (args[0].isNullOrUndefined()) {
    8302           0 :     arg0 = nullptr;
    8303             :   } else {
    8304           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isVertexArray");
    8305           0 :     return false;
    8306             :   }
    8307           0 :   bool result(self->IsVertexArray(Constify(arg0)));
    8308           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8309           0 :   args.rval().setBoolean(result);
    8310           0 :   return true;
    8311             : }
    8312             : 
    8313             : static const JSJitInfo isVertexArray_methodinfo = {
    8314             :   { (JSJitGetterOp)isVertexArray },
    8315             :   { prototypes::id::WebGL2RenderingContext },
    8316             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8317             :   JSJitInfo::Method,
    8318             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8319             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    8320             :   false,  /* isInfallible. False in setters. */
    8321             :   false,  /* isMovable.  Not relevant for setters. */
    8322             :   false, /* isEliminatable.  Not relevant for setters. */
    8323             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8324             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8325             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8326             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8327             : };
    8328             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8329             : static_assert(0 < 1, "There is no slot for us");
    8330             : 
    8331             : static bool
    8332           0 : bindVertexArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8333             : {
    8334           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    8335           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindVertexArray");
    8336             :   }
    8337             :   mozilla::WebGLVertexArray* arg0;
    8338           0 :   if (args[0].isObject()) {
    8339             :     {
    8340           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLVertexArrayObject, mozilla::WebGLVertexArray>(args[0], arg0);
    8341           0 :       if (NS_FAILED(rv)) {
    8342           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.bindVertexArray", "WebGLVertexArrayObject");
    8343           0 :         return false;
    8344             :       }
    8345             :     }
    8346           0 :   } else if (args[0].isNullOrUndefined()) {
    8347           0 :     arg0 = nullptr;
    8348             :   } else {
    8349           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.bindVertexArray");
    8350           0 :     return false;
    8351             :   }
    8352           0 :   self->BindVertexArray(Constify(arg0));
    8353           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8354           0 :   args.rval().setUndefined();
    8355           0 :   return true;
    8356             : }
    8357             : 
    8358             : static const JSJitInfo bindVertexArray_methodinfo = {
    8359             :   { (JSJitGetterOp)bindVertexArray },
    8360             :   { prototypes::id::WebGL2RenderingContext },
    8361             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8362             :   JSJitInfo::Method,
    8363             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8364             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8365             :   false,  /* isInfallible. False in setters. */
    8366             :   false,  /* isMovable.  Not relevant for setters. */
    8367             :   false, /* isEliminatable.  Not relevant for setters. */
    8368             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8369             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8370             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8371             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8372             : };
    8373             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8374             : static_assert(0 < 1, "There is no slot for us");
    8375             : 
    8376             : static bool
    8377           0 : get_canvas(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, JSJitGetterCallArgs args)
    8378             : {
    8379           0 :   Nullable<OwningHTMLCanvasElementOrOffscreenCanvas> result;
    8380           0 :   self->GetCanvas(result);
    8381           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8382           0 :   if (result.IsNull()) {
    8383           0 :     args.rval().setNull();
    8384           0 :     return true;
    8385             :   }
    8386           0 :   if (!result.Value().ToJSVal(cx, obj, args.rval())) {
    8387           0 :     return false;
    8388             :   }
    8389           0 :   return true;
    8390             : }
    8391             : 
    8392             : static const JSJitInfo canvas_getterinfo = {
    8393             :   { (JSJitGetterOp)get_canvas },
    8394             :   { prototypes::id::WebGL2RenderingContext },
    8395             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8396             :   JSJitInfo::Getter,
    8397             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8398             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8399             :   false,  /* isInfallible. False in setters. */
    8400             :   false,  /* isMovable.  Not relevant for setters. */
    8401             :   false, /* isEliminatable.  Not relevant for setters. */
    8402             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8403             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8404             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8405             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8406             : };
    8407             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8408             : static_assert(0 < 1, "There is no slot for us");
    8409             : 
    8410             : static bool
    8411           0 : get_drawingBufferWidth(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, JSJitGetterCallArgs args)
    8412             : {
    8413           0 :   int32_t result(self->DrawingBufferWidth());
    8414           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8415           0 :   args.rval().setInt32(int32_t(result));
    8416           0 :   return true;
    8417             : }
    8418             : 
    8419             : static const JSJitInfo drawingBufferWidth_getterinfo = {
    8420             :   { (JSJitGetterOp)get_drawingBufferWidth },
    8421             :   { prototypes::id::WebGL2RenderingContext },
    8422             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8423             :   JSJitInfo::Getter,
    8424             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8425             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    8426             :   true,  /* isInfallible. False in setters. */
    8427             :   false,  /* isMovable.  Not relevant for setters. */
    8428             :   false, /* isEliminatable.  Not relevant for setters. */
    8429             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8430             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8431             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8432             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8433             : };
    8434             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8435             : static_assert(0 < 1, "There is no slot for us");
    8436             : 
    8437             : static bool
    8438           0 : get_drawingBufferHeight(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, JSJitGetterCallArgs args)
    8439             : {
    8440           0 :   int32_t result(self->DrawingBufferHeight());
    8441           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8442           0 :   args.rval().setInt32(int32_t(result));
    8443           0 :   return true;
    8444             : }
    8445             : 
    8446             : static const JSJitInfo drawingBufferHeight_getterinfo = {
    8447             :   { (JSJitGetterOp)get_drawingBufferHeight },
    8448             :   { prototypes::id::WebGL2RenderingContext },
    8449             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8450             :   JSJitInfo::Getter,
    8451             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8452             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    8453             :   true,  /* isInfallible. False in setters. */
    8454             :   false,  /* isMovable.  Not relevant for setters. */
    8455             :   false, /* isEliminatable.  Not relevant for setters. */
    8456             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8457             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8458             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8459             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8460             : };
    8461             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8462             : static_assert(0 < 1, "There is no slot for us");
    8463             : 
    8464             : static bool
    8465           0 : getContextAttributes(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8466             : {
    8467           0 :   Nullable<WebGLContextAttributes> result;
    8468           0 :   self->GetContextAttributes(result);
    8469           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8470           0 :   if (result.IsNull()) {
    8471           0 :     args.rval().setNull();
    8472           0 :     return true;
    8473             :   }
    8474           0 :   if (!result.Value().ToObjectInternal(cx, args.rval())) {
    8475           0 :     return false;
    8476             :   }
    8477           0 :   return true;
    8478             : }
    8479             : 
    8480             : static const JSJitInfo getContextAttributes_methodinfo = {
    8481             :   { (JSJitGetterOp)getContextAttributes },
    8482             :   { prototypes::id::WebGL2RenderingContext },
    8483             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8484             :   JSJitInfo::Method,
    8485             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8486             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8487             :   false,  /* isInfallible. False in setters. */
    8488             :   false,  /* isMovable.  Not relevant for setters. */
    8489             :   false, /* isEliminatable.  Not relevant for setters. */
    8490             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8491             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8492             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8493             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8494             : };
    8495             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8496             : static_assert(0 < 1, "There is no slot for us");
    8497             : 
    8498             : static bool
    8499           0 : isContextLost(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8500             : {
    8501           0 :   bool result(self->IsContextLost());
    8502           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8503           0 :   args.rval().setBoolean(result);
    8504           0 :   return true;
    8505             : }
    8506             : 
    8507             : static const JSJitInfo isContextLost_methodinfo = {
    8508             :   { (JSJitGetterOp)isContextLost },
    8509             :   { prototypes::id::WebGL2RenderingContext },
    8510             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8511             :   JSJitInfo::Method,
    8512             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8513             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    8514             :   true,  /* isInfallible. False in setters. */
    8515             :   false,  /* isMovable.  Not relevant for setters. */
    8516             :   false, /* isEliminatable.  Not relevant for setters. */
    8517             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8518             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8519             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8520             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8521             : };
    8522             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8523             : static_assert(0 < 1, "There is no slot for us");
    8524             : 
    8525             : static bool
    8526           0 : getSupportedExtensions(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8527             : {
    8528           0 :   Nullable<nsTArray<nsString>> result;
    8529           0 :   self->GetSupportedExtensions(result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem);
    8530           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8531             : 
    8532           0 :   if (result.IsNull()) {
    8533           0 :     args.rval().setNull();
    8534           0 :     return true;
    8535             :   }
    8536             : 
    8537           0 :   uint32_t length = result.Value().Length();
    8538           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    8539           0 :   if (!returnArray) {
    8540           0 :     return false;
    8541             :   }
    8542             :   // Scope for 'tmp'
    8543             :   {
    8544           0 :     JS::Rooted<JS::Value> tmp(cx);
    8545           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    8546             :       // Control block to let us common up the JS_DefineElement calls when there
    8547             :       // are different ways to succeed at wrapping the object.
    8548             :       do {
    8549           0 :         if (!xpc::NonVoidStringToJsval(cx, result.Value()[sequenceIdx0], &tmp)) {
    8550           0 :           return false;
    8551             :         }
    8552           0 :         break;
    8553             :       } while (0);
    8554           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    8555             :                             JSPROP_ENUMERATE)) {
    8556           0 :         return false;
    8557             :       }
    8558             :     }
    8559             :   }
    8560           0 :   args.rval().setObject(*returnArray);
    8561           0 :   return true;
    8562             : }
    8563             : 
    8564             : static const JSJitInfo getSupportedExtensions_methodinfo = {
    8565             :   { (JSJitGetterOp)getSupportedExtensions },
    8566             :   { prototypes::id::WebGL2RenderingContext },
    8567             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8568             :   JSJitInfo::Method,
    8569             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8570             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8571             :   false,  /* isInfallible. False in setters. */
    8572             :   false,  /* isMovable.  Not relevant for setters. */
    8573             :   false, /* isEliminatable.  Not relevant for setters. */
    8574             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8575             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8576             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8577             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8578             : };
    8579             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8580             : static_assert(0 < 1, "There is no slot for us");
    8581             : 
    8582             : static bool
    8583           0 : getExtension(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8584             : {
    8585           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    8586           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getExtension");
    8587             :   }
    8588           0 :   binding_detail::FakeString arg0;
    8589           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    8590           0 :     return false;
    8591             :   }
    8592           0 :   binding_detail::FastErrorResult rv;
    8593           0 :   JS::Rooted<JSObject*> result(cx);
    8594           0 :   self->GetExtension(cx, NonNullHelper(Constify(arg0)), &result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    8595           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    8596           0 :     return false;
    8597             :   }
    8598           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8599           0 :   if (result) {
    8600           0 :                 JS::ExposeObjectToActiveJS(result);
    8601             :               }
    8602           0 :               args.rval().setObjectOrNull(result);
    8603           0 :   if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8604           0 :     return false;
    8605             :   }
    8606           0 :   return true;
    8607             : }
    8608             : 
    8609             : static const JSJitInfo getExtension_methodinfo = {
    8610             :   { (JSJitGetterOp)getExtension },
    8611             :   { prototypes::id::WebGL2RenderingContext },
    8612             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8613             :   JSJitInfo::Method,
    8614             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8615             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8616             :   false,  /* isInfallible. False in setters. */
    8617             :   false,  /* isMovable.  Not relevant for setters. */
    8618             :   false, /* isEliminatable.  Not relevant for setters. */
    8619             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8620             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8621             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8622             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8623             : };
    8624             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8625             : static_assert(0 < 1, "There is no slot for us");
    8626             : 
    8627             : static bool
    8628           0 : activeTexture(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8629             : {
    8630           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    8631           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.activeTexture");
    8632             :   }
    8633             :   uint32_t arg0;
    8634           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    8635           0 :     return false;
    8636             :   }
    8637           0 :   self->ActiveTexture(arg0);
    8638           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8639           0 :   args.rval().setUndefined();
    8640           0 :   return true;
    8641             : }
    8642             : 
    8643             : static const JSJitInfo activeTexture_methodinfo = {
    8644             :   { (JSJitGetterOp)activeTexture },
    8645             :   { prototypes::id::WebGL2RenderingContext },
    8646             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8647             :   JSJitInfo::Method,
    8648             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8649             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8650             :   false,  /* isInfallible. False in setters. */
    8651             :   false,  /* isMovable.  Not relevant for setters. */
    8652             :   false, /* isEliminatable.  Not relevant for setters. */
    8653             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8654             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8655             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8656             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8657             : };
    8658             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8659             : static_assert(0 < 1, "There is no slot for us");
    8660             : 
    8661             : static bool
    8662           0 : attachShader(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8663             : {
    8664           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    8665           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.attachShader");
    8666             :   }
    8667           0 :   NonNull<mozilla::WebGLProgram> arg0;
    8668           0 :   if (args[0].isObject()) {
    8669             :     {
    8670           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    8671           0 :       if (NS_FAILED(rv)) {
    8672           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.attachShader", "WebGLProgram");
    8673           0 :         return false;
    8674             :       }
    8675             :     }
    8676             :   } else {
    8677           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.attachShader");
    8678           0 :     return false;
    8679             :   }
    8680           0 :   NonNull<mozilla::WebGLShader> arg1;
    8681           0 :   if (args[1].isObject()) {
    8682             :     {
    8683           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[1], arg1);
    8684           0 :       if (NS_FAILED(rv)) {
    8685           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.attachShader", "WebGLShader");
    8686           0 :         return false;
    8687             :       }
    8688             :     }
    8689             :   } else {
    8690           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.attachShader");
    8691           0 :     return false;
    8692             :   }
    8693           0 :   self->AttachShader(NonNullHelper(arg0), NonNullHelper(arg1));
    8694           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8695           0 :   args.rval().setUndefined();
    8696           0 :   return true;
    8697             : }
    8698             : 
    8699             : static const JSJitInfo attachShader_methodinfo = {
    8700             :   { (JSJitGetterOp)attachShader },
    8701             :   { prototypes::id::WebGL2RenderingContext },
    8702             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8703             :   JSJitInfo::Method,
    8704             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8705             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8706             :   false,  /* isInfallible. False in setters. */
    8707             :   false,  /* isMovable.  Not relevant for setters. */
    8708             :   false, /* isEliminatable.  Not relevant for setters. */
    8709             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8710             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8711             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8712             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8713             : };
    8714             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8715             : static_assert(0 < 1, "There is no slot for us");
    8716             : 
    8717             : static bool
    8718           0 : bindAttribLocation(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8719             : {
    8720           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    8721           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindAttribLocation");
    8722             :   }
    8723           0 :   NonNull<mozilla::WebGLProgram> arg0;
    8724           0 :   if (args[0].isObject()) {
    8725             :     {
    8726           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    8727           0 :       if (NS_FAILED(rv)) {
    8728           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.bindAttribLocation", "WebGLProgram");
    8729           0 :         return false;
    8730             :       }
    8731             :     }
    8732             :   } else {
    8733           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.bindAttribLocation");
    8734           0 :     return false;
    8735             :   }
    8736             :   uint32_t arg1;
    8737           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    8738           0 :     return false;
    8739             :   }
    8740           0 :   binding_detail::FakeString arg2;
    8741           0 :   if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
    8742           0 :     return false;
    8743             :   }
    8744           0 :   self->BindAttribLocation(NonNullHelper(arg0), arg1, NonNullHelper(Constify(arg2)));
    8745           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8746           0 :   args.rval().setUndefined();
    8747           0 :   return true;
    8748             : }
    8749             : 
    8750             : static const JSJitInfo bindAttribLocation_methodinfo = {
    8751             :   { (JSJitGetterOp)bindAttribLocation },
    8752             :   { prototypes::id::WebGL2RenderingContext },
    8753             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8754             :   JSJitInfo::Method,
    8755             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8756             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8757             :   false,  /* isInfallible. False in setters. */
    8758             :   false,  /* isMovable.  Not relevant for setters. */
    8759             :   false, /* isEliminatable.  Not relevant for setters. */
    8760             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8761             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8762             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8763             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8764             : };
    8765             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8766             : static_assert(0 < 1, "There is no slot for us");
    8767             : 
    8768             : static bool
    8769           0 : bindBuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8770             : {
    8771           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    8772           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindBuffer");
    8773             :   }
    8774             :   uint32_t arg0;
    8775           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    8776           0 :     return false;
    8777             :   }
    8778             :   mozilla::WebGLBuffer* arg1;
    8779           0 :   if (args[1].isObject()) {
    8780             :     {
    8781           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLBuffer, mozilla::WebGLBuffer>(args[1], arg1);
    8782           0 :       if (NS_FAILED(rv)) {
    8783           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.bindBuffer", "WebGLBuffer");
    8784           0 :         return false;
    8785             :       }
    8786             :     }
    8787           0 :   } else if (args[1].isNullOrUndefined()) {
    8788           0 :     arg1 = nullptr;
    8789             :   } else {
    8790           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.bindBuffer");
    8791           0 :     return false;
    8792             :   }
    8793           0 :   self->BindBuffer(arg0, Constify(arg1));
    8794           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8795           0 :   args.rval().setUndefined();
    8796           0 :   return true;
    8797             : }
    8798             : 
    8799             : static const JSJitInfo bindBuffer_methodinfo = {
    8800             :   { (JSJitGetterOp)bindBuffer },
    8801             :   { prototypes::id::WebGL2RenderingContext },
    8802             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8803             :   JSJitInfo::Method,
    8804             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8805             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8806             :   false,  /* isInfallible. False in setters. */
    8807             :   false,  /* isMovable.  Not relevant for setters. */
    8808             :   false, /* isEliminatable.  Not relevant for setters. */
    8809             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8810             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8811             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8812             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8813             : };
    8814             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8815             : static_assert(0 < 1, "There is no slot for us");
    8816             : 
    8817             : static bool
    8818           0 : bindFramebuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8819             : {
    8820           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    8821           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindFramebuffer");
    8822             :   }
    8823             :   uint32_t arg0;
    8824           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    8825           0 :     return false;
    8826             :   }
    8827             :   mozilla::WebGLFramebuffer* arg1;
    8828           0 :   if (args[1].isObject()) {
    8829             :     {
    8830           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLFramebuffer, mozilla::WebGLFramebuffer>(args[1], arg1);
    8831           0 :       if (NS_FAILED(rv)) {
    8832           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.bindFramebuffer", "WebGLFramebuffer");
    8833           0 :         return false;
    8834             :       }
    8835             :     }
    8836           0 :   } else if (args[1].isNullOrUndefined()) {
    8837           0 :     arg1 = nullptr;
    8838             :   } else {
    8839           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.bindFramebuffer");
    8840           0 :     return false;
    8841             :   }
    8842           0 :   self->BindFramebuffer(arg0, Constify(arg1));
    8843           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8844           0 :   args.rval().setUndefined();
    8845           0 :   return true;
    8846             : }
    8847             : 
    8848             : static const JSJitInfo bindFramebuffer_methodinfo = {
    8849             :   { (JSJitGetterOp)bindFramebuffer },
    8850             :   { prototypes::id::WebGL2RenderingContext },
    8851             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8852             :   JSJitInfo::Method,
    8853             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8854             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8855             :   false,  /* isInfallible. False in setters. */
    8856             :   false,  /* isMovable.  Not relevant for setters. */
    8857             :   false, /* isEliminatable.  Not relevant for setters. */
    8858             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8859             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8860             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8861             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8862             : };
    8863             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8864             : static_assert(0 < 1, "There is no slot for us");
    8865             : 
    8866             : static bool
    8867           0 : bindRenderbuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8868             : {
    8869           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    8870           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindRenderbuffer");
    8871             :   }
    8872             :   uint32_t arg0;
    8873           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    8874           0 :     return false;
    8875             :   }
    8876             :   mozilla::WebGLRenderbuffer* arg1;
    8877           0 :   if (args[1].isObject()) {
    8878             :     {
    8879           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLRenderbuffer, mozilla::WebGLRenderbuffer>(args[1], arg1);
    8880           0 :       if (NS_FAILED(rv)) {
    8881           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.bindRenderbuffer", "WebGLRenderbuffer");
    8882           0 :         return false;
    8883             :       }
    8884             :     }
    8885           0 :   } else if (args[1].isNullOrUndefined()) {
    8886           0 :     arg1 = nullptr;
    8887             :   } else {
    8888           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.bindRenderbuffer");
    8889           0 :     return false;
    8890             :   }
    8891           0 :   self->BindRenderbuffer(arg0, Constify(arg1));
    8892           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8893           0 :   args.rval().setUndefined();
    8894           0 :   return true;
    8895             : }
    8896             : 
    8897             : static const JSJitInfo bindRenderbuffer_methodinfo = {
    8898             :   { (JSJitGetterOp)bindRenderbuffer },
    8899             :   { prototypes::id::WebGL2RenderingContext },
    8900             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8901             :   JSJitInfo::Method,
    8902             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8903             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8904             :   false,  /* isInfallible. False in setters. */
    8905             :   false,  /* isMovable.  Not relevant for setters. */
    8906             :   false, /* isEliminatable.  Not relevant for setters. */
    8907             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8908             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8909             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8910             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8911             : };
    8912             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8913             : static_assert(0 < 1, "There is no slot for us");
    8914             : 
    8915             : static bool
    8916           0 : bindTexture(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8917             : {
    8918           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    8919           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.bindTexture");
    8920             :   }
    8921             :   uint32_t arg0;
    8922           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    8923           0 :     return false;
    8924             :   }
    8925             :   mozilla::WebGLTexture* arg1;
    8926           0 :   if (args[1].isObject()) {
    8927             :     {
    8928           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLTexture, mozilla::WebGLTexture>(args[1], arg1);
    8929           0 :       if (NS_FAILED(rv)) {
    8930           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.bindTexture", "WebGLTexture");
    8931           0 :         return false;
    8932             :       }
    8933             :     }
    8934           0 :   } else if (args[1].isNullOrUndefined()) {
    8935           0 :     arg1 = nullptr;
    8936             :   } else {
    8937           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.bindTexture");
    8938           0 :     return false;
    8939             :   }
    8940           0 :   self->BindTexture(arg0, Constify(arg1));
    8941           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8942           0 :   args.rval().setUndefined();
    8943           0 :   return true;
    8944             : }
    8945             : 
    8946             : static const JSJitInfo bindTexture_methodinfo = {
    8947             :   { (JSJitGetterOp)bindTexture },
    8948             :   { prototypes::id::WebGL2RenderingContext },
    8949             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8950             :   JSJitInfo::Method,
    8951             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8952             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8953             :   false,  /* isInfallible. False in setters. */
    8954             :   false,  /* isMovable.  Not relevant for setters. */
    8955             :   false, /* isEliminatable.  Not relevant for setters. */
    8956             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8957             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8958             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8959             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8960             : };
    8961             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8962             : static_assert(0 < 1, "There is no slot for us");
    8963             : 
    8964             : static bool
    8965           0 : blendColor(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    8966             : {
    8967           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    8968           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.blendColor");
    8969             :   }
    8970             :   float arg0;
    8971           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
    8972           0 :     return false;
    8973             :   }
    8974             :   float arg1;
    8975           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
    8976           0 :     return false;
    8977             :   }
    8978             :   float arg2;
    8979           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
    8980           0 :     return false;
    8981             :   }
    8982             :   float arg3;
    8983           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[3], &arg3)) {
    8984           0 :     return false;
    8985             :   }
    8986           0 :   self->BlendColor(arg0, arg1, arg2, arg3);
    8987           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8988           0 :   args.rval().setUndefined();
    8989           0 :   return true;
    8990             : }
    8991             : 
    8992             : static const JSJitInfo blendColor_methodinfo = {
    8993             :   { (JSJitGetterOp)blendColor },
    8994             :   { prototypes::id::WebGL2RenderingContext },
    8995             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    8996             :   JSJitInfo::Method,
    8997             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8998             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8999             :   false,  /* isInfallible. False in setters. */
    9000             :   false,  /* isMovable.  Not relevant for setters. */
    9001             :   false, /* isEliminatable.  Not relevant for setters. */
    9002             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9003             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9004             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9005             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9006             : };
    9007             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9008             : static_assert(0 < 1, "There is no slot for us");
    9009             : 
    9010             : static bool
    9011           0 : blendEquation(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9012             : {
    9013           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9014           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.blendEquation");
    9015             :   }
    9016             :   uint32_t arg0;
    9017           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9018           0 :     return false;
    9019             :   }
    9020           0 :   self->BlendEquation(arg0);
    9021           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9022           0 :   args.rval().setUndefined();
    9023           0 :   return true;
    9024             : }
    9025             : 
    9026             : static const JSJitInfo blendEquation_methodinfo = {
    9027             :   { (JSJitGetterOp)blendEquation },
    9028             :   { prototypes::id::WebGL2RenderingContext },
    9029             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9030             :   JSJitInfo::Method,
    9031             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9032             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9033             :   false,  /* isInfallible. False in setters. */
    9034             :   false,  /* isMovable.  Not relevant for setters. */
    9035             :   false, /* isEliminatable.  Not relevant for setters. */
    9036             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9037             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9038             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9039             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9040             : };
    9041             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9042             : static_assert(0 < 1, "There is no slot for us");
    9043             : 
    9044             : static bool
    9045           0 : blendEquationSeparate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9046             : {
    9047           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    9048           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.blendEquationSeparate");
    9049             :   }
    9050             :   uint32_t arg0;
    9051           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9052           0 :     return false;
    9053             :   }
    9054             :   uint32_t arg1;
    9055           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    9056           0 :     return false;
    9057             :   }
    9058           0 :   self->BlendEquationSeparate(arg0, arg1);
    9059           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9060           0 :   args.rval().setUndefined();
    9061           0 :   return true;
    9062             : }
    9063             : 
    9064             : static const JSJitInfo blendEquationSeparate_methodinfo = {
    9065             :   { (JSJitGetterOp)blendEquationSeparate },
    9066             :   { prototypes::id::WebGL2RenderingContext },
    9067             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9068             :   JSJitInfo::Method,
    9069             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9070             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9071             :   false,  /* isInfallible. False in setters. */
    9072             :   false,  /* isMovable.  Not relevant for setters. */
    9073             :   false, /* isEliminatable.  Not relevant for setters. */
    9074             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9075             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9076             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9077             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9078             : };
    9079             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9080             : static_assert(0 < 1, "There is no slot for us");
    9081             : 
    9082             : static bool
    9083           0 : blendFunc(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9084             : {
    9085           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    9086           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.blendFunc");
    9087             :   }
    9088             :   uint32_t arg0;
    9089           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9090           0 :     return false;
    9091             :   }
    9092             :   uint32_t arg1;
    9093           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    9094           0 :     return false;
    9095             :   }
    9096           0 :   self->BlendFunc(arg0, arg1);
    9097           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9098           0 :   args.rval().setUndefined();
    9099           0 :   return true;
    9100             : }
    9101             : 
    9102             : static const JSJitInfo blendFunc_methodinfo = {
    9103             :   { (JSJitGetterOp)blendFunc },
    9104             :   { prototypes::id::WebGL2RenderingContext },
    9105             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9106             :   JSJitInfo::Method,
    9107             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9108             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9109             :   false,  /* isInfallible. False in setters. */
    9110             :   false,  /* isMovable.  Not relevant for setters. */
    9111             :   false, /* isEliminatable.  Not relevant for setters. */
    9112             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9113             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9114             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9115             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9116             : };
    9117             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9118             : static_assert(0 < 1, "There is no slot for us");
    9119             : 
    9120             : static bool
    9121           0 : blendFuncSeparate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9122             : {
    9123           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    9124           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.blendFuncSeparate");
    9125             :   }
    9126             :   uint32_t arg0;
    9127           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9128           0 :     return false;
    9129             :   }
    9130             :   uint32_t arg1;
    9131           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    9132           0 :     return false;
    9133             :   }
    9134             :   uint32_t arg2;
    9135           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    9136           0 :     return false;
    9137             :   }
    9138             :   uint32_t arg3;
    9139           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
    9140           0 :     return false;
    9141             :   }
    9142           0 :   self->BlendFuncSeparate(arg0, arg1, arg2, arg3);
    9143           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9144           0 :   args.rval().setUndefined();
    9145           0 :   return true;
    9146             : }
    9147             : 
    9148             : static const JSJitInfo blendFuncSeparate_methodinfo = {
    9149             :   { (JSJitGetterOp)blendFuncSeparate },
    9150             :   { prototypes::id::WebGL2RenderingContext },
    9151             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9152             :   JSJitInfo::Method,
    9153             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9154             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9155             :   false,  /* isInfallible. False in setters. */
    9156             :   false,  /* isMovable.  Not relevant for setters. */
    9157             :   false, /* isEliminatable.  Not relevant for setters. */
    9158             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9159             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9160             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9161             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9162             : };
    9163             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9164             : static_assert(0 < 1, "There is no slot for us");
    9165             : 
    9166             : static bool
    9167           0 : checkFramebufferStatus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9168             : {
    9169           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9170           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.checkFramebufferStatus");
    9171             :   }
    9172             :   uint32_t arg0;
    9173           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9174           0 :     return false;
    9175             :   }
    9176           0 :   uint32_t result(self->CheckFramebufferStatus(arg0));
    9177           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9178           0 :   args.rval().setNumber(result);
    9179           0 :   return true;
    9180             : }
    9181             : 
    9182             : static const JSJitInfo checkFramebufferStatus_methodinfo = {
    9183             :   { (JSJitGetterOp)checkFramebufferStatus },
    9184             :   { prototypes::id::WebGL2RenderingContext },
    9185             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9186             :   JSJitInfo::Method,
    9187             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9188             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    9189             :   false,  /* isInfallible. False in setters. */
    9190             :   false,  /* isMovable.  Not relevant for setters. */
    9191             :   false, /* isEliminatable.  Not relevant for setters. */
    9192             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9193             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9194             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9195             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9196             : };
    9197             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9198             : static_assert(0 < 1, "There is no slot for us");
    9199             : 
    9200             : static bool
    9201           0 : clear(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9202             : {
    9203           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9204           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clear");
    9205             :   }
    9206             :   uint32_t arg0;
    9207           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9208           0 :     return false;
    9209             :   }
    9210           0 :   self->Clear(arg0);
    9211           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9212           0 :   args.rval().setUndefined();
    9213           0 :   return true;
    9214             : }
    9215             : 
    9216             : static const JSJitInfo clear_methodinfo = {
    9217             :   { (JSJitGetterOp)clear },
    9218             :   { prototypes::id::WebGL2RenderingContext },
    9219             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9220             :   JSJitInfo::Method,
    9221             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9222             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9223             :   false,  /* isInfallible. False in setters. */
    9224             :   false,  /* isMovable.  Not relevant for setters. */
    9225             :   false, /* isEliminatable.  Not relevant for setters. */
    9226             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9227             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9228             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9229             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9230             : };
    9231             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9232             : static_assert(0 < 1, "There is no slot for us");
    9233             : 
    9234             : static bool
    9235           0 : clearColor(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9236             : {
    9237           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    9238           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clearColor");
    9239             :   }
    9240             :   float arg0;
    9241           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
    9242           0 :     return false;
    9243             :   }
    9244             :   float arg1;
    9245           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
    9246           0 :     return false;
    9247             :   }
    9248             :   float arg2;
    9249           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
    9250           0 :     return false;
    9251             :   }
    9252             :   float arg3;
    9253           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[3], &arg3)) {
    9254           0 :     return false;
    9255             :   }
    9256           0 :   self->ClearColor(arg0, arg1, arg2, arg3);
    9257           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9258           0 :   args.rval().setUndefined();
    9259           0 :   return true;
    9260             : }
    9261             : 
    9262             : static const JSJitInfo clearColor_methodinfo = {
    9263             :   { (JSJitGetterOp)clearColor },
    9264             :   { prototypes::id::WebGL2RenderingContext },
    9265             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9266             :   JSJitInfo::Method,
    9267             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9268             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9269             :   false,  /* isInfallible. False in setters. */
    9270             :   false,  /* isMovable.  Not relevant for setters. */
    9271             :   false, /* isEliminatable.  Not relevant for setters. */
    9272             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9273             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9274             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9275             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9276             : };
    9277             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9278             : static_assert(0 < 1, "There is no slot for us");
    9279             : 
    9280             : static bool
    9281           0 : clearDepth(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9282             : {
    9283           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9284           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clearDepth");
    9285             :   }
    9286             :   float arg0;
    9287           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
    9288           0 :     return false;
    9289             :   }
    9290           0 :   self->ClearDepth(arg0);
    9291           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9292           0 :   args.rval().setUndefined();
    9293           0 :   return true;
    9294             : }
    9295             : 
    9296             : static const JSJitInfo clearDepth_methodinfo = {
    9297             :   { (JSJitGetterOp)clearDepth },
    9298             :   { prototypes::id::WebGL2RenderingContext },
    9299             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9300             :   JSJitInfo::Method,
    9301             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9302             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9303             :   false,  /* isInfallible. False in setters. */
    9304             :   false,  /* isMovable.  Not relevant for setters. */
    9305             :   false, /* isEliminatable.  Not relevant for setters. */
    9306             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9307             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9308             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9309             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9310             : };
    9311             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9312             : static_assert(0 < 1, "There is no slot for us");
    9313             : 
    9314             : static bool
    9315           0 : clearStencil(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9316             : {
    9317           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9318           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.clearStencil");
    9319             :   }
    9320             :   int32_t arg0;
    9321           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    9322           0 :     return false;
    9323             :   }
    9324           0 :   self->ClearStencil(arg0);
    9325           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9326           0 :   args.rval().setUndefined();
    9327           0 :   return true;
    9328             : }
    9329             : 
    9330             : static const JSJitInfo clearStencil_methodinfo = {
    9331             :   { (JSJitGetterOp)clearStencil },
    9332             :   { prototypes::id::WebGL2RenderingContext },
    9333             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9334             :   JSJitInfo::Method,
    9335             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9336             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9337             :   false,  /* isInfallible. False in setters. */
    9338             :   false,  /* isMovable.  Not relevant for setters. */
    9339             :   false, /* isEliminatable.  Not relevant for setters. */
    9340             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9341             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9342             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9343             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9344             : };
    9345             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9346             : static_assert(0 < 1, "There is no slot for us");
    9347             : 
    9348             : static bool
    9349           0 : colorMask(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9350             : {
    9351           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    9352           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.colorMask");
    9353             :   }
    9354             :   bool arg0;
    9355           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    9356           0 :     return false;
    9357             :   }
    9358             :   bool arg1;
    9359           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
    9360           0 :     return false;
    9361             :   }
    9362             :   bool arg2;
    9363           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[2], &arg2)) {
    9364           0 :     return false;
    9365             :   }
    9366             :   bool arg3;
    9367           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[3], &arg3)) {
    9368           0 :     return false;
    9369             :   }
    9370           0 :   self->ColorMask(arg0, arg1, arg2, arg3);
    9371           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9372           0 :   args.rval().setUndefined();
    9373           0 :   return true;
    9374             : }
    9375             : 
    9376             : static const JSJitInfo colorMask_methodinfo = {
    9377             :   { (JSJitGetterOp)colorMask },
    9378             :   { prototypes::id::WebGL2RenderingContext },
    9379             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9380             :   JSJitInfo::Method,
    9381             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9382             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9383             :   false,  /* isInfallible. False in setters. */
    9384             :   false,  /* isMovable.  Not relevant for setters. */
    9385             :   false, /* isEliminatable.  Not relevant for setters. */
    9386             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9387             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9388             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9389             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9390             : };
    9391             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9392             : static_assert(0 < 1, "There is no slot for us");
    9393             : 
    9394             : static bool
    9395           0 : compileShader(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9396             : {
    9397           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9398           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.compileShader");
    9399             :   }
    9400           0 :   NonNull<mozilla::WebGLShader> arg0;
    9401           0 :   if (args[0].isObject()) {
    9402             :     {
    9403           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[0], arg0);
    9404           0 :       if (NS_FAILED(rv)) {
    9405           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.compileShader", "WebGLShader");
    9406           0 :         return false;
    9407             :       }
    9408             :     }
    9409             :   } else {
    9410           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.compileShader");
    9411           0 :     return false;
    9412             :   }
    9413           0 :   self->CompileShader(NonNullHelper(arg0));
    9414           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9415           0 :   args.rval().setUndefined();
    9416           0 :   return true;
    9417             : }
    9418             : 
    9419             : static const JSJitInfo compileShader_methodinfo = {
    9420             :   { (JSJitGetterOp)compileShader },
    9421             :   { prototypes::id::WebGL2RenderingContext },
    9422             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9423             :   JSJitInfo::Method,
    9424             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9425             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9426             :   false,  /* isInfallible. False in setters. */
    9427             :   false,  /* isMovable.  Not relevant for setters. */
    9428             :   false, /* isEliminatable.  Not relevant for setters. */
    9429             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9430             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9431             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9432             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9433             : };
    9434             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9435             : static_assert(0 < 1, "There is no slot for us");
    9436             : 
    9437             : static bool
    9438           0 : copyTexImage2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9439             : {
    9440           0 :   if (MOZ_UNLIKELY(args.length() < 8)) {
    9441           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.copyTexImage2D");
    9442             :   }
    9443             :   uint32_t arg0;
    9444           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9445           0 :     return false;
    9446             :   }
    9447             :   int32_t arg1;
    9448           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    9449           0 :     return false;
    9450             :   }
    9451             :   uint32_t arg2;
    9452           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    9453           0 :     return false;
    9454             :   }
    9455             :   int32_t arg3;
    9456           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    9457           0 :     return false;
    9458             :   }
    9459             :   int32_t arg4;
    9460           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    9461           0 :     return false;
    9462             :   }
    9463             :   int32_t arg5;
    9464           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    9465           0 :     return false;
    9466             :   }
    9467             :   int32_t arg6;
    9468           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    9469           0 :     return false;
    9470             :   }
    9471             :   int32_t arg7;
    9472           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
    9473           0 :     return false;
    9474             :   }
    9475           0 :   self->CopyTexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
    9476           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9477           0 :   args.rval().setUndefined();
    9478           0 :   return true;
    9479             : }
    9480             : 
    9481             : static const JSJitInfo copyTexImage2D_methodinfo = {
    9482             :   { (JSJitGetterOp)copyTexImage2D },
    9483             :   { prototypes::id::WebGL2RenderingContext },
    9484             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9485             :   JSJitInfo::Method,
    9486             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9487             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9488             :   false,  /* isInfallible. False in setters. */
    9489             :   false,  /* isMovable.  Not relevant for setters. */
    9490             :   false, /* isEliminatable.  Not relevant for setters. */
    9491             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9492             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9493             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9494             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9495             : };
    9496             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9497             : static_assert(0 < 1, "There is no slot for us");
    9498             : 
    9499             : static bool
    9500           0 : copyTexSubImage2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9501             : {
    9502           0 :   if (MOZ_UNLIKELY(args.length() < 8)) {
    9503           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.copyTexSubImage2D");
    9504             :   }
    9505             :   uint32_t arg0;
    9506           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9507           0 :     return false;
    9508             :   }
    9509             :   int32_t arg1;
    9510           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
    9511           0 :     return false;
    9512             :   }
    9513             :   int32_t arg2;
    9514           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
    9515           0 :     return false;
    9516             :   }
    9517             :   int32_t arg3;
    9518           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
    9519           0 :     return false;
    9520             :   }
    9521             :   int32_t arg4;
    9522           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
    9523           0 :     return false;
    9524             :   }
    9525             :   int32_t arg5;
    9526           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[5], &arg5)) {
    9527           0 :     return false;
    9528             :   }
    9529             :   int32_t arg6;
    9530           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[6], &arg6)) {
    9531           0 :     return false;
    9532             :   }
    9533             :   int32_t arg7;
    9534           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[7], &arg7)) {
    9535           0 :     return false;
    9536             :   }
    9537           0 :   self->CopyTexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
    9538           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9539           0 :   args.rval().setUndefined();
    9540           0 :   return true;
    9541             : }
    9542             : 
    9543             : static const JSJitInfo copyTexSubImage2D_methodinfo = {
    9544             :   { (JSJitGetterOp)copyTexSubImage2D },
    9545             :   { prototypes::id::WebGL2RenderingContext },
    9546             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9547             :   JSJitInfo::Method,
    9548             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9549             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9550             :   false,  /* isInfallible. False in setters. */
    9551             :   false,  /* isMovable.  Not relevant for setters. */
    9552             :   false, /* isEliminatable.  Not relevant for setters. */
    9553             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9554             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9555             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9556             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9557             : };
    9558             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9559             : static_assert(0 < 1, "There is no slot for us");
    9560             : 
    9561             : static bool
    9562           0 : createBuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9563             : {
    9564           0 :   auto result(StrongOrRawPtr<mozilla::WebGLBuffer>(self->CreateBuffer()));
    9565           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9566           0 :   if (!result) {
    9567           0 :     args.rval().setNull();
    9568           0 :     return true;
    9569             :   }
    9570           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    9571           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    9572           0 :     return false;
    9573             :   }
    9574           0 :   return true;
    9575             : }
    9576             : 
    9577             : static const JSJitInfo createBuffer_methodinfo = {
    9578             :   { (JSJitGetterOp)createBuffer },
    9579             :   { prototypes::id::WebGL2RenderingContext },
    9580             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9581             :   JSJitInfo::Method,
    9582             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9583             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9584             :   false,  /* isInfallible. False in setters. */
    9585             :   false,  /* isMovable.  Not relevant for setters. */
    9586             :   false, /* isEliminatable.  Not relevant for setters. */
    9587             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9588             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9589             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9590             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9591             : };
    9592             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9593             : static_assert(0 < 1, "There is no slot for us");
    9594             : 
    9595             : static bool
    9596           0 : createFramebuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9597             : {
    9598           0 :   auto result(StrongOrRawPtr<mozilla::WebGLFramebuffer>(self->CreateFramebuffer()));
    9599           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9600           0 :   if (!result) {
    9601           0 :     args.rval().setNull();
    9602           0 :     return true;
    9603             :   }
    9604           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    9605           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    9606           0 :     return false;
    9607             :   }
    9608           0 :   return true;
    9609             : }
    9610             : 
    9611             : static const JSJitInfo createFramebuffer_methodinfo = {
    9612             :   { (JSJitGetterOp)createFramebuffer },
    9613             :   { prototypes::id::WebGL2RenderingContext },
    9614             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9615             :   JSJitInfo::Method,
    9616             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9617             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9618             :   false,  /* isInfallible. False in setters. */
    9619             :   false,  /* isMovable.  Not relevant for setters. */
    9620             :   false, /* isEliminatable.  Not relevant for setters. */
    9621             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9622             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9623             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9624             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9625             : };
    9626             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9627             : static_assert(0 < 1, "There is no slot for us");
    9628             : 
    9629             : static bool
    9630           0 : createProgram(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9631             : {
    9632           0 :   auto result(StrongOrRawPtr<mozilla::WebGLProgram>(self->CreateProgram()));
    9633           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9634           0 :   if (!result) {
    9635           0 :     args.rval().setNull();
    9636           0 :     return true;
    9637             :   }
    9638           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    9639           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    9640           0 :     return false;
    9641             :   }
    9642           0 :   return true;
    9643             : }
    9644             : 
    9645             : static const JSJitInfo createProgram_methodinfo = {
    9646             :   { (JSJitGetterOp)createProgram },
    9647             :   { prototypes::id::WebGL2RenderingContext },
    9648             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9649             :   JSJitInfo::Method,
    9650             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9651             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9652             :   false,  /* isInfallible. False in setters. */
    9653             :   false,  /* isMovable.  Not relevant for setters. */
    9654             :   false, /* isEliminatable.  Not relevant for setters. */
    9655             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9656             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9657             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9658             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9659             : };
    9660             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9661             : static_assert(0 < 1, "There is no slot for us");
    9662             : 
    9663             : static bool
    9664           0 : createRenderbuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9665             : {
    9666           0 :   auto result(StrongOrRawPtr<mozilla::WebGLRenderbuffer>(self->CreateRenderbuffer()));
    9667           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9668           0 :   if (!result) {
    9669           0 :     args.rval().setNull();
    9670           0 :     return true;
    9671             :   }
    9672           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    9673           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    9674           0 :     return false;
    9675             :   }
    9676           0 :   return true;
    9677             : }
    9678             : 
    9679             : static const JSJitInfo createRenderbuffer_methodinfo = {
    9680             :   { (JSJitGetterOp)createRenderbuffer },
    9681             :   { prototypes::id::WebGL2RenderingContext },
    9682             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9683             :   JSJitInfo::Method,
    9684             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9685             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9686             :   false,  /* isInfallible. False in setters. */
    9687             :   false,  /* isMovable.  Not relevant for setters. */
    9688             :   false, /* isEliminatable.  Not relevant for setters. */
    9689             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9690             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9691             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9692             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9693             : };
    9694             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9695             : static_assert(0 < 1, "There is no slot for us");
    9696             : 
    9697             : static bool
    9698           0 : createShader(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9699             : {
    9700           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9701           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.createShader");
    9702             :   }
    9703             :   uint32_t arg0;
    9704           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9705           0 :     return false;
    9706             :   }
    9707           0 :   auto result(StrongOrRawPtr<mozilla::WebGLShader>(self->CreateShader(arg0)));
    9708           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9709           0 :   if (!result) {
    9710           0 :     args.rval().setNull();
    9711           0 :     return true;
    9712             :   }
    9713           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    9714           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    9715           0 :     return false;
    9716             :   }
    9717           0 :   return true;
    9718             : }
    9719             : 
    9720             : static const JSJitInfo createShader_methodinfo = {
    9721             :   { (JSJitGetterOp)createShader },
    9722             :   { prototypes::id::WebGL2RenderingContext },
    9723             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9724             :   JSJitInfo::Method,
    9725             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9726             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9727             :   false,  /* isInfallible. False in setters. */
    9728             :   false,  /* isMovable.  Not relevant for setters. */
    9729             :   false, /* isEliminatable.  Not relevant for setters. */
    9730             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9731             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9732             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9733             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9734             : };
    9735             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9736             : static_assert(0 < 1, "There is no slot for us");
    9737             : 
    9738             : static bool
    9739           0 : createTexture(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9740             : {
    9741           0 :   auto result(StrongOrRawPtr<mozilla::WebGLTexture>(self->CreateTexture()));
    9742           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9743           0 :   if (!result) {
    9744           0 :     args.rval().setNull();
    9745           0 :     return true;
    9746             :   }
    9747           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    9748           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    9749           0 :     return false;
    9750             :   }
    9751           0 :   return true;
    9752             : }
    9753             : 
    9754             : static const JSJitInfo createTexture_methodinfo = {
    9755             :   { (JSJitGetterOp)createTexture },
    9756             :   { prototypes::id::WebGL2RenderingContext },
    9757             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9758             :   JSJitInfo::Method,
    9759             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9760             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    9761             :   false,  /* isInfallible. False in setters. */
    9762             :   false,  /* isMovable.  Not relevant for setters. */
    9763             :   false, /* isEliminatable.  Not relevant for setters. */
    9764             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9765             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9766             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9767             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9768             : };
    9769             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9770             : static_assert(0 < 1, "There is no slot for us");
    9771             : 
    9772             : static bool
    9773           0 : cullFace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9774             : {
    9775           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9776           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.cullFace");
    9777             :   }
    9778             :   uint32_t arg0;
    9779           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    9780           0 :     return false;
    9781             :   }
    9782           0 :   self->CullFace(arg0);
    9783           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9784           0 :   args.rval().setUndefined();
    9785           0 :   return true;
    9786             : }
    9787             : 
    9788             : static const JSJitInfo cullFace_methodinfo = {
    9789             :   { (JSJitGetterOp)cullFace },
    9790             :   { prototypes::id::WebGL2RenderingContext },
    9791             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9792             :   JSJitInfo::Method,
    9793             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9794             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9795             :   false,  /* isInfallible. False in setters. */
    9796             :   false,  /* isMovable.  Not relevant for setters. */
    9797             :   false, /* isEliminatable.  Not relevant for setters. */
    9798             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9799             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9800             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9801             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9802             : };
    9803             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9804             : static_assert(0 < 1, "There is no slot for us");
    9805             : 
    9806             : static bool
    9807           0 : deleteBuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9808             : {
    9809           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9810           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteBuffer");
    9811             :   }
    9812             :   mozilla::WebGLBuffer* arg0;
    9813           0 :   if (args[0].isObject()) {
    9814             :     {
    9815           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLBuffer, mozilla::WebGLBuffer>(args[0], arg0);
    9816           0 :       if (NS_FAILED(rv)) {
    9817           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteBuffer", "WebGLBuffer");
    9818           0 :         return false;
    9819             :       }
    9820             :     }
    9821           0 :   } else if (args[0].isNullOrUndefined()) {
    9822           0 :     arg0 = nullptr;
    9823             :   } else {
    9824           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteBuffer");
    9825           0 :     return false;
    9826             :   }
    9827           0 :   self->DeleteBuffer(Constify(arg0));
    9828           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9829           0 :   args.rval().setUndefined();
    9830           0 :   return true;
    9831             : }
    9832             : 
    9833             : static const JSJitInfo deleteBuffer_methodinfo = {
    9834             :   { (JSJitGetterOp)deleteBuffer },
    9835             :   { prototypes::id::WebGL2RenderingContext },
    9836             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9837             :   JSJitInfo::Method,
    9838             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9839             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9840             :   false,  /* isInfallible. False in setters. */
    9841             :   false,  /* isMovable.  Not relevant for setters. */
    9842             :   false, /* isEliminatable.  Not relevant for setters. */
    9843             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9844             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9845             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9846             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9847             : };
    9848             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9849             : static_assert(0 < 1, "There is no slot for us");
    9850             : 
    9851             : static bool
    9852           0 : deleteFramebuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9853             : {
    9854           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9855           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteFramebuffer");
    9856             :   }
    9857             :   mozilla::WebGLFramebuffer* arg0;
    9858           0 :   if (args[0].isObject()) {
    9859             :     {
    9860           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLFramebuffer, mozilla::WebGLFramebuffer>(args[0], arg0);
    9861           0 :       if (NS_FAILED(rv)) {
    9862           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteFramebuffer", "WebGLFramebuffer");
    9863           0 :         return false;
    9864             :       }
    9865             :     }
    9866           0 :   } else if (args[0].isNullOrUndefined()) {
    9867           0 :     arg0 = nullptr;
    9868             :   } else {
    9869           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteFramebuffer");
    9870           0 :     return false;
    9871             :   }
    9872           0 :   self->DeleteFramebuffer(Constify(arg0));
    9873           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9874           0 :   args.rval().setUndefined();
    9875           0 :   return true;
    9876             : }
    9877             : 
    9878             : static const JSJitInfo deleteFramebuffer_methodinfo = {
    9879             :   { (JSJitGetterOp)deleteFramebuffer },
    9880             :   { prototypes::id::WebGL2RenderingContext },
    9881             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9882             :   JSJitInfo::Method,
    9883             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9884             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9885             :   false,  /* isInfallible. False in setters. */
    9886             :   false,  /* isMovable.  Not relevant for setters. */
    9887             :   false, /* isEliminatable.  Not relevant for setters. */
    9888             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9889             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9890             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9891             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9892             : };
    9893             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9894             : static_assert(0 < 1, "There is no slot for us");
    9895             : 
    9896             : static bool
    9897           0 : deleteProgram(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9898             : {
    9899           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9900           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteProgram");
    9901             :   }
    9902             :   mozilla::WebGLProgram* arg0;
    9903           0 :   if (args[0].isObject()) {
    9904             :     {
    9905           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
    9906           0 :       if (NS_FAILED(rv)) {
    9907           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteProgram", "WebGLProgram");
    9908           0 :         return false;
    9909             :       }
    9910             :     }
    9911           0 :   } else if (args[0].isNullOrUndefined()) {
    9912           0 :     arg0 = nullptr;
    9913             :   } else {
    9914           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteProgram");
    9915           0 :     return false;
    9916             :   }
    9917           0 :   self->DeleteProgram(Constify(arg0));
    9918           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9919           0 :   args.rval().setUndefined();
    9920           0 :   return true;
    9921             : }
    9922             : 
    9923             : static const JSJitInfo deleteProgram_methodinfo = {
    9924             :   { (JSJitGetterOp)deleteProgram },
    9925             :   { prototypes::id::WebGL2RenderingContext },
    9926             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9927             :   JSJitInfo::Method,
    9928             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9929             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9930             :   false,  /* isInfallible. False in setters. */
    9931             :   false,  /* isMovable.  Not relevant for setters. */
    9932             :   false, /* isEliminatable.  Not relevant for setters. */
    9933             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9934             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9935             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9936             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9937             : };
    9938             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9939             : static_assert(0 < 1, "There is no slot for us");
    9940             : 
    9941             : static bool
    9942           0 : deleteRenderbuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9943             : {
    9944           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9945           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteRenderbuffer");
    9946             :   }
    9947             :   mozilla::WebGLRenderbuffer* arg0;
    9948           0 :   if (args[0].isObject()) {
    9949             :     {
    9950           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLRenderbuffer, mozilla::WebGLRenderbuffer>(args[0], arg0);
    9951           0 :       if (NS_FAILED(rv)) {
    9952           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteRenderbuffer", "WebGLRenderbuffer");
    9953           0 :         return false;
    9954             :       }
    9955             :     }
    9956           0 :   } else if (args[0].isNullOrUndefined()) {
    9957           0 :     arg0 = nullptr;
    9958             :   } else {
    9959           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteRenderbuffer");
    9960           0 :     return false;
    9961             :   }
    9962           0 :   self->DeleteRenderbuffer(Constify(arg0));
    9963           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    9964           0 :   args.rval().setUndefined();
    9965           0 :   return true;
    9966             : }
    9967             : 
    9968             : static const JSJitInfo deleteRenderbuffer_methodinfo = {
    9969             :   { (JSJitGetterOp)deleteRenderbuffer },
    9970             :   { prototypes::id::WebGL2RenderingContext },
    9971             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
    9972             :   JSJitInfo::Method,
    9973             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    9974             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    9975             :   false,  /* isInfallible. False in setters. */
    9976             :   false,  /* isMovable.  Not relevant for setters. */
    9977             :   false, /* isEliminatable.  Not relevant for setters. */
    9978             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    9979             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    9980             :   false,  /* isTypedMethod.  Only relevant for methods. */
    9981             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    9982             : };
    9983             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    9984             : static_assert(0 < 1, "There is no slot for us");
    9985             : 
    9986             : static bool
    9987           0 : deleteShader(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
    9988             : {
    9989           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    9990           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteShader");
    9991             :   }
    9992             :   mozilla::WebGLShader* arg0;
    9993           0 :   if (args[0].isObject()) {
    9994             :     {
    9995           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[0], arg0);
    9996           0 :       if (NS_FAILED(rv)) {
    9997           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteShader", "WebGLShader");
    9998           0 :         return false;
    9999             :       }
   10000             :     }
   10001           0 :   } else if (args[0].isNullOrUndefined()) {
   10002           0 :     arg0 = nullptr;
   10003             :   } else {
   10004           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteShader");
   10005           0 :     return false;
   10006             :   }
   10007           0 :   self->DeleteShader(Constify(arg0));
   10008           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10009           0 :   args.rval().setUndefined();
   10010           0 :   return true;
   10011             : }
   10012             : 
   10013             : static const JSJitInfo deleteShader_methodinfo = {
   10014             :   { (JSJitGetterOp)deleteShader },
   10015             :   { prototypes::id::WebGL2RenderingContext },
   10016             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10017             :   JSJitInfo::Method,
   10018             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10019             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10020             :   false,  /* isInfallible. False in setters. */
   10021             :   false,  /* isMovable.  Not relevant for setters. */
   10022             :   false, /* isEliminatable.  Not relevant for setters. */
   10023             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10024             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10025             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10026             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10027             : };
   10028             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10029             : static_assert(0 < 1, "There is no slot for us");
   10030             : 
   10031             : static bool
   10032           0 : deleteTexture(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10033             : {
   10034           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10035           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.deleteTexture");
   10036             :   }
   10037             :   mozilla::WebGLTexture* arg0;
   10038           0 :   if (args[0].isObject()) {
   10039             :     {
   10040           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLTexture, mozilla::WebGLTexture>(args[0], arg0);
   10041           0 :       if (NS_FAILED(rv)) {
   10042           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.deleteTexture", "WebGLTexture");
   10043           0 :         return false;
   10044             :       }
   10045             :     }
   10046           0 :   } else if (args[0].isNullOrUndefined()) {
   10047           0 :     arg0 = nullptr;
   10048             :   } else {
   10049           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.deleteTexture");
   10050           0 :     return false;
   10051             :   }
   10052           0 :   self->DeleteTexture(Constify(arg0));
   10053           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10054           0 :   args.rval().setUndefined();
   10055           0 :   return true;
   10056             : }
   10057             : 
   10058             : static const JSJitInfo deleteTexture_methodinfo = {
   10059             :   { (JSJitGetterOp)deleteTexture },
   10060             :   { prototypes::id::WebGL2RenderingContext },
   10061             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10062             :   JSJitInfo::Method,
   10063             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10064             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10065             :   false,  /* isInfallible. False in setters. */
   10066             :   false,  /* isMovable.  Not relevant for setters. */
   10067             :   false, /* isEliminatable.  Not relevant for setters. */
   10068             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10069             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10070             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10071             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10072             : };
   10073             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10074             : static_assert(0 < 1, "There is no slot for us");
   10075             : 
   10076             : static bool
   10077           0 : depthFunc(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10078             : {
   10079           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10080           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.depthFunc");
   10081             :   }
   10082             :   uint32_t arg0;
   10083           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10084           0 :     return false;
   10085             :   }
   10086           0 :   self->DepthFunc(arg0);
   10087           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10088           0 :   args.rval().setUndefined();
   10089           0 :   return true;
   10090             : }
   10091             : 
   10092             : static const JSJitInfo depthFunc_methodinfo = {
   10093             :   { (JSJitGetterOp)depthFunc },
   10094             :   { prototypes::id::WebGL2RenderingContext },
   10095             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10096             :   JSJitInfo::Method,
   10097             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10098             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10099             :   false,  /* isInfallible. False in setters. */
   10100             :   false,  /* isMovable.  Not relevant for setters. */
   10101             :   false, /* isEliminatable.  Not relevant for setters. */
   10102             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10103             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10104             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10105             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10106             : };
   10107             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10108             : static_assert(0 < 1, "There is no slot for us");
   10109             : 
   10110             : static bool
   10111           0 : depthMask(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10112             : {
   10113           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10114           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.depthMask");
   10115             :   }
   10116             :   bool arg0;
   10117           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
   10118           0 :     return false;
   10119             :   }
   10120           0 :   self->DepthMask(arg0);
   10121           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10122           0 :   args.rval().setUndefined();
   10123           0 :   return true;
   10124             : }
   10125             : 
   10126             : static const JSJitInfo depthMask_methodinfo = {
   10127             :   { (JSJitGetterOp)depthMask },
   10128             :   { prototypes::id::WebGL2RenderingContext },
   10129             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10130             :   JSJitInfo::Method,
   10131             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10132             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10133             :   false,  /* isInfallible. False in setters. */
   10134             :   false,  /* isMovable.  Not relevant for setters. */
   10135             :   false, /* isEliminatable.  Not relevant for setters. */
   10136             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10137             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10138             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10139             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10140             : };
   10141             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10142             : static_assert(0 < 1, "There is no slot for us");
   10143             : 
   10144             : static bool
   10145           0 : depthRange(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10146             : {
   10147           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   10148           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.depthRange");
   10149             :   }
   10150             :   float arg0;
   10151           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
   10152           0 :     return false;
   10153             :   }
   10154             :   float arg1;
   10155           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   10156           0 :     return false;
   10157             :   }
   10158           0 :   self->DepthRange(arg0, arg1);
   10159           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10160           0 :   args.rval().setUndefined();
   10161           0 :   return true;
   10162             : }
   10163             : 
   10164             : static const JSJitInfo depthRange_methodinfo = {
   10165             :   { (JSJitGetterOp)depthRange },
   10166             :   { prototypes::id::WebGL2RenderingContext },
   10167             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10168             :   JSJitInfo::Method,
   10169             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10170             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10171             :   false,  /* isInfallible. False in setters. */
   10172             :   false,  /* isMovable.  Not relevant for setters. */
   10173             :   false, /* isEliminatable.  Not relevant for setters. */
   10174             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10175             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10176             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10177             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10178             : };
   10179             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10180             : static_assert(0 < 1, "There is no slot for us");
   10181             : 
   10182             : static bool
   10183           0 : detachShader(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10184             : {
   10185           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   10186           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.detachShader");
   10187             :   }
   10188           0 :   NonNull<mozilla::WebGLProgram> arg0;
   10189           0 :   if (args[0].isObject()) {
   10190             :     {
   10191           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   10192           0 :       if (NS_FAILED(rv)) {
   10193           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.detachShader", "WebGLProgram");
   10194           0 :         return false;
   10195             :       }
   10196             :     }
   10197             :   } else {
   10198           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.detachShader");
   10199           0 :     return false;
   10200             :   }
   10201           0 :   NonNull<mozilla::WebGLShader> arg1;
   10202           0 :   if (args[1].isObject()) {
   10203             :     {
   10204           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[1], arg1);
   10205           0 :       if (NS_FAILED(rv)) {
   10206           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.detachShader", "WebGLShader");
   10207           0 :         return false;
   10208             :       }
   10209             :     }
   10210             :   } else {
   10211           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.detachShader");
   10212           0 :     return false;
   10213             :   }
   10214           0 :   self->DetachShader(NonNullHelper(arg0), NonNullHelper(arg1));
   10215           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10216           0 :   args.rval().setUndefined();
   10217           0 :   return true;
   10218             : }
   10219             : 
   10220             : static const JSJitInfo detachShader_methodinfo = {
   10221             :   { (JSJitGetterOp)detachShader },
   10222             :   { prototypes::id::WebGL2RenderingContext },
   10223             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10224             :   JSJitInfo::Method,
   10225             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10226             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10227             :   false,  /* isInfallible. False in setters. */
   10228             :   false,  /* isMovable.  Not relevant for setters. */
   10229             :   false, /* isEliminatable.  Not relevant for setters. */
   10230             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10231             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10232             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10233             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10234             : };
   10235             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10236             : static_assert(0 < 1, "There is no slot for us");
   10237             : 
   10238             : static bool
   10239           0 : disable(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10240             : {
   10241           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10242           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.disable");
   10243             :   }
   10244             :   uint32_t arg0;
   10245           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10246           0 :     return false;
   10247             :   }
   10248           0 :   self->Disable(arg0);
   10249           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10250           0 :   args.rval().setUndefined();
   10251           0 :   return true;
   10252             : }
   10253             : 
   10254             : static const JSJitInfo disable_methodinfo = {
   10255             :   { (JSJitGetterOp)disable },
   10256             :   { prototypes::id::WebGL2RenderingContext },
   10257             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10258             :   JSJitInfo::Method,
   10259             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10260             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10261             :   false,  /* isInfallible. False in setters. */
   10262             :   false,  /* isMovable.  Not relevant for setters. */
   10263             :   false, /* isEliminatable.  Not relevant for setters. */
   10264             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10265             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10266             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10267             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10268             : };
   10269             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10270             : static_assert(0 < 1, "There is no slot for us");
   10271             : 
   10272             : static bool
   10273           0 : disableVertexAttribArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10274             : {
   10275           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10276           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.disableVertexAttribArray");
   10277             :   }
   10278             :   uint32_t arg0;
   10279           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10280           0 :     return false;
   10281             :   }
   10282           0 :   self->DisableVertexAttribArray(arg0);
   10283           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10284           0 :   args.rval().setUndefined();
   10285           0 :   return true;
   10286             : }
   10287             : 
   10288             : static const JSJitInfo disableVertexAttribArray_methodinfo = {
   10289             :   { (JSJitGetterOp)disableVertexAttribArray },
   10290             :   { prototypes::id::WebGL2RenderingContext },
   10291             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10292             :   JSJitInfo::Method,
   10293             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10294             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10295             :   false,  /* isInfallible. False in setters. */
   10296             :   false,  /* isMovable.  Not relevant for setters. */
   10297             :   false, /* isEliminatable.  Not relevant for setters. */
   10298             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10299             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10300             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10301             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10302             : };
   10303             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10304             : static_assert(0 < 1, "There is no slot for us");
   10305             : 
   10306             : static bool
   10307           0 : drawArrays(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10308             : {
   10309           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   10310           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.drawArrays");
   10311             :   }
   10312             :   uint32_t arg0;
   10313           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10314           0 :     return false;
   10315             :   }
   10316             :   int32_t arg1;
   10317           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   10318           0 :     return false;
   10319             :   }
   10320             :   int32_t arg2;
   10321           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   10322           0 :     return false;
   10323             :   }
   10324           0 :   self->DrawArrays(arg0, arg1, arg2);
   10325           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10326           0 :   args.rval().setUndefined();
   10327           0 :   return true;
   10328             : }
   10329             : 
   10330             : static const JSJitInfo drawArrays_methodinfo = {
   10331             :   { (JSJitGetterOp)drawArrays },
   10332             :   { prototypes::id::WebGL2RenderingContext },
   10333             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10334             :   JSJitInfo::Method,
   10335             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10336             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10337             :   false,  /* isInfallible. False in setters. */
   10338             :   false,  /* isMovable.  Not relevant for setters. */
   10339             :   false, /* isEliminatable.  Not relevant for setters. */
   10340             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10341             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10342             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10343             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10344             : };
   10345             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10346             : static_assert(0 < 1, "There is no slot for us");
   10347             : 
   10348             : static bool
   10349           0 : drawElements(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10350             : {
   10351           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   10352           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.drawElements");
   10353             :   }
   10354             :   uint32_t arg0;
   10355           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10356           0 :     return false;
   10357             :   }
   10358             :   int32_t arg1;
   10359           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   10360           0 :     return false;
   10361             :   }
   10362             :   uint32_t arg2;
   10363           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
   10364           0 :     return false;
   10365             :   }
   10366             :   int64_t arg3;
   10367           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[3], &arg3)) {
   10368           0 :     return false;
   10369             :   }
   10370           0 :   self->DrawElements(arg0, arg1, arg2, arg3);
   10371           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10372           0 :   args.rval().setUndefined();
   10373           0 :   return true;
   10374             : }
   10375             : 
   10376             : static const JSJitInfo drawElements_methodinfo = {
   10377             :   { (JSJitGetterOp)drawElements },
   10378             :   { prototypes::id::WebGL2RenderingContext },
   10379             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10380             :   JSJitInfo::Method,
   10381             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10382             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10383             :   false,  /* isInfallible. False in setters. */
   10384             :   false,  /* isMovable.  Not relevant for setters. */
   10385             :   false, /* isEliminatable.  Not relevant for setters. */
   10386             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10387             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10388             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10389             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10390             : };
   10391             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10392             : static_assert(0 < 1, "There is no slot for us");
   10393             : 
   10394             : static bool
   10395           0 : enable(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10396             : {
   10397           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10398           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.enable");
   10399             :   }
   10400             :   uint32_t arg0;
   10401           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10402           0 :     return false;
   10403             :   }
   10404           0 :   self->Enable(arg0);
   10405           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10406           0 :   args.rval().setUndefined();
   10407           0 :   return true;
   10408             : }
   10409             : 
   10410             : static const JSJitInfo enable_methodinfo = {
   10411             :   { (JSJitGetterOp)enable },
   10412             :   { prototypes::id::WebGL2RenderingContext },
   10413             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10414             :   JSJitInfo::Method,
   10415             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10416             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10417             :   false,  /* isInfallible. False in setters. */
   10418             :   false,  /* isMovable.  Not relevant for setters. */
   10419             :   false, /* isEliminatable.  Not relevant for setters. */
   10420             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10421             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10422             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10423             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10424             : };
   10425             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10426             : static_assert(0 < 1, "There is no slot for us");
   10427             : 
   10428             : static bool
   10429           0 : enableVertexAttribArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10430             : {
   10431           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10432           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.enableVertexAttribArray");
   10433             :   }
   10434             :   uint32_t arg0;
   10435           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10436           0 :     return false;
   10437             :   }
   10438           0 :   self->EnableVertexAttribArray(arg0);
   10439           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10440           0 :   args.rval().setUndefined();
   10441           0 :   return true;
   10442             : }
   10443             : 
   10444             : static const JSJitInfo enableVertexAttribArray_methodinfo = {
   10445             :   { (JSJitGetterOp)enableVertexAttribArray },
   10446             :   { prototypes::id::WebGL2RenderingContext },
   10447             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10448             :   JSJitInfo::Method,
   10449             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10450             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10451             :   false,  /* isInfallible. False in setters. */
   10452             :   false,  /* isMovable.  Not relevant for setters. */
   10453             :   false, /* isEliminatable.  Not relevant for setters. */
   10454             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10455             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10456             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10457             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10458             : };
   10459             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10460             : static_assert(0 < 1, "There is no slot for us");
   10461             : 
   10462             : static bool
   10463           0 : finish(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10464             : {
   10465           0 :   self->Finish();
   10466           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10467           0 :   args.rval().setUndefined();
   10468           0 :   return true;
   10469             : }
   10470             : 
   10471             : static const JSJitInfo finish_methodinfo = {
   10472             :   { (JSJitGetterOp)finish },
   10473             :   { prototypes::id::WebGL2RenderingContext },
   10474             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10475             :   JSJitInfo::Method,
   10476             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10477             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10478             :   true,  /* isInfallible. False in setters. */
   10479             :   false,  /* isMovable.  Not relevant for setters. */
   10480             :   false, /* isEliminatable.  Not relevant for setters. */
   10481             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10482             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10483             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10484             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10485             : };
   10486             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10487             : static_assert(0 < 1, "There is no slot for us");
   10488             : 
   10489             : static bool
   10490           0 : flush(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10491             : {
   10492           0 :   self->Flush();
   10493           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10494           0 :   args.rval().setUndefined();
   10495           0 :   return true;
   10496             : }
   10497             : 
   10498             : static const JSJitInfo flush_methodinfo = {
   10499             :   { (JSJitGetterOp)flush },
   10500             :   { prototypes::id::WebGL2RenderingContext },
   10501             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10502             :   JSJitInfo::Method,
   10503             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10504             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10505             :   true,  /* isInfallible. False in setters. */
   10506             :   false,  /* isMovable.  Not relevant for setters. */
   10507             :   false, /* isEliminatable.  Not relevant for setters. */
   10508             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10509             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10510             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10511             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10512             : };
   10513             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10514             : static_assert(0 < 1, "There is no slot for us");
   10515             : 
   10516             : static bool
   10517           0 : framebufferRenderbuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10518             : {
   10519           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   10520           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.framebufferRenderbuffer");
   10521             :   }
   10522             :   uint32_t arg0;
   10523           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10524           0 :     return false;
   10525             :   }
   10526             :   uint32_t arg1;
   10527           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   10528           0 :     return false;
   10529             :   }
   10530             :   uint32_t arg2;
   10531           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
   10532           0 :     return false;
   10533             :   }
   10534             :   mozilla::WebGLRenderbuffer* arg3;
   10535           0 :   if (args[3].isObject()) {
   10536             :     {
   10537           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLRenderbuffer, mozilla::WebGLRenderbuffer>(args[3], arg3);
   10538           0 :       if (NS_FAILED(rv)) {
   10539           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 4 of WebGL2RenderingContext.framebufferRenderbuffer", "WebGLRenderbuffer");
   10540           0 :         return false;
   10541             :       }
   10542             :     }
   10543           0 :   } else if (args[3].isNullOrUndefined()) {
   10544           0 :     arg3 = nullptr;
   10545             :   } else {
   10546           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 4 of WebGL2RenderingContext.framebufferRenderbuffer");
   10547           0 :     return false;
   10548             :   }
   10549           0 :   self->FramebufferRenderbuffer(arg0, arg1, arg2, Constify(arg3));
   10550           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10551           0 :   args.rval().setUndefined();
   10552           0 :   return true;
   10553             : }
   10554             : 
   10555             : static const JSJitInfo framebufferRenderbuffer_methodinfo = {
   10556             :   { (JSJitGetterOp)framebufferRenderbuffer },
   10557             :   { prototypes::id::WebGL2RenderingContext },
   10558             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10559             :   JSJitInfo::Method,
   10560             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10561             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10562             :   false,  /* isInfallible. False in setters. */
   10563             :   false,  /* isMovable.  Not relevant for setters. */
   10564             :   false, /* isEliminatable.  Not relevant for setters. */
   10565             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10566             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10567             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10568             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10569             : };
   10570             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10571             : static_assert(0 < 1, "There is no slot for us");
   10572             : 
   10573             : static bool
   10574           0 : framebufferTexture2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10575             : {
   10576           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
   10577           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.framebufferTexture2D");
   10578             :   }
   10579             :   uint32_t arg0;
   10580           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10581           0 :     return false;
   10582             :   }
   10583             :   uint32_t arg1;
   10584           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   10585           0 :     return false;
   10586             :   }
   10587             :   uint32_t arg2;
   10588           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
   10589           0 :     return false;
   10590             :   }
   10591             :   mozilla::WebGLTexture* arg3;
   10592           0 :   if (args[3].isObject()) {
   10593             :     {
   10594           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLTexture, mozilla::WebGLTexture>(args[3], arg3);
   10595           0 :       if (NS_FAILED(rv)) {
   10596           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 4 of WebGL2RenderingContext.framebufferTexture2D", "WebGLTexture");
   10597           0 :         return false;
   10598             :       }
   10599             :     }
   10600           0 :   } else if (args[3].isNullOrUndefined()) {
   10601           0 :     arg3 = nullptr;
   10602             :   } else {
   10603           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 4 of WebGL2RenderingContext.framebufferTexture2D");
   10604           0 :     return false;
   10605             :   }
   10606             :   int32_t arg4;
   10607           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
   10608           0 :     return false;
   10609             :   }
   10610           0 :   self->FramebufferTexture2D(arg0, arg1, arg2, Constify(arg3), arg4);
   10611           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10612           0 :   args.rval().setUndefined();
   10613           0 :   return true;
   10614             : }
   10615             : 
   10616             : static const JSJitInfo framebufferTexture2D_methodinfo = {
   10617             :   { (JSJitGetterOp)framebufferTexture2D },
   10618             :   { prototypes::id::WebGL2RenderingContext },
   10619             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10620             :   JSJitInfo::Method,
   10621             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10622             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10623             :   false,  /* isInfallible. False in setters. */
   10624             :   false,  /* isMovable.  Not relevant for setters. */
   10625             :   false, /* isEliminatable.  Not relevant for setters. */
   10626             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10627             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10628             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10629             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10630             : };
   10631             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10632             : static_assert(0 < 1, "There is no slot for us");
   10633             : 
   10634             : static bool
   10635           0 : frontFace(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10636             : {
   10637           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10638           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.frontFace");
   10639             :   }
   10640             :   uint32_t arg0;
   10641           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10642           0 :     return false;
   10643             :   }
   10644           0 :   self->FrontFace(arg0);
   10645           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10646           0 :   args.rval().setUndefined();
   10647           0 :   return true;
   10648             : }
   10649             : 
   10650             : static const JSJitInfo frontFace_methodinfo = {
   10651             :   { (JSJitGetterOp)frontFace },
   10652             :   { prototypes::id::WebGL2RenderingContext },
   10653             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10654             :   JSJitInfo::Method,
   10655             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10656             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10657             :   false,  /* isInfallible. False in setters. */
   10658             :   false,  /* isMovable.  Not relevant for setters. */
   10659             :   false, /* isEliminatable.  Not relevant for setters. */
   10660             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10661             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10662             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10663             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10664             : };
   10665             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10666             : static_assert(0 < 1, "There is no slot for us");
   10667             : 
   10668             : static bool
   10669           0 : generateMipmap(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10670             : {
   10671           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10672           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.generateMipmap");
   10673             :   }
   10674             :   uint32_t arg0;
   10675           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10676           0 :     return false;
   10677             :   }
   10678           0 :   self->GenerateMipmap(arg0);
   10679           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10680           0 :   args.rval().setUndefined();
   10681           0 :   return true;
   10682             : }
   10683             : 
   10684             : static const JSJitInfo generateMipmap_methodinfo = {
   10685             :   { (JSJitGetterOp)generateMipmap },
   10686             :   { prototypes::id::WebGL2RenderingContext },
   10687             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10688             :   JSJitInfo::Method,
   10689             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10690             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   10691             :   false,  /* isInfallible. False in setters. */
   10692             :   false,  /* isMovable.  Not relevant for setters. */
   10693             :   false, /* isEliminatable.  Not relevant for setters. */
   10694             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10695             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10696             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10697             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10698             : };
   10699             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10700             : static_assert(0 < 1, "There is no slot for us");
   10701             : 
   10702             : static bool
   10703           0 : getActiveAttrib(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10704             : {
   10705           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   10706           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getActiveAttrib");
   10707             :   }
   10708           0 :   NonNull<mozilla::WebGLProgram> arg0;
   10709           0 :   if (args[0].isObject()) {
   10710             :     {
   10711           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   10712           0 :       if (NS_FAILED(rv)) {
   10713           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getActiveAttrib", "WebGLProgram");
   10714           0 :         return false;
   10715             :       }
   10716             :     }
   10717             :   } else {
   10718           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getActiveAttrib");
   10719           0 :     return false;
   10720             :   }
   10721             :   uint32_t arg1;
   10722           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   10723           0 :     return false;
   10724             :   }
   10725           0 :   auto result(StrongOrRawPtr<mozilla::WebGLActiveInfo>(self->GetActiveAttrib(NonNullHelper(arg0), arg1)));
   10726           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10727             :   static_assert(!IsPointer<decltype(result)>::value,
   10728             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
   10729           0 :   if (!result) {
   10730           0 :     args.rval().setNull();
   10731           0 :     return true;
   10732             :   }
   10733           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   10734           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   10735           0 :     return false;
   10736             :   }
   10737           0 :   return true;
   10738             : }
   10739             : 
   10740             : static const JSJitInfo getActiveAttrib_methodinfo = {
   10741             :   { (JSJitGetterOp)getActiveAttrib },
   10742             :   { prototypes::id::WebGL2RenderingContext },
   10743             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10744             :   JSJitInfo::Method,
   10745             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10746             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10747             :   false,  /* isInfallible. False in setters. */
   10748             :   false,  /* isMovable.  Not relevant for setters. */
   10749             :   false, /* isEliminatable.  Not relevant for setters. */
   10750             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10751             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10752             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10753             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10754             : };
   10755             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10756             : static_assert(0 < 1, "There is no slot for us");
   10757             : 
   10758             : static bool
   10759           0 : getActiveUniform(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10760             : {
   10761           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   10762           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getActiveUniform");
   10763             :   }
   10764           0 :   NonNull<mozilla::WebGLProgram> arg0;
   10765           0 :   if (args[0].isObject()) {
   10766             :     {
   10767           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   10768           0 :       if (NS_FAILED(rv)) {
   10769           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getActiveUniform", "WebGLProgram");
   10770           0 :         return false;
   10771             :       }
   10772             :     }
   10773             :   } else {
   10774           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getActiveUniform");
   10775           0 :     return false;
   10776             :   }
   10777             :   uint32_t arg1;
   10778           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   10779           0 :     return false;
   10780             :   }
   10781           0 :   auto result(StrongOrRawPtr<mozilla::WebGLActiveInfo>(self->GetActiveUniform(NonNullHelper(arg0), arg1)));
   10782           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10783             :   static_assert(!IsPointer<decltype(result)>::value,
   10784             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
   10785           0 :   if (!result) {
   10786           0 :     args.rval().setNull();
   10787           0 :     return true;
   10788             :   }
   10789           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   10790           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   10791           0 :     return false;
   10792             :   }
   10793           0 :   return true;
   10794             : }
   10795             : 
   10796             : static const JSJitInfo getActiveUniform_methodinfo = {
   10797             :   { (JSJitGetterOp)getActiveUniform },
   10798             :   { prototypes::id::WebGL2RenderingContext },
   10799             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10800             :   JSJitInfo::Method,
   10801             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10802             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10803             :   false,  /* isInfallible. False in setters. */
   10804             :   false,  /* isMovable.  Not relevant for setters. */
   10805             :   false, /* isEliminatable.  Not relevant for setters. */
   10806             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10807             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10808             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10809             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10810             : };
   10811             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10812             : static_assert(0 < 1, "There is no slot for us");
   10813             : 
   10814             : static bool
   10815           0 : getAttachedShaders(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10816             : {
   10817           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10818           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getAttachedShaders");
   10819             :   }
   10820           0 :   NonNull<mozilla::WebGLProgram> arg0;
   10821           0 :   if (args[0].isObject()) {
   10822             :     {
   10823           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   10824           0 :       if (NS_FAILED(rv)) {
   10825           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getAttachedShaders", "WebGLProgram");
   10826           0 :         return false;
   10827             :       }
   10828             :     }
   10829             :   } else {
   10830           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getAttachedShaders");
   10831           0 :     return false;
   10832             :   }
   10833           0 :   Nullable<nsTArray<StrongPtrForMember<mozilla::WebGLShader>::Type>> result;
   10834           0 :   self->GetAttachedShaders(NonNullHelper(arg0), result);
   10835           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10836             : 
   10837           0 :   if (result.IsNull()) {
   10838           0 :     args.rval().setNull();
   10839           0 :     return true;
   10840             :   }
   10841             : 
   10842           0 :   uint32_t length = result.Value().Length();
   10843           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
   10844           0 :   if (!returnArray) {
   10845           0 :     return false;
   10846             :   }
   10847             :   // Scope for 'tmp'
   10848             :   {
   10849           0 :     JS::Rooted<JS::Value> tmp(cx);
   10850           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
   10851             :       // Control block to let us common up the JS_DefineElement calls when there
   10852             :       // are different ways to succeed at wrapping the object.
   10853             :       do {
   10854           0 :         if (!GetOrCreateDOMReflector(cx, result.Value()[sequenceIdx0], &tmp)) {
   10855           0 :           MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   10856           0 :           return false;
   10857             :         }
   10858           0 :         break;
   10859             :       } while (0);
   10860           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
   10861             :                             JSPROP_ENUMERATE)) {
   10862           0 :         return false;
   10863             :       }
   10864             :     }
   10865             :   }
   10866           0 :   args.rval().setObject(*returnArray);
   10867           0 :   return true;
   10868             : }
   10869             : 
   10870             : static const JSJitInfo getAttachedShaders_methodinfo = {
   10871             :   { (JSJitGetterOp)getAttachedShaders },
   10872             :   { prototypes::id::WebGL2RenderingContext },
   10873             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10874             :   JSJitInfo::Method,
   10875             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10876             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10877             :   false,  /* isInfallible. False in setters. */
   10878             :   false,  /* isMovable.  Not relevant for setters. */
   10879             :   false, /* isEliminatable.  Not relevant for setters. */
   10880             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10881             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10882             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10883             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10884             : };
   10885             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10886             : static_assert(0 < 1, "There is no slot for us");
   10887             : 
   10888             : static bool
   10889           0 : getAttribLocation(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10890             : {
   10891           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   10892           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getAttribLocation");
   10893             :   }
   10894           0 :   NonNull<mozilla::WebGLProgram> arg0;
   10895           0 :   if (args[0].isObject()) {
   10896             :     {
   10897           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   10898           0 :       if (NS_FAILED(rv)) {
   10899           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getAttribLocation", "WebGLProgram");
   10900           0 :         return false;
   10901             :       }
   10902             :     }
   10903             :   } else {
   10904           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getAttribLocation");
   10905           0 :     return false;
   10906             :   }
   10907           0 :   binding_detail::FakeString arg1;
   10908           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
   10909           0 :     return false;
   10910             :   }
   10911           0 :   int32_t result(self->GetAttribLocation(NonNullHelper(arg0), NonNullHelper(Constify(arg1))));
   10912           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10913           0 :   args.rval().setInt32(int32_t(result));
   10914           0 :   return true;
   10915             : }
   10916             : 
   10917             : static const JSJitInfo getAttribLocation_methodinfo = {
   10918             :   { (JSJitGetterOp)getAttribLocation },
   10919             :   { prototypes::id::WebGL2RenderingContext },
   10920             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10921             :   JSJitInfo::Method,
   10922             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10923             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
   10924             :   false,  /* isInfallible. False in setters. */
   10925             :   false,  /* isMovable.  Not relevant for setters. */
   10926             :   false, /* isEliminatable.  Not relevant for setters. */
   10927             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10928             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10929             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10930             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10931             : };
   10932             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10933             : static_assert(0 < 1, "There is no slot for us");
   10934             : 
   10935             : static bool
   10936           0 : getBufferParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10937             : {
   10938           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   10939           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getBufferParameter");
   10940             :   }
   10941             :   uint32_t arg0;
   10942           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10943           0 :     return false;
   10944             :   }
   10945             :   uint32_t arg1;
   10946           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   10947           0 :     return false;
   10948             :   }
   10949           0 :   JS::Rooted<JS::Value> result(cx);
   10950           0 :   self->GetBufferParameter(cx, arg0, arg1, &result);
   10951           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10952           0 :   JS::ExposeValueToActiveJS(result);
   10953           0 :   args.rval().set(result);
   10954           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   10955           0 :     return false;
   10956             :   }
   10957           0 :   return true;
   10958             : }
   10959             : 
   10960             : static const JSJitInfo getBufferParameter_methodinfo = {
   10961             :   { (JSJitGetterOp)getBufferParameter },
   10962             :   { prototypes::id::WebGL2RenderingContext },
   10963             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   10964             :   JSJitInfo::Method,
   10965             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   10966             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   10967             :   false,  /* isInfallible. False in setters. */
   10968             :   false,  /* isMovable.  Not relevant for setters. */
   10969             :   false, /* isEliminatable.  Not relevant for setters. */
   10970             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   10971             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   10972             :   false,  /* isTypedMethod.  Only relevant for methods. */
   10973             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   10974             : };
   10975             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   10976             : static_assert(0 < 1, "There is no slot for us");
   10977             : 
   10978             : static bool
   10979           0 : getParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   10980             : {
   10981           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   10982           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getParameter");
   10983             :   }
   10984             :   uint32_t arg0;
   10985           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   10986           0 :     return false;
   10987             :   }
   10988           0 :   binding_detail::FastErrorResult rv;
   10989           0 :   JS::Rooted<JS::Value> result(cx);
   10990           0 :   self->GetParameter(cx, arg0, &result, rv);
   10991           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   10992           0 :     return false;
   10993             :   }
   10994           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   10995           0 :   JS::ExposeValueToActiveJS(result);
   10996           0 :   args.rval().set(result);
   10997           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   10998           0 :     return false;
   10999             :   }
   11000           0 :   return true;
   11001             : }
   11002             : 
   11003             : static const JSJitInfo getParameter_methodinfo = {
   11004             :   { (JSJitGetterOp)getParameter },
   11005             :   { prototypes::id::WebGL2RenderingContext },
   11006             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11007             :   JSJitInfo::Method,
   11008             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11009             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11010             :   false,  /* isInfallible. False in setters. */
   11011             :   false,  /* isMovable.  Not relevant for setters. */
   11012             :   false, /* isEliminatable.  Not relevant for setters. */
   11013             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11014             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11015             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11016             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11017             : };
   11018             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11019             : static_assert(0 < 1, "There is no slot for us");
   11020             : 
   11021             : static bool
   11022           0 : getError(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11023             : {
   11024           0 :   uint32_t result(self->GetError());
   11025           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11026           0 :   args.rval().setNumber(result);
   11027           0 :   return true;
   11028             : }
   11029             : 
   11030             : static const JSJitInfo getError_methodinfo = {
   11031             :   { (JSJitGetterOp)getError },
   11032             :   { prototypes::id::WebGL2RenderingContext },
   11033             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11034             :   JSJitInfo::Method,
   11035             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11036             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
   11037             :   true,  /* isInfallible. False in setters. */
   11038             :   false,  /* isMovable.  Not relevant for setters. */
   11039             :   false, /* isEliminatable.  Not relevant for setters. */
   11040             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11041             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11042             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11043             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11044             : };
   11045             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11046             : static_assert(0 < 1, "There is no slot for us");
   11047             : 
   11048             : static bool
   11049           0 : getFramebufferAttachmentParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11050             : {
   11051           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   11052           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getFramebufferAttachmentParameter");
   11053             :   }
   11054             :   uint32_t arg0;
   11055           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   11056           0 :     return false;
   11057             :   }
   11058             :   uint32_t arg1;
   11059           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11060           0 :     return false;
   11061             :   }
   11062             :   uint32_t arg2;
   11063           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
   11064           0 :     return false;
   11065             :   }
   11066           0 :   binding_detail::FastErrorResult rv;
   11067           0 :   JS::Rooted<JS::Value> result(cx);
   11068           0 :   self->GetFramebufferAttachmentParameter(cx, arg0, arg1, arg2, &result, rv);
   11069           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   11070           0 :     return false;
   11071             :   }
   11072           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11073           0 :   JS::ExposeValueToActiveJS(result);
   11074           0 :   args.rval().set(result);
   11075           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   11076           0 :     return false;
   11077             :   }
   11078           0 :   return true;
   11079             : }
   11080             : 
   11081             : static const JSJitInfo getFramebufferAttachmentParameter_methodinfo = {
   11082             :   { (JSJitGetterOp)getFramebufferAttachmentParameter },
   11083             :   { prototypes::id::WebGL2RenderingContext },
   11084             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11085             :   JSJitInfo::Method,
   11086             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11087             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11088             :   false,  /* isInfallible. False in setters. */
   11089             :   false,  /* isMovable.  Not relevant for setters. */
   11090             :   false, /* isEliminatable.  Not relevant for setters. */
   11091             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11092             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11093             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11094             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11095             : };
   11096             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11097             : static_assert(0 < 1, "There is no slot for us");
   11098             : 
   11099             : static bool
   11100           0 : getProgramParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11101             : {
   11102           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11103           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getProgramParameter");
   11104             :   }
   11105           0 :   NonNull<mozilla::WebGLProgram> arg0;
   11106           0 :   if (args[0].isObject()) {
   11107             :     {
   11108           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   11109           0 :       if (NS_FAILED(rv)) {
   11110           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getProgramParameter", "WebGLProgram");
   11111           0 :         return false;
   11112             :       }
   11113             :     }
   11114             :   } else {
   11115           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getProgramParameter");
   11116           0 :     return false;
   11117             :   }
   11118             :   uint32_t arg1;
   11119           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11120           0 :     return false;
   11121             :   }
   11122           0 :   JS::Rooted<JS::Value> result(cx);
   11123           0 :   self->GetProgramParameter(cx, NonNullHelper(arg0), arg1, &result);
   11124           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11125           0 :   JS::ExposeValueToActiveJS(result);
   11126           0 :   args.rval().set(result);
   11127           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   11128           0 :     return false;
   11129             :   }
   11130           0 :   return true;
   11131             : }
   11132             : 
   11133             : static const JSJitInfo getProgramParameter_methodinfo = {
   11134             :   { (JSJitGetterOp)getProgramParameter },
   11135             :   { prototypes::id::WebGL2RenderingContext },
   11136             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11137             :   JSJitInfo::Method,
   11138             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11139             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11140             :   false,  /* isInfallible. False in setters. */
   11141             :   false,  /* isMovable.  Not relevant for setters. */
   11142             :   false, /* isEliminatable.  Not relevant for setters. */
   11143             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11144             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11145             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11146             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11147             : };
   11148             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11149             : static_assert(0 < 1, "There is no slot for us");
   11150             : 
   11151             : static bool
   11152           0 : getProgramInfoLog(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11153             : {
   11154           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11155           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getProgramInfoLog");
   11156             :   }
   11157           0 :   NonNull<mozilla::WebGLProgram> arg0;
   11158           0 :   if (args[0].isObject()) {
   11159             :     {
   11160           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   11161           0 :       if (NS_FAILED(rv)) {
   11162           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getProgramInfoLog", "WebGLProgram");
   11163           0 :         return false;
   11164             :       }
   11165             :     }
   11166             :   } else {
   11167           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getProgramInfoLog");
   11168           0 :     return false;
   11169             :   }
   11170           0 :   DOMString result;
   11171           0 :   self->GetProgramInfoLog(NonNullHelper(arg0), result);
   11172           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11173           0 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
   11174           0 :     return false;
   11175             :   }
   11176           0 :   return true;
   11177             : }
   11178             : 
   11179             : static const JSJitInfo getProgramInfoLog_methodinfo = {
   11180             :   { (JSJitGetterOp)getProgramInfoLog },
   11181             :   { prototypes::id::WebGL2RenderingContext },
   11182             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11183             :   JSJitInfo::Method,
   11184             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11185             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11186             :   false,  /* isInfallible. False in setters. */
   11187             :   false,  /* isMovable.  Not relevant for setters. */
   11188             :   false, /* isEliminatable.  Not relevant for setters. */
   11189             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11190             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11191             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11192             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11193             : };
   11194             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11195             : static_assert(0 < 1, "There is no slot for us");
   11196             : 
   11197             : static bool
   11198           0 : getRenderbufferParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11199             : {
   11200           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11201           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getRenderbufferParameter");
   11202             :   }
   11203             :   uint32_t arg0;
   11204           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   11205           0 :     return false;
   11206             :   }
   11207             :   uint32_t arg1;
   11208           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11209           0 :     return false;
   11210             :   }
   11211           0 :   JS::Rooted<JS::Value> result(cx);
   11212           0 :   self->GetRenderbufferParameter(cx, arg0, arg1, &result);
   11213           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11214           0 :   JS::ExposeValueToActiveJS(result);
   11215           0 :   args.rval().set(result);
   11216           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   11217           0 :     return false;
   11218             :   }
   11219           0 :   return true;
   11220             : }
   11221             : 
   11222             : static const JSJitInfo getRenderbufferParameter_methodinfo = {
   11223             :   { (JSJitGetterOp)getRenderbufferParameter },
   11224             :   { prototypes::id::WebGL2RenderingContext },
   11225             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11226             :   JSJitInfo::Method,
   11227             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11228             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11229             :   false,  /* isInfallible. False in setters. */
   11230             :   false,  /* isMovable.  Not relevant for setters. */
   11231             :   false, /* isEliminatable.  Not relevant for setters. */
   11232             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11233             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11234             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11235             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11236             : };
   11237             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11238             : static_assert(0 < 1, "There is no slot for us");
   11239             : 
   11240             : static bool
   11241           0 : getShaderParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11242             : {
   11243           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11244           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getShaderParameter");
   11245             :   }
   11246           0 :   NonNull<mozilla::WebGLShader> arg0;
   11247           0 :   if (args[0].isObject()) {
   11248             :     {
   11249           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[0], arg0);
   11250           0 :       if (NS_FAILED(rv)) {
   11251           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getShaderParameter", "WebGLShader");
   11252           0 :         return false;
   11253             :       }
   11254             :     }
   11255             :   } else {
   11256           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getShaderParameter");
   11257           0 :     return false;
   11258             :   }
   11259             :   uint32_t arg1;
   11260           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11261           0 :     return false;
   11262             :   }
   11263           0 :   JS::Rooted<JS::Value> result(cx);
   11264           0 :   self->GetShaderParameter(cx, NonNullHelper(arg0), arg1, &result);
   11265           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11266           0 :   JS::ExposeValueToActiveJS(result);
   11267           0 :   args.rval().set(result);
   11268           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   11269           0 :     return false;
   11270             :   }
   11271           0 :   return true;
   11272             : }
   11273             : 
   11274             : static const JSJitInfo getShaderParameter_methodinfo = {
   11275             :   { (JSJitGetterOp)getShaderParameter },
   11276             :   { prototypes::id::WebGL2RenderingContext },
   11277             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11278             :   JSJitInfo::Method,
   11279             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11280             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11281             :   false,  /* isInfallible. False in setters. */
   11282             :   false,  /* isMovable.  Not relevant for setters. */
   11283             :   false, /* isEliminatable.  Not relevant for setters. */
   11284             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11285             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11286             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11287             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11288             : };
   11289             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11290             : static_assert(0 < 1, "There is no slot for us");
   11291             : 
   11292             : static bool
   11293           0 : getShaderPrecisionFormat(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11294             : {
   11295           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11296           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getShaderPrecisionFormat");
   11297             :   }
   11298             :   uint32_t arg0;
   11299           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   11300           0 :     return false;
   11301             :   }
   11302             :   uint32_t arg1;
   11303           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11304           0 :     return false;
   11305             :   }
   11306           0 :   auto result(StrongOrRawPtr<mozilla::WebGLShaderPrecisionFormat>(self->GetShaderPrecisionFormat(arg0, arg1)));
   11307           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11308             :   static_assert(!IsPointer<decltype(result)>::value,
   11309             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
   11310           0 :   if (!result) {
   11311           0 :     args.rval().setNull();
   11312           0 :     return true;
   11313             :   }
   11314           0 :   if (!WrapNewBindingNonWrapperCachedObject(cx, obj, result, args.rval())) {
   11315           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   11316           0 :     return false;
   11317             :   }
   11318           0 :   return true;
   11319             : }
   11320             : 
   11321             : static const JSJitInfo getShaderPrecisionFormat_methodinfo = {
   11322             :   { (JSJitGetterOp)getShaderPrecisionFormat },
   11323             :   { prototypes::id::WebGL2RenderingContext },
   11324             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11325             :   JSJitInfo::Method,
   11326             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11327             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11328             :   false,  /* isInfallible. False in setters. */
   11329             :   false,  /* isMovable.  Not relevant for setters. */
   11330             :   false, /* isEliminatable.  Not relevant for setters. */
   11331             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11332             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11333             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11334             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11335             : };
   11336             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11337             : static_assert(0 < 1, "There is no slot for us");
   11338             : 
   11339             : static bool
   11340           0 : getShaderInfoLog(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11341             : {
   11342           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11343           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getShaderInfoLog");
   11344             :   }
   11345           0 :   NonNull<mozilla::WebGLShader> arg0;
   11346           0 :   if (args[0].isObject()) {
   11347             :     {
   11348           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[0], arg0);
   11349           0 :       if (NS_FAILED(rv)) {
   11350           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getShaderInfoLog", "WebGLShader");
   11351           0 :         return false;
   11352             :       }
   11353             :     }
   11354             :   } else {
   11355           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getShaderInfoLog");
   11356           0 :     return false;
   11357             :   }
   11358           0 :   DOMString result;
   11359           0 :   self->GetShaderInfoLog(NonNullHelper(arg0), result);
   11360           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11361           0 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
   11362           0 :     return false;
   11363             :   }
   11364           0 :   return true;
   11365             : }
   11366             : 
   11367             : static const JSJitInfo getShaderInfoLog_methodinfo = {
   11368             :   { (JSJitGetterOp)getShaderInfoLog },
   11369             :   { prototypes::id::WebGL2RenderingContext },
   11370             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11371             :   JSJitInfo::Method,
   11372             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11373             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11374             :   false,  /* isInfallible. False in setters. */
   11375             :   false,  /* isMovable.  Not relevant for setters. */
   11376             :   false, /* isEliminatable.  Not relevant for setters. */
   11377             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11378             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11379             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11380             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11381             : };
   11382             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11383             : static_assert(0 < 1, "There is no slot for us");
   11384             : 
   11385             : static bool
   11386           0 : getShaderSource(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11387             : {
   11388           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11389           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getShaderSource");
   11390             :   }
   11391           0 :   NonNull<mozilla::WebGLShader> arg0;
   11392           0 :   if (args[0].isObject()) {
   11393             :     {
   11394           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[0], arg0);
   11395           0 :       if (NS_FAILED(rv)) {
   11396           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getShaderSource", "WebGLShader");
   11397           0 :         return false;
   11398             :       }
   11399             :     }
   11400             :   } else {
   11401           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getShaderSource");
   11402           0 :     return false;
   11403             :   }
   11404           0 :   DOMString result;
   11405           0 :   self->GetShaderSource(NonNullHelper(arg0), result);
   11406           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11407           0 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
   11408           0 :     return false;
   11409             :   }
   11410           0 :   return true;
   11411             : }
   11412             : 
   11413             : static const JSJitInfo getShaderSource_methodinfo = {
   11414             :   { (JSJitGetterOp)getShaderSource },
   11415             :   { prototypes::id::WebGL2RenderingContext },
   11416             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11417             :   JSJitInfo::Method,
   11418             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11419             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11420             :   false,  /* isInfallible. False in setters. */
   11421             :   false,  /* isMovable.  Not relevant for setters. */
   11422             :   false, /* isEliminatable.  Not relevant for setters. */
   11423             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11424             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11425             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11426             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11427             : };
   11428             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11429             : static_assert(0 < 1, "There is no slot for us");
   11430             : 
   11431             : static bool
   11432           0 : getTexParameter(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11433             : {
   11434           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11435           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getTexParameter");
   11436             :   }
   11437             :   uint32_t arg0;
   11438           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   11439           0 :     return false;
   11440             :   }
   11441             :   uint32_t arg1;
   11442           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11443           0 :     return false;
   11444             :   }
   11445           0 :   JS::Rooted<JS::Value> result(cx);
   11446           0 :   self->GetTexParameter(cx, arg0, arg1, &result);
   11447           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11448           0 :   JS::ExposeValueToActiveJS(result);
   11449           0 :   args.rval().set(result);
   11450           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   11451           0 :     return false;
   11452             :   }
   11453           0 :   return true;
   11454             : }
   11455             : 
   11456             : static const JSJitInfo getTexParameter_methodinfo = {
   11457             :   { (JSJitGetterOp)getTexParameter },
   11458             :   { prototypes::id::WebGL2RenderingContext },
   11459             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11460             :   JSJitInfo::Method,
   11461             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11462             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11463             :   false,  /* isInfallible. False in setters. */
   11464             :   false,  /* isMovable.  Not relevant for setters. */
   11465             :   false, /* isEliminatable.  Not relevant for setters. */
   11466             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11467             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11468             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11469             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11470             : };
   11471             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11472             : static_assert(0 < 1, "There is no slot for us");
   11473             : 
   11474             : static bool
   11475           0 : getUniform(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11476             : {
   11477           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11478           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getUniform");
   11479             :   }
   11480           0 :   NonNull<mozilla::WebGLProgram> arg0;
   11481           0 :   if (args[0].isObject()) {
   11482             :     {
   11483           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   11484           0 :       if (NS_FAILED(rv)) {
   11485           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getUniform", "WebGLProgram");
   11486           0 :         return false;
   11487             :       }
   11488             :     }
   11489             :   } else {
   11490           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getUniform");
   11491           0 :     return false;
   11492             :   }
   11493           0 :   NonNull<mozilla::WebGLUniformLocation> arg1;
   11494           0 :   if (args[1].isObject()) {
   11495             :     {
   11496           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[1], arg1);
   11497           0 :       if (NS_FAILED(rv)) {
   11498           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 2 of WebGL2RenderingContext.getUniform", "WebGLUniformLocation");
   11499           0 :         return false;
   11500             :       }
   11501             :     }
   11502             :   } else {
   11503           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 2 of WebGL2RenderingContext.getUniform");
   11504           0 :     return false;
   11505             :   }
   11506           0 :   JS::Rooted<JS::Value> result(cx);
   11507           0 :   self->GetUniform(cx, NonNullHelper(arg0), NonNullHelper(arg1), &result);
   11508           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11509           0 :   JS::ExposeValueToActiveJS(result);
   11510           0 :   args.rval().set(result);
   11511           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   11512           0 :     return false;
   11513             :   }
   11514           0 :   return true;
   11515             : }
   11516             : 
   11517             : static const JSJitInfo getUniform_methodinfo = {
   11518             :   { (JSJitGetterOp)getUniform },
   11519             :   { prototypes::id::WebGL2RenderingContext },
   11520             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11521             :   JSJitInfo::Method,
   11522             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11523             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11524             :   false,  /* isInfallible. False in setters. */
   11525             :   false,  /* isMovable.  Not relevant for setters. */
   11526             :   false, /* isEliminatable.  Not relevant for setters. */
   11527             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11528             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11529             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11530             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11531             : };
   11532             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11533             : static_assert(0 < 1, "There is no slot for us");
   11534             : 
   11535             : static bool
   11536           0 : getUniformLocation(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11537             : {
   11538           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11539           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getUniformLocation");
   11540             :   }
   11541           0 :   NonNull<mozilla::WebGLProgram> arg0;
   11542           0 :   if (args[0].isObject()) {
   11543             :     {
   11544           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   11545           0 :       if (NS_FAILED(rv)) {
   11546           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.getUniformLocation", "WebGLProgram");
   11547           0 :         return false;
   11548             :       }
   11549             :     }
   11550             :   } else {
   11551           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.getUniformLocation");
   11552           0 :     return false;
   11553             :   }
   11554           0 :   binding_detail::FakeString arg1;
   11555           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
   11556           0 :     return false;
   11557             :   }
   11558           0 :   auto result(StrongOrRawPtr<mozilla::WebGLUniformLocation>(self->GetUniformLocation(NonNullHelper(arg0), NonNullHelper(Constify(arg1)))));
   11559           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11560             :   static_assert(!IsPointer<decltype(result)>::value,
   11561             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
   11562           0 :   if (!result) {
   11563           0 :     args.rval().setNull();
   11564           0 :     return true;
   11565             :   }
   11566           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
   11567           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
   11568           0 :     return false;
   11569             :   }
   11570           0 :   return true;
   11571             : }
   11572             : 
   11573             : static const JSJitInfo getUniformLocation_methodinfo = {
   11574             :   { (JSJitGetterOp)getUniformLocation },
   11575             :   { prototypes::id::WebGL2RenderingContext },
   11576             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11577             :   JSJitInfo::Method,
   11578             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11579             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11580             :   false,  /* isInfallible. False in setters. */
   11581             :   false,  /* isMovable.  Not relevant for setters. */
   11582             :   false, /* isEliminatable.  Not relevant for setters. */
   11583             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11584             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11585             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11586             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11587             : };
   11588             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11589             : static_assert(0 < 1, "There is no slot for us");
   11590             : 
   11591             : static bool
   11592           0 : getVertexAttrib(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11593             : {
   11594           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11595           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getVertexAttrib");
   11596             :   }
   11597             :   uint32_t arg0;
   11598           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   11599           0 :     return false;
   11600             :   }
   11601             :   uint32_t arg1;
   11602           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11603           0 :     return false;
   11604             :   }
   11605           0 :   binding_detail::FastErrorResult rv;
   11606           0 :   JS::Rooted<JS::Value> result(cx);
   11607           0 :   self->GetVertexAttrib(cx, arg0, arg1, &result, rv);
   11608           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
   11609           0 :     return false;
   11610             :   }
   11611           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11612           0 :   JS::ExposeValueToActiveJS(result);
   11613           0 :   args.rval().set(result);
   11614           0 :   if (!MaybeWrapValue(cx, args.rval())) {
   11615           0 :     return false;
   11616             :   }
   11617           0 :   return true;
   11618             : }
   11619             : 
   11620             : static const JSJitInfo getVertexAttrib_methodinfo = {
   11621             :   { (JSJitGetterOp)getVertexAttrib },
   11622             :   { prototypes::id::WebGL2RenderingContext },
   11623             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11624             :   JSJitInfo::Method,
   11625             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11626             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
   11627             :   false,  /* isInfallible. False in setters. */
   11628             :   false,  /* isMovable.  Not relevant for setters. */
   11629             :   false, /* isEliminatable.  Not relevant for setters. */
   11630             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11631             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11632             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11633             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11634             : };
   11635             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11636             : static_assert(0 < 1, "There is no slot for us");
   11637             : 
   11638             : static bool
   11639           0 : getVertexAttribOffset(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11640             : {
   11641           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11642           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.getVertexAttribOffset");
   11643             :   }
   11644             :   uint32_t arg0;
   11645           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   11646           0 :     return false;
   11647             :   }
   11648             :   uint32_t arg1;
   11649           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11650           0 :     return false;
   11651             :   }
   11652           0 :   int64_t result(self->GetVertexAttribOffset(arg0, arg1));
   11653           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11654           0 :   args.rval().set(JS_NumberValue(double(result)));
   11655           0 :   return true;
   11656             : }
   11657             : 
   11658             : static const JSJitInfo getVertexAttribOffset_methodinfo = {
   11659             :   { (JSJitGetterOp)getVertexAttribOffset },
   11660             :   { prototypes::id::WebGL2RenderingContext },
   11661             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11662             :   JSJitInfo::Method,
   11663             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11664             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
   11665             :   false,  /* isInfallible. False in setters. */
   11666             :   false,  /* isMovable.  Not relevant for setters. */
   11667             :   false, /* isEliminatable.  Not relevant for setters. */
   11668             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11669             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11670             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11671             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11672             : };
   11673             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11674             : static_assert(0 < 1, "There is no slot for us");
   11675             : 
   11676             : static bool
   11677           0 : hint(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11678             : {
   11679           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   11680           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.hint");
   11681             :   }
   11682             :   uint32_t arg0;
   11683           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   11684           0 :     return false;
   11685             :   }
   11686             :   uint32_t arg1;
   11687           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   11688           0 :     return false;
   11689             :   }
   11690           0 :   self->Hint(arg0, arg1);
   11691           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11692           0 :   args.rval().setUndefined();
   11693           0 :   return true;
   11694             : }
   11695             : 
   11696             : static const JSJitInfo hint_methodinfo = {
   11697             :   { (JSJitGetterOp)hint },
   11698             :   { prototypes::id::WebGL2RenderingContext },
   11699             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11700             :   JSJitInfo::Method,
   11701             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11702             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   11703             :   false,  /* isInfallible. False in setters. */
   11704             :   false,  /* isMovable.  Not relevant for setters. */
   11705             :   false, /* isEliminatable.  Not relevant for setters. */
   11706             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11707             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11708             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11709             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11710             : };
   11711             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11712             : static_assert(0 < 1, "There is no slot for us");
   11713             : 
   11714             : static bool
   11715           0 : isBuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11716             : {
   11717           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11718           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isBuffer");
   11719             :   }
   11720             :   mozilla::WebGLBuffer* arg0;
   11721           0 :   if (args[0].isObject()) {
   11722             :     {
   11723           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLBuffer, mozilla::WebGLBuffer>(args[0], arg0);
   11724           0 :       if (NS_FAILED(rv)) {
   11725           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isBuffer", "WebGLBuffer");
   11726           0 :         return false;
   11727             :       }
   11728             :     }
   11729           0 :   } else if (args[0].isNullOrUndefined()) {
   11730           0 :     arg0 = nullptr;
   11731             :   } else {
   11732           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isBuffer");
   11733           0 :     return false;
   11734             :   }
   11735           0 :   bool result(self->IsBuffer(Constify(arg0)));
   11736           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11737           0 :   args.rval().setBoolean(result);
   11738           0 :   return true;
   11739             : }
   11740             : 
   11741             : static const JSJitInfo isBuffer_methodinfo = {
   11742             :   { (JSJitGetterOp)isBuffer },
   11743             :   { prototypes::id::WebGL2RenderingContext },
   11744             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11745             :   JSJitInfo::Method,
   11746             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11747             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
   11748             :   false,  /* isInfallible. False in setters. */
   11749             :   false,  /* isMovable.  Not relevant for setters. */
   11750             :   false, /* isEliminatable.  Not relevant for setters. */
   11751             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11752             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11753             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11754             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11755             : };
   11756             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11757             : static_assert(0 < 1, "There is no slot for us");
   11758             : 
   11759             : static bool
   11760           0 : isEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11761             : {
   11762           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11763           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isEnabled");
   11764             :   }
   11765             :   uint32_t arg0;
   11766           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   11767           0 :     return false;
   11768             :   }
   11769           0 :   bool result(self->IsEnabled(arg0));
   11770           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11771           0 :   args.rval().setBoolean(result);
   11772           0 :   return true;
   11773             : }
   11774             : 
   11775             : static const JSJitInfo isEnabled_methodinfo = {
   11776             :   { (JSJitGetterOp)isEnabled },
   11777             :   { prototypes::id::WebGL2RenderingContext },
   11778             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11779             :   JSJitInfo::Method,
   11780             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11781             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
   11782             :   false,  /* isInfallible. False in setters. */
   11783             :   false,  /* isMovable.  Not relevant for setters. */
   11784             :   false, /* isEliminatable.  Not relevant for setters. */
   11785             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11786             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11787             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11788             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11789             : };
   11790             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11791             : static_assert(0 < 1, "There is no slot for us");
   11792             : 
   11793             : static bool
   11794           0 : isFramebuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11795             : {
   11796           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11797           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isFramebuffer");
   11798             :   }
   11799             :   mozilla::WebGLFramebuffer* arg0;
   11800           0 :   if (args[0].isObject()) {
   11801             :     {
   11802           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLFramebuffer, mozilla::WebGLFramebuffer>(args[0], arg0);
   11803           0 :       if (NS_FAILED(rv)) {
   11804           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isFramebuffer", "WebGLFramebuffer");
   11805           0 :         return false;
   11806             :       }
   11807             :     }
   11808           0 :   } else if (args[0].isNullOrUndefined()) {
   11809           0 :     arg0 = nullptr;
   11810             :   } else {
   11811           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isFramebuffer");
   11812           0 :     return false;
   11813             :   }
   11814           0 :   bool result(self->IsFramebuffer(Constify(arg0)));
   11815           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11816           0 :   args.rval().setBoolean(result);
   11817           0 :   return true;
   11818             : }
   11819             : 
   11820             : static const JSJitInfo isFramebuffer_methodinfo = {
   11821             :   { (JSJitGetterOp)isFramebuffer },
   11822             :   { prototypes::id::WebGL2RenderingContext },
   11823             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11824             :   JSJitInfo::Method,
   11825             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11826             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
   11827             :   false,  /* isInfallible. False in setters. */
   11828             :   false,  /* isMovable.  Not relevant for setters. */
   11829             :   false, /* isEliminatable.  Not relevant for setters. */
   11830             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11831             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11832             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11833             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11834             : };
   11835             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11836             : static_assert(0 < 1, "There is no slot for us");
   11837             : 
   11838             : static bool
   11839           0 : isProgram(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11840             : {
   11841           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11842           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isProgram");
   11843             :   }
   11844             :   mozilla::WebGLProgram* arg0;
   11845           0 :   if (args[0].isObject()) {
   11846             :     {
   11847           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   11848           0 :       if (NS_FAILED(rv)) {
   11849           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isProgram", "WebGLProgram");
   11850           0 :         return false;
   11851             :       }
   11852             :     }
   11853           0 :   } else if (args[0].isNullOrUndefined()) {
   11854           0 :     arg0 = nullptr;
   11855             :   } else {
   11856           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isProgram");
   11857           0 :     return false;
   11858             :   }
   11859           0 :   bool result(self->IsProgram(Constify(arg0)));
   11860           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11861           0 :   args.rval().setBoolean(result);
   11862           0 :   return true;
   11863             : }
   11864             : 
   11865             : static const JSJitInfo isProgram_methodinfo = {
   11866             :   { (JSJitGetterOp)isProgram },
   11867             :   { prototypes::id::WebGL2RenderingContext },
   11868             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11869             :   JSJitInfo::Method,
   11870             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11871             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
   11872             :   false,  /* isInfallible. False in setters. */
   11873             :   false,  /* isMovable.  Not relevant for setters. */
   11874             :   false, /* isEliminatable.  Not relevant for setters. */
   11875             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11876             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11877             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11878             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11879             : };
   11880             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11881             : static_assert(0 < 1, "There is no slot for us");
   11882             : 
   11883             : static bool
   11884           0 : isRenderbuffer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11885             : {
   11886           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11887           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isRenderbuffer");
   11888             :   }
   11889             :   mozilla::WebGLRenderbuffer* arg0;
   11890           0 :   if (args[0].isObject()) {
   11891             :     {
   11892           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLRenderbuffer, mozilla::WebGLRenderbuffer>(args[0], arg0);
   11893           0 :       if (NS_FAILED(rv)) {
   11894           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isRenderbuffer", "WebGLRenderbuffer");
   11895           0 :         return false;
   11896             :       }
   11897             :     }
   11898           0 :   } else if (args[0].isNullOrUndefined()) {
   11899           0 :     arg0 = nullptr;
   11900             :   } else {
   11901           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isRenderbuffer");
   11902           0 :     return false;
   11903             :   }
   11904           0 :   bool result(self->IsRenderbuffer(Constify(arg0)));
   11905           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11906           0 :   args.rval().setBoolean(result);
   11907           0 :   return true;
   11908             : }
   11909             : 
   11910             : static const JSJitInfo isRenderbuffer_methodinfo = {
   11911             :   { (JSJitGetterOp)isRenderbuffer },
   11912             :   { prototypes::id::WebGL2RenderingContext },
   11913             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11914             :   JSJitInfo::Method,
   11915             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11916             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
   11917             :   false,  /* isInfallible. False in setters. */
   11918             :   false,  /* isMovable.  Not relevant for setters. */
   11919             :   false, /* isEliminatable.  Not relevant for setters. */
   11920             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11921             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11922             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11923             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11924             : };
   11925             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11926             : static_assert(0 < 1, "There is no slot for us");
   11927             : 
   11928             : static bool
   11929           0 : isShader(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11930             : {
   11931           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11932           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isShader");
   11933             :   }
   11934             :   mozilla::WebGLShader* arg0;
   11935           0 :   if (args[0].isObject()) {
   11936             :     {
   11937           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[0], arg0);
   11938           0 :       if (NS_FAILED(rv)) {
   11939           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isShader", "WebGLShader");
   11940           0 :         return false;
   11941             :       }
   11942             :     }
   11943           0 :   } else if (args[0].isNullOrUndefined()) {
   11944           0 :     arg0 = nullptr;
   11945             :   } else {
   11946           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isShader");
   11947           0 :     return false;
   11948             :   }
   11949           0 :   bool result(self->IsShader(Constify(arg0)));
   11950           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11951           0 :   args.rval().setBoolean(result);
   11952           0 :   return true;
   11953             : }
   11954             : 
   11955             : static const JSJitInfo isShader_methodinfo = {
   11956             :   { (JSJitGetterOp)isShader },
   11957             :   { prototypes::id::WebGL2RenderingContext },
   11958             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   11959             :   JSJitInfo::Method,
   11960             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   11961             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
   11962             :   false,  /* isInfallible. False in setters. */
   11963             :   false,  /* isMovable.  Not relevant for setters. */
   11964             :   false, /* isEliminatable.  Not relevant for setters. */
   11965             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   11966             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   11967             :   false,  /* isTypedMethod.  Only relevant for methods. */
   11968             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   11969             : };
   11970             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   11971             : static_assert(0 < 1, "There is no slot for us");
   11972             : 
   11973             : static bool
   11974           0 : isTexture(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   11975             : {
   11976           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   11977           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.isTexture");
   11978             :   }
   11979             :   mozilla::WebGLTexture* arg0;
   11980           0 :   if (args[0].isObject()) {
   11981             :     {
   11982           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLTexture, mozilla::WebGLTexture>(args[0], arg0);
   11983           0 :       if (NS_FAILED(rv)) {
   11984           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.isTexture", "WebGLTexture");
   11985           0 :         return false;
   11986             :       }
   11987             :     }
   11988           0 :   } else if (args[0].isNullOrUndefined()) {
   11989           0 :     arg0 = nullptr;
   11990             :   } else {
   11991           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.isTexture");
   11992           0 :     return false;
   11993             :   }
   11994           0 :   bool result(self->IsTexture(Constify(arg0)));
   11995           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   11996           0 :   args.rval().setBoolean(result);
   11997           0 :   return true;
   11998             : }
   11999             : 
   12000             : static const JSJitInfo isTexture_methodinfo = {
   12001             :   { (JSJitGetterOp)isTexture },
   12002             :   { prototypes::id::WebGL2RenderingContext },
   12003             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12004             :   JSJitInfo::Method,
   12005             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12006             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
   12007             :   false,  /* isInfallible. False in setters. */
   12008             :   false,  /* isMovable.  Not relevant for setters. */
   12009             :   false, /* isEliminatable.  Not relevant for setters. */
   12010             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12011             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12012             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12013             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12014             : };
   12015             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12016             : static_assert(0 < 1, "There is no slot for us");
   12017             : 
   12018             : static bool
   12019           0 : lineWidth(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12020             : {
   12021           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   12022           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.lineWidth");
   12023             :   }
   12024             :   float arg0;
   12025           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
   12026           0 :     return false;
   12027             :   }
   12028           0 :   self->LineWidth(arg0);
   12029           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12030           0 :   args.rval().setUndefined();
   12031           0 :   return true;
   12032             : }
   12033             : 
   12034             : static const JSJitInfo lineWidth_methodinfo = {
   12035             :   { (JSJitGetterOp)lineWidth },
   12036             :   { prototypes::id::WebGL2RenderingContext },
   12037             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12038             :   JSJitInfo::Method,
   12039             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12040             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12041             :   false,  /* isInfallible. False in setters. */
   12042             :   false,  /* isMovable.  Not relevant for setters. */
   12043             :   false, /* isEliminatable.  Not relevant for setters. */
   12044             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12045             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12046             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12047             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12048             : };
   12049             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12050             : static_assert(0 < 1, "There is no slot for us");
   12051             : 
   12052             : static bool
   12053           0 : linkProgram(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12054             : {
   12055           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   12056           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.linkProgram");
   12057             :   }
   12058           0 :   NonNull<mozilla::WebGLProgram> arg0;
   12059           0 :   if (args[0].isObject()) {
   12060             :     {
   12061           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   12062           0 :       if (NS_FAILED(rv)) {
   12063           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.linkProgram", "WebGLProgram");
   12064           0 :         return false;
   12065             :       }
   12066             :     }
   12067             :   } else {
   12068           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.linkProgram");
   12069           0 :     return false;
   12070             :   }
   12071           0 :   self->LinkProgram(NonNullHelper(arg0));
   12072           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12073           0 :   args.rval().setUndefined();
   12074           0 :   return true;
   12075             : }
   12076             : 
   12077             : static const JSJitInfo linkProgram_methodinfo = {
   12078             :   { (JSJitGetterOp)linkProgram },
   12079             :   { prototypes::id::WebGL2RenderingContext },
   12080             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12081             :   JSJitInfo::Method,
   12082             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12083             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12084             :   false,  /* isInfallible. False in setters. */
   12085             :   false,  /* isMovable.  Not relevant for setters. */
   12086             :   false, /* isEliminatable.  Not relevant for setters. */
   12087             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12088             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12089             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12090             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12091             : };
   12092             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12093             : static_assert(0 < 1, "There is no slot for us");
   12094             : 
   12095             : static bool
   12096           0 : pixelStorei(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12097             : {
   12098           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   12099           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.pixelStorei");
   12100             :   }
   12101             :   uint32_t arg0;
   12102           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12103           0 :     return false;
   12104             :   }
   12105             :   int32_t arg1;
   12106           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   12107           0 :     return false;
   12108             :   }
   12109           0 :   self->PixelStorei(arg0, arg1);
   12110           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12111           0 :   args.rval().setUndefined();
   12112           0 :   return true;
   12113             : }
   12114             : 
   12115             : static const JSJitInfo pixelStorei_methodinfo = {
   12116             :   { (JSJitGetterOp)pixelStorei },
   12117             :   { prototypes::id::WebGL2RenderingContext },
   12118             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12119             :   JSJitInfo::Method,
   12120             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12121             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12122             :   false,  /* isInfallible. False in setters. */
   12123             :   false,  /* isMovable.  Not relevant for setters. */
   12124             :   false, /* isEliminatable.  Not relevant for setters. */
   12125             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12126             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12127             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12128             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12129             : };
   12130             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12131             : static_assert(0 < 1, "There is no slot for us");
   12132             : 
   12133             : static bool
   12134           0 : polygonOffset(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12135             : {
   12136           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   12137           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.polygonOffset");
   12138             :   }
   12139             :   float arg0;
   12140           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
   12141           0 :     return false;
   12142             :   }
   12143             :   float arg1;
   12144           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   12145           0 :     return false;
   12146             :   }
   12147           0 :   self->PolygonOffset(arg0, arg1);
   12148           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12149           0 :   args.rval().setUndefined();
   12150           0 :   return true;
   12151             : }
   12152             : 
   12153             : static const JSJitInfo polygonOffset_methodinfo = {
   12154             :   { (JSJitGetterOp)polygonOffset },
   12155             :   { prototypes::id::WebGL2RenderingContext },
   12156             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12157             :   JSJitInfo::Method,
   12158             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12159             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12160             :   false,  /* isInfallible. False in setters. */
   12161             :   false,  /* isMovable.  Not relevant for setters. */
   12162             :   false, /* isEliminatable.  Not relevant for setters. */
   12163             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12164             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12165             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12166             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12167             : };
   12168             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12169             : static_assert(0 < 1, "There is no slot for us");
   12170             : 
   12171             : static bool
   12172           0 : renderbufferStorage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12173             : {
   12174           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   12175           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.renderbufferStorage");
   12176             :   }
   12177             :   uint32_t arg0;
   12178           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12179           0 :     return false;
   12180             :   }
   12181             :   uint32_t arg1;
   12182           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   12183           0 :     return false;
   12184             :   }
   12185             :   int32_t arg2;
   12186           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   12187           0 :     return false;
   12188             :   }
   12189             :   int32_t arg3;
   12190           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
   12191           0 :     return false;
   12192             :   }
   12193           0 :   self->RenderbufferStorage(arg0, arg1, arg2, arg3);
   12194           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12195           0 :   args.rval().setUndefined();
   12196           0 :   return true;
   12197             : }
   12198             : 
   12199             : static const JSJitInfo renderbufferStorage_methodinfo = {
   12200             :   { (JSJitGetterOp)renderbufferStorage },
   12201             :   { prototypes::id::WebGL2RenderingContext },
   12202             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12203             :   JSJitInfo::Method,
   12204             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12205             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12206             :   false,  /* isInfallible. False in setters. */
   12207             :   false,  /* isMovable.  Not relevant for setters. */
   12208             :   false, /* isEliminatable.  Not relevant for setters. */
   12209             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12210             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12211             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12212             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12213             : };
   12214             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12215             : static_assert(0 < 1, "There is no slot for us");
   12216             : 
   12217             : static bool
   12218           0 : sampleCoverage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12219             : {
   12220           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   12221           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.sampleCoverage");
   12222             :   }
   12223             :   float arg0;
   12224           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[0], &arg0)) {
   12225           0 :     return false;
   12226             :   }
   12227             :   bool arg1;
   12228           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[1], &arg1)) {
   12229           0 :     return false;
   12230             :   }
   12231           0 :   self->SampleCoverage(arg0, arg1);
   12232           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12233           0 :   args.rval().setUndefined();
   12234           0 :   return true;
   12235             : }
   12236             : 
   12237             : static const JSJitInfo sampleCoverage_methodinfo = {
   12238             :   { (JSJitGetterOp)sampleCoverage },
   12239             :   { prototypes::id::WebGL2RenderingContext },
   12240             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12241             :   JSJitInfo::Method,
   12242             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12243             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12244             :   false,  /* isInfallible. False in setters. */
   12245             :   false,  /* isMovable.  Not relevant for setters. */
   12246             :   false, /* isEliminatable.  Not relevant for setters. */
   12247             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12248             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12249             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12250             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12251             : };
   12252             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12253             : static_assert(0 < 1, "There is no slot for us");
   12254             : 
   12255             : static bool
   12256           0 : scissor(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12257             : {
   12258           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   12259           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.scissor");
   12260             :   }
   12261             :   int32_t arg0;
   12262           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
   12263           0 :     return false;
   12264             :   }
   12265             :   int32_t arg1;
   12266           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   12267           0 :     return false;
   12268             :   }
   12269             :   int32_t arg2;
   12270           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   12271           0 :     return false;
   12272             :   }
   12273             :   int32_t arg3;
   12274           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
   12275           0 :     return false;
   12276             :   }
   12277           0 :   self->Scissor(arg0, arg1, arg2, arg3);
   12278           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12279           0 :   args.rval().setUndefined();
   12280           0 :   return true;
   12281             : }
   12282             : 
   12283             : static const JSJitInfo scissor_methodinfo = {
   12284             :   { (JSJitGetterOp)scissor },
   12285             :   { prototypes::id::WebGL2RenderingContext },
   12286             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12287             :   JSJitInfo::Method,
   12288             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12289             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12290             :   false,  /* isInfallible. False in setters. */
   12291             :   false,  /* isMovable.  Not relevant for setters. */
   12292             :   false, /* isEliminatable.  Not relevant for setters. */
   12293             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12294             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12295             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12296             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12297             : };
   12298             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12299             : static_assert(0 < 1, "There is no slot for us");
   12300             : 
   12301             : static bool
   12302           0 : shaderSource(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12303             : {
   12304           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   12305           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.shaderSource");
   12306             :   }
   12307           0 :   NonNull<mozilla::WebGLShader> arg0;
   12308           0 :   if (args[0].isObject()) {
   12309             :     {
   12310           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLShader, mozilla::WebGLShader>(args[0], arg0);
   12311           0 :       if (NS_FAILED(rv)) {
   12312           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.shaderSource", "WebGLShader");
   12313           0 :         return false;
   12314             :       }
   12315             :     }
   12316             :   } else {
   12317           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.shaderSource");
   12318           0 :     return false;
   12319             :   }
   12320           0 :   binding_detail::FakeString arg1;
   12321           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
   12322           0 :     return false;
   12323             :   }
   12324           0 :   self->ShaderSource(NonNullHelper(arg0), NonNullHelper(Constify(arg1)));
   12325           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12326           0 :   args.rval().setUndefined();
   12327           0 :   return true;
   12328             : }
   12329             : 
   12330             : static const JSJitInfo shaderSource_methodinfo = {
   12331             :   { (JSJitGetterOp)shaderSource },
   12332             :   { prototypes::id::WebGL2RenderingContext },
   12333             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12334             :   JSJitInfo::Method,
   12335             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12336             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12337             :   false,  /* isInfallible. False in setters. */
   12338             :   false,  /* isMovable.  Not relevant for setters. */
   12339             :   false, /* isEliminatable.  Not relevant for setters. */
   12340             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12341             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12342             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12343             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12344             : };
   12345             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12346             : static_assert(0 < 1, "There is no slot for us");
   12347             : 
   12348             : static bool
   12349           0 : stencilFunc(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12350             : {
   12351           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   12352           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.stencilFunc");
   12353             :   }
   12354             :   uint32_t arg0;
   12355           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12356           0 :     return false;
   12357             :   }
   12358             :   int32_t arg1;
   12359           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   12360           0 :     return false;
   12361             :   }
   12362             :   uint32_t arg2;
   12363           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
   12364           0 :     return false;
   12365             :   }
   12366           0 :   self->StencilFunc(arg0, arg1, arg2);
   12367           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12368           0 :   args.rval().setUndefined();
   12369           0 :   return true;
   12370             : }
   12371             : 
   12372             : static const JSJitInfo stencilFunc_methodinfo = {
   12373             :   { (JSJitGetterOp)stencilFunc },
   12374             :   { prototypes::id::WebGL2RenderingContext },
   12375             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12376             :   JSJitInfo::Method,
   12377             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12378             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12379             :   false,  /* isInfallible. False in setters. */
   12380             :   false,  /* isMovable.  Not relevant for setters. */
   12381             :   false, /* isEliminatable.  Not relevant for setters. */
   12382             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12383             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12384             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12385             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12386             : };
   12387             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12388             : static_assert(0 < 1, "There is no slot for us");
   12389             : 
   12390             : static bool
   12391           0 : stencilFuncSeparate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12392             : {
   12393           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   12394           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.stencilFuncSeparate");
   12395             :   }
   12396             :   uint32_t arg0;
   12397           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12398           0 :     return false;
   12399             :   }
   12400             :   uint32_t arg1;
   12401           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   12402           0 :     return false;
   12403             :   }
   12404             :   int32_t arg2;
   12405           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   12406           0 :     return false;
   12407             :   }
   12408             :   uint32_t arg3;
   12409           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
   12410           0 :     return false;
   12411             :   }
   12412           0 :   self->StencilFuncSeparate(arg0, arg1, arg2, arg3);
   12413           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12414           0 :   args.rval().setUndefined();
   12415           0 :   return true;
   12416             : }
   12417             : 
   12418             : static const JSJitInfo stencilFuncSeparate_methodinfo = {
   12419             :   { (JSJitGetterOp)stencilFuncSeparate },
   12420             :   { prototypes::id::WebGL2RenderingContext },
   12421             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12422             :   JSJitInfo::Method,
   12423             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12424             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12425             :   false,  /* isInfallible. False in setters. */
   12426             :   false,  /* isMovable.  Not relevant for setters. */
   12427             :   false, /* isEliminatable.  Not relevant for setters. */
   12428             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12429             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12430             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12431             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12432             : };
   12433             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12434             : static_assert(0 < 1, "There is no slot for us");
   12435             : 
   12436             : static bool
   12437           0 : stencilMask(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12438             : {
   12439           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   12440           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.stencilMask");
   12441             :   }
   12442             :   uint32_t arg0;
   12443           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12444           0 :     return false;
   12445             :   }
   12446           0 :   self->StencilMask(arg0);
   12447           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12448           0 :   args.rval().setUndefined();
   12449           0 :   return true;
   12450             : }
   12451             : 
   12452             : static const JSJitInfo stencilMask_methodinfo = {
   12453             :   { (JSJitGetterOp)stencilMask },
   12454             :   { prototypes::id::WebGL2RenderingContext },
   12455             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12456             :   JSJitInfo::Method,
   12457             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12458             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12459             :   false,  /* isInfallible. False in setters. */
   12460             :   false,  /* isMovable.  Not relevant for setters. */
   12461             :   false, /* isEliminatable.  Not relevant for setters. */
   12462             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12463             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12464             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12465             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12466             : };
   12467             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12468             : static_assert(0 < 1, "There is no slot for us");
   12469             : 
   12470             : static bool
   12471           0 : stencilMaskSeparate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12472             : {
   12473           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   12474           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.stencilMaskSeparate");
   12475             :   }
   12476             :   uint32_t arg0;
   12477           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12478           0 :     return false;
   12479             :   }
   12480             :   uint32_t arg1;
   12481           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   12482           0 :     return false;
   12483             :   }
   12484           0 :   self->StencilMaskSeparate(arg0, arg1);
   12485           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12486           0 :   args.rval().setUndefined();
   12487           0 :   return true;
   12488             : }
   12489             : 
   12490             : static const JSJitInfo stencilMaskSeparate_methodinfo = {
   12491             :   { (JSJitGetterOp)stencilMaskSeparate },
   12492             :   { prototypes::id::WebGL2RenderingContext },
   12493             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12494             :   JSJitInfo::Method,
   12495             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12496             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12497             :   false,  /* isInfallible. False in setters. */
   12498             :   false,  /* isMovable.  Not relevant for setters. */
   12499             :   false, /* isEliminatable.  Not relevant for setters. */
   12500             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12501             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12502             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12503             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12504             : };
   12505             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12506             : static_assert(0 < 1, "There is no slot for us");
   12507             : 
   12508             : static bool
   12509           0 : stencilOp(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12510             : {
   12511           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   12512           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.stencilOp");
   12513             :   }
   12514             :   uint32_t arg0;
   12515           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12516           0 :     return false;
   12517             :   }
   12518             :   uint32_t arg1;
   12519           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   12520           0 :     return false;
   12521             :   }
   12522             :   uint32_t arg2;
   12523           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
   12524           0 :     return false;
   12525             :   }
   12526           0 :   self->StencilOp(arg0, arg1, arg2);
   12527           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12528           0 :   args.rval().setUndefined();
   12529           0 :   return true;
   12530             : }
   12531             : 
   12532             : static const JSJitInfo stencilOp_methodinfo = {
   12533             :   { (JSJitGetterOp)stencilOp },
   12534             :   { prototypes::id::WebGL2RenderingContext },
   12535             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12536             :   JSJitInfo::Method,
   12537             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12538             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12539             :   false,  /* isInfallible. False in setters. */
   12540             :   false,  /* isMovable.  Not relevant for setters. */
   12541             :   false, /* isEliminatable.  Not relevant for setters. */
   12542             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12543             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12544             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12545             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12546             : };
   12547             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12548             : static_assert(0 < 1, "There is no slot for us");
   12549             : 
   12550             : static bool
   12551           0 : stencilOpSeparate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12552             : {
   12553           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   12554           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.stencilOpSeparate");
   12555             :   }
   12556             :   uint32_t arg0;
   12557           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12558           0 :     return false;
   12559             :   }
   12560             :   uint32_t arg1;
   12561           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   12562           0 :     return false;
   12563             :   }
   12564             :   uint32_t arg2;
   12565           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
   12566           0 :     return false;
   12567             :   }
   12568             :   uint32_t arg3;
   12569           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[3], &arg3)) {
   12570           0 :     return false;
   12571             :   }
   12572           0 :   self->StencilOpSeparate(arg0, arg1, arg2, arg3);
   12573           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12574           0 :   args.rval().setUndefined();
   12575           0 :   return true;
   12576             : }
   12577             : 
   12578             : static const JSJitInfo stencilOpSeparate_methodinfo = {
   12579             :   { (JSJitGetterOp)stencilOpSeparate },
   12580             :   { prototypes::id::WebGL2RenderingContext },
   12581             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12582             :   JSJitInfo::Method,
   12583             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12584             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12585             :   false,  /* isInfallible. False in setters. */
   12586             :   false,  /* isMovable.  Not relevant for setters. */
   12587             :   false, /* isEliminatable.  Not relevant for setters. */
   12588             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12589             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12590             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12591             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12592             : };
   12593             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12594             : static_assert(0 < 1, "There is no slot for us");
   12595             : 
   12596             : static bool
   12597           0 : texParameterf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12598             : {
   12599           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   12600           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.texParameterf");
   12601             :   }
   12602             :   uint32_t arg0;
   12603           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12604           0 :     return false;
   12605             :   }
   12606             :   uint32_t arg1;
   12607           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   12608           0 :     return false;
   12609             :   }
   12610             :   float arg2;
   12611           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
   12612           0 :     return false;
   12613             :   }
   12614           0 :   self->TexParameterf(arg0, arg1, arg2);
   12615           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12616           0 :   args.rval().setUndefined();
   12617           0 :   return true;
   12618             : }
   12619             : 
   12620             : static const JSJitInfo texParameterf_methodinfo = {
   12621             :   { (JSJitGetterOp)texParameterf },
   12622             :   { prototypes::id::WebGL2RenderingContext },
   12623             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12624             :   JSJitInfo::Method,
   12625             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12626             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12627             :   false,  /* isInfallible. False in setters. */
   12628             :   false,  /* isMovable.  Not relevant for setters. */
   12629             :   false, /* isEliminatable.  Not relevant for setters. */
   12630             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12631             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12632             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12633             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12634             : };
   12635             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12636             : static_assert(0 < 1, "There is no slot for us");
   12637             : 
   12638             : static bool
   12639           0 : texParameteri(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12640             : {
   12641           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   12642           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.texParameteri");
   12643             :   }
   12644             :   uint32_t arg0;
   12645           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   12646           0 :     return false;
   12647             :   }
   12648             :   uint32_t arg1;
   12649           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
   12650           0 :     return false;
   12651             :   }
   12652             :   int32_t arg2;
   12653           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   12654           0 :     return false;
   12655             :   }
   12656           0 :   self->TexParameteri(arg0, arg1, arg2);
   12657           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12658           0 :   args.rval().setUndefined();
   12659           0 :   return true;
   12660             : }
   12661             : 
   12662             : static const JSJitInfo texParameteri_methodinfo = {
   12663             :   { (JSJitGetterOp)texParameteri },
   12664             :   { prototypes::id::WebGL2RenderingContext },
   12665             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12666             :   JSJitInfo::Method,
   12667             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12668             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12669             :   false,  /* isInfallible. False in setters. */
   12670             :   false,  /* isMovable.  Not relevant for setters. */
   12671             :   false, /* isEliminatable.  Not relevant for setters. */
   12672             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12673             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12674             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12675             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12676             : };
   12677             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12678             : static_assert(0 < 1, "There is no slot for us");
   12679             : 
   12680             : static bool
   12681           0 : uniform1f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12682             : {
   12683           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   12684           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform1f");
   12685             :   }
   12686             :   mozilla::WebGLUniformLocation* arg0;
   12687           0 :   if (args[0].isObject()) {
   12688             :     {
   12689           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
   12690           0 :       if (NS_FAILED(rv)) {
   12691           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform1f", "WebGLUniformLocation");
   12692           0 :         return false;
   12693             :       }
   12694             :     }
   12695           0 :   } else if (args[0].isNullOrUndefined()) {
   12696           0 :     arg0 = nullptr;
   12697             :   } else {
   12698           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform1f");
   12699           0 :     return false;
   12700             :   }
   12701             :   float arg1;
   12702           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   12703           0 :     return false;
   12704             :   }
   12705           0 :   self->Uniform1f(Constify(arg0), arg1);
   12706           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12707           0 :   args.rval().setUndefined();
   12708           0 :   return true;
   12709             : }
   12710             : 
   12711             : static const JSJitInfo uniform1f_methodinfo = {
   12712             :   { (JSJitGetterOp)uniform1f },
   12713             :   { prototypes::id::WebGL2RenderingContext },
   12714             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12715             :   JSJitInfo::Method,
   12716             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12717             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12718             :   false,  /* isInfallible. False in setters. */
   12719             :   false,  /* isMovable.  Not relevant for setters. */
   12720             :   false, /* isEliminatable.  Not relevant for setters. */
   12721             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12722             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12723             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12724             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12725             : };
   12726             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12727             : static_assert(0 < 1, "There is no slot for us");
   12728             : 
   12729             : static bool
   12730           0 : uniform2f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12731             : {
   12732           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   12733           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform2f");
   12734             :   }
   12735             :   mozilla::WebGLUniformLocation* arg0;
   12736           0 :   if (args[0].isObject()) {
   12737             :     {
   12738           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
   12739           0 :       if (NS_FAILED(rv)) {
   12740           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform2f", "WebGLUniformLocation");
   12741           0 :         return false;
   12742             :       }
   12743             :     }
   12744           0 :   } else if (args[0].isNullOrUndefined()) {
   12745           0 :     arg0 = nullptr;
   12746             :   } else {
   12747           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform2f");
   12748           0 :     return false;
   12749             :   }
   12750             :   float arg1;
   12751           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   12752           0 :     return false;
   12753             :   }
   12754             :   float arg2;
   12755           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
   12756           0 :     return false;
   12757             :   }
   12758           0 :   self->Uniform2f(Constify(arg0), arg1, arg2);
   12759           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12760           0 :   args.rval().setUndefined();
   12761           0 :   return true;
   12762             : }
   12763             : 
   12764             : static const JSJitInfo uniform2f_methodinfo = {
   12765             :   { (JSJitGetterOp)uniform2f },
   12766             :   { prototypes::id::WebGL2RenderingContext },
   12767             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12768             :   JSJitInfo::Method,
   12769             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12770             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12771             :   false,  /* isInfallible. False in setters. */
   12772             :   false,  /* isMovable.  Not relevant for setters. */
   12773             :   false, /* isEliminatable.  Not relevant for setters. */
   12774             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12775             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12776             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12777             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12778             : };
   12779             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12780             : static_assert(0 < 1, "There is no slot for us");
   12781             : 
   12782             : static bool
   12783           0 : uniform3f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12784             : {
   12785           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   12786           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform3f");
   12787             :   }
   12788             :   mozilla::WebGLUniformLocation* arg0;
   12789           0 :   if (args[0].isObject()) {
   12790             :     {
   12791           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
   12792           0 :       if (NS_FAILED(rv)) {
   12793           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform3f", "WebGLUniformLocation");
   12794           0 :         return false;
   12795             :       }
   12796             :     }
   12797           0 :   } else if (args[0].isNullOrUndefined()) {
   12798           0 :     arg0 = nullptr;
   12799             :   } else {
   12800           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform3f");
   12801           0 :     return false;
   12802             :   }
   12803             :   float arg1;
   12804           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   12805           0 :     return false;
   12806             :   }
   12807             :   float arg2;
   12808           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
   12809           0 :     return false;
   12810             :   }
   12811             :   float arg3;
   12812           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[3], &arg3)) {
   12813           0 :     return false;
   12814             :   }
   12815           0 :   self->Uniform3f(Constify(arg0), arg1, arg2, arg3);
   12816           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12817           0 :   args.rval().setUndefined();
   12818           0 :   return true;
   12819             : }
   12820             : 
   12821             : static const JSJitInfo uniform3f_methodinfo = {
   12822             :   { (JSJitGetterOp)uniform3f },
   12823             :   { prototypes::id::WebGL2RenderingContext },
   12824             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12825             :   JSJitInfo::Method,
   12826             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12827             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12828             :   false,  /* isInfallible. False in setters. */
   12829             :   false,  /* isMovable.  Not relevant for setters. */
   12830             :   false, /* isEliminatable.  Not relevant for setters. */
   12831             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12832             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12833             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12834             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12835             : };
   12836             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12837             : static_assert(0 < 1, "There is no slot for us");
   12838             : 
   12839             : static bool
   12840           0 : uniform4f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12841             : {
   12842           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
   12843           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform4f");
   12844             :   }
   12845             :   mozilla::WebGLUniformLocation* arg0;
   12846           0 :   if (args[0].isObject()) {
   12847             :     {
   12848           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
   12849           0 :       if (NS_FAILED(rv)) {
   12850           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform4f", "WebGLUniformLocation");
   12851           0 :         return false;
   12852             :       }
   12853             :     }
   12854           0 :   } else if (args[0].isNullOrUndefined()) {
   12855           0 :     arg0 = nullptr;
   12856             :   } else {
   12857           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform4f");
   12858           0 :     return false;
   12859             :   }
   12860             :   float arg1;
   12861           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   12862           0 :     return false;
   12863             :   }
   12864             :   float arg2;
   12865           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
   12866           0 :     return false;
   12867             :   }
   12868             :   float arg3;
   12869           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[3], &arg3)) {
   12870           0 :     return false;
   12871             :   }
   12872             :   float arg4;
   12873           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[4], &arg4)) {
   12874           0 :     return false;
   12875             :   }
   12876           0 :   self->Uniform4f(Constify(arg0), arg1, arg2, arg3, arg4);
   12877           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12878           0 :   args.rval().setUndefined();
   12879           0 :   return true;
   12880             : }
   12881             : 
   12882             : static const JSJitInfo uniform4f_methodinfo = {
   12883             :   { (JSJitGetterOp)uniform4f },
   12884             :   { prototypes::id::WebGL2RenderingContext },
   12885             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12886             :   JSJitInfo::Method,
   12887             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12888             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12889             :   false,  /* isInfallible. False in setters. */
   12890             :   false,  /* isMovable.  Not relevant for setters. */
   12891             :   false, /* isEliminatable.  Not relevant for setters. */
   12892             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12893             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12894             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12895             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12896             : };
   12897             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12898             : static_assert(0 < 1, "There is no slot for us");
   12899             : 
   12900             : static bool
   12901           0 : uniform1i(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12902             : {
   12903           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   12904           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform1i");
   12905             :   }
   12906             :   mozilla::WebGLUniformLocation* arg0;
   12907           0 :   if (args[0].isObject()) {
   12908             :     {
   12909           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
   12910           0 :       if (NS_FAILED(rv)) {
   12911           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform1i", "WebGLUniformLocation");
   12912           0 :         return false;
   12913             :       }
   12914             :     }
   12915           0 :   } else if (args[0].isNullOrUndefined()) {
   12916           0 :     arg0 = nullptr;
   12917             :   } else {
   12918           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform1i");
   12919           0 :     return false;
   12920             :   }
   12921             :   int32_t arg1;
   12922           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   12923           0 :     return false;
   12924             :   }
   12925           0 :   self->Uniform1i(Constify(arg0), arg1);
   12926           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12927           0 :   args.rval().setUndefined();
   12928           0 :   return true;
   12929             : }
   12930             : 
   12931             : static const JSJitInfo uniform1i_methodinfo = {
   12932             :   { (JSJitGetterOp)uniform1i },
   12933             :   { prototypes::id::WebGL2RenderingContext },
   12934             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12935             :   JSJitInfo::Method,
   12936             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12937             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12938             :   false,  /* isInfallible. False in setters. */
   12939             :   false,  /* isMovable.  Not relevant for setters. */
   12940             :   false, /* isEliminatable.  Not relevant for setters. */
   12941             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12942             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12943             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12944             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12945             : };
   12946             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   12947             : static_assert(0 < 1, "There is no slot for us");
   12948             : 
   12949             : static bool
   12950           0 : uniform2i(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   12951             : {
   12952           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   12953           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform2i");
   12954             :   }
   12955             :   mozilla::WebGLUniformLocation* arg0;
   12956           0 :   if (args[0].isObject()) {
   12957             :     {
   12958           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
   12959           0 :       if (NS_FAILED(rv)) {
   12960           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform2i", "WebGLUniformLocation");
   12961           0 :         return false;
   12962             :       }
   12963             :     }
   12964           0 :   } else if (args[0].isNullOrUndefined()) {
   12965           0 :     arg0 = nullptr;
   12966             :   } else {
   12967           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform2i");
   12968           0 :     return false;
   12969             :   }
   12970             :   int32_t arg1;
   12971           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   12972           0 :     return false;
   12973             :   }
   12974             :   int32_t arg2;
   12975           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   12976           0 :     return false;
   12977             :   }
   12978           0 :   self->Uniform2i(Constify(arg0), arg1, arg2);
   12979           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   12980           0 :   args.rval().setUndefined();
   12981           0 :   return true;
   12982             : }
   12983             : 
   12984             : static const JSJitInfo uniform2i_methodinfo = {
   12985             :   { (JSJitGetterOp)uniform2i },
   12986             :   { prototypes::id::WebGL2RenderingContext },
   12987             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   12988             :   JSJitInfo::Method,
   12989             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   12990             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   12991             :   false,  /* isInfallible. False in setters. */
   12992             :   false,  /* isMovable.  Not relevant for setters. */
   12993             :   false, /* isEliminatable.  Not relevant for setters. */
   12994             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   12995             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   12996             :   false,  /* isTypedMethod.  Only relevant for methods. */
   12997             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   12998             : };
   12999             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13000             : static_assert(0 < 1, "There is no slot for us");
   13001             : 
   13002             : static bool
   13003           0 : uniform3i(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13004             : {
   13005           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   13006           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform3i");
   13007             :   }
   13008             :   mozilla::WebGLUniformLocation* arg0;
   13009           0 :   if (args[0].isObject()) {
   13010             :     {
   13011           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
   13012           0 :       if (NS_FAILED(rv)) {
   13013           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform3i", "WebGLUniformLocation");
   13014           0 :         return false;
   13015             :       }
   13016             :     }
   13017           0 :   } else if (args[0].isNullOrUndefined()) {
   13018           0 :     arg0 = nullptr;
   13019             :   } else {
   13020           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform3i");
   13021           0 :     return false;
   13022             :   }
   13023             :   int32_t arg1;
   13024           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   13025           0 :     return false;
   13026             :   }
   13027             :   int32_t arg2;
   13028           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   13029           0 :     return false;
   13030             :   }
   13031             :   int32_t arg3;
   13032           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
   13033           0 :     return false;
   13034             :   }
   13035           0 :   self->Uniform3i(Constify(arg0), arg1, arg2, arg3);
   13036           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13037           0 :   args.rval().setUndefined();
   13038           0 :   return true;
   13039             : }
   13040             : 
   13041             : static const JSJitInfo uniform3i_methodinfo = {
   13042             :   { (JSJitGetterOp)uniform3i },
   13043             :   { prototypes::id::WebGL2RenderingContext },
   13044             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13045             :   JSJitInfo::Method,
   13046             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13047             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13048             :   false,  /* isInfallible. False in setters. */
   13049             :   false,  /* isMovable.  Not relevant for setters. */
   13050             :   false, /* isEliminatable.  Not relevant for setters. */
   13051             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13052             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13053             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13054             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13055             : };
   13056             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13057             : static_assert(0 < 1, "There is no slot for us");
   13058             : 
   13059             : static bool
   13060           0 : uniform4i(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13061             : {
   13062           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
   13063           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.uniform4i");
   13064             :   }
   13065             :   mozilla::WebGLUniformLocation* arg0;
   13066           0 :   if (args[0].isObject()) {
   13067             :     {
   13068           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLUniformLocation, mozilla::WebGLUniformLocation>(args[0], arg0);
   13069           0 :       if (NS_FAILED(rv)) {
   13070           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.uniform4i", "WebGLUniformLocation");
   13071           0 :         return false;
   13072             :       }
   13073             :     }
   13074           0 :   } else if (args[0].isNullOrUndefined()) {
   13075           0 :     arg0 = nullptr;
   13076             :   } else {
   13077           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.uniform4i");
   13078           0 :     return false;
   13079             :   }
   13080             :   int32_t arg1;
   13081           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   13082           0 :     return false;
   13083             :   }
   13084             :   int32_t arg2;
   13085           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   13086           0 :     return false;
   13087             :   }
   13088             :   int32_t arg3;
   13089           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
   13090           0 :     return false;
   13091             :   }
   13092             :   int32_t arg4;
   13093           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
   13094           0 :     return false;
   13095             :   }
   13096           0 :   self->Uniform4i(Constify(arg0), arg1, arg2, arg3, arg4);
   13097           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13098           0 :   args.rval().setUndefined();
   13099           0 :   return true;
   13100             : }
   13101             : 
   13102             : static const JSJitInfo uniform4i_methodinfo = {
   13103             :   { (JSJitGetterOp)uniform4i },
   13104             :   { prototypes::id::WebGL2RenderingContext },
   13105             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13106             :   JSJitInfo::Method,
   13107             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13108             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13109             :   false,  /* isInfallible. False in setters. */
   13110             :   false,  /* isMovable.  Not relevant for setters. */
   13111             :   false, /* isEliminatable.  Not relevant for setters. */
   13112             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13113             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13114             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13115             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13116             : };
   13117             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13118             : static_assert(0 < 1, "There is no slot for us");
   13119             : 
   13120             : static bool
   13121           0 : useProgram(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13122             : {
   13123           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   13124           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.useProgram");
   13125             :   }
   13126             :   mozilla::WebGLProgram* arg0;
   13127           0 :   if (args[0].isObject()) {
   13128             :     {
   13129           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   13130           0 :       if (NS_FAILED(rv)) {
   13131           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.useProgram", "WebGLProgram");
   13132           0 :         return false;
   13133             :       }
   13134             :     }
   13135           0 :   } else if (args[0].isNullOrUndefined()) {
   13136           0 :     arg0 = nullptr;
   13137             :   } else {
   13138           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.useProgram");
   13139           0 :     return false;
   13140             :   }
   13141           0 :   self->UseProgram(Constify(arg0));
   13142           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13143           0 :   args.rval().setUndefined();
   13144           0 :   return true;
   13145             : }
   13146             : 
   13147             : static const JSJitInfo useProgram_methodinfo = {
   13148             :   { (JSJitGetterOp)useProgram },
   13149             :   { prototypes::id::WebGL2RenderingContext },
   13150             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13151             :   JSJitInfo::Method,
   13152             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13153             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13154             :   false,  /* isInfallible. False in setters. */
   13155             :   false,  /* isMovable.  Not relevant for setters. */
   13156             :   false, /* isEliminatable.  Not relevant for setters. */
   13157             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13158             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13159             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13160             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13161             : };
   13162             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13163             : static_assert(0 < 1, "There is no slot for us");
   13164             : 
   13165             : static bool
   13166           0 : validateProgram(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13167             : {
   13168           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
   13169           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.validateProgram");
   13170             :   }
   13171           0 :   NonNull<mozilla::WebGLProgram> arg0;
   13172           0 :   if (args[0].isObject()) {
   13173             :     {
   13174           0 :       nsresult rv = UnwrapObject<prototypes::id::WebGLProgram, mozilla::WebGLProgram>(args[0], arg0);
   13175           0 :       if (NS_FAILED(rv)) {
   13176           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebGL2RenderingContext.validateProgram", "WebGLProgram");
   13177           0 :         return false;
   13178             :       }
   13179             :     }
   13180             :   } else {
   13181           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebGL2RenderingContext.validateProgram");
   13182           0 :     return false;
   13183             :   }
   13184           0 :   self->ValidateProgram(NonNullHelper(arg0));
   13185           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13186           0 :   args.rval().setUndefined();
   13187           0 :   return true;
   13188             : }
   13189             : 
   13190             : static const JSJitInfo validateProgram_methodinfo = {
   13191             :   { (JSJitGetterOp)validateProgram },
   13192             :   { prototypes::id::WebGL2RenderingContext },
   13193             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13194             :   JSJitInfo::Method,
   13195             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13196             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13197             :   false,  /* isInfallible. False in setters. */
   13198             :   false,  /* isMovable.  Not relevant for setters. */
   13199             :   false, /* isEliminatable.  Not relevant for setters. */
   13200             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13201             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13202             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13203             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13204             : };
   13205             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13206             : static_assert(0 < 1, "There is no slot for us");
   13207             : 
   13208             : static bool
   13209           0 : vertexAttrib1f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13210             : {
   13211           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   13212           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttrib1f");
   13213             :   }
   13214             :   uint32_t arg0;
   13215           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13216           0 :     return false;
   13217             :   }
   13218             :   float arg1;
   13219           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   13220           0 :     return false;
   13221             :   }
   13222           0 :   self->VertexAttrib1f(arg0, arg1);
   13223           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13224           0 :   args.rval().setUndefined();
   13225           0 :   return true;
   13226             : }
   13227             : 
   13228             : static const JSJitInfo vertexAttrib1f_methodinfo = {
   13229             :   { (JSJitGetterOp)vertexAttrib1f },
   13230             :   { prototypes::id::WebGL2RenderingContext },
   13231             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13232             :   JSJitInfo::Method,
   13233             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13234             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13235             :   false,  /* isInfallible. False in setters. */
   13236             :   false,  /* isMovable.  Not relevant for setters. */
   13237             :   false, /* isEliminatable.  Not relevant for setters. */
   13238             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13239             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13240             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13241             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13242             : };
   13243             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13244             : static_assert(0 < 1, "There is no slot for us");
   13245             : 
   13246             : static bool
   13247           0 : vertexAttrib1fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13248             : {
   13249           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   13250           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttrib1fv");
   13251             :   }
   13252             :   uint32_t arg0;
   13253           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13254           0 :     return false;
   13255             :   }
   13256           0 :   Float32ArrayOrUnrestrictedFloatSequence arg1;
   13257           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg1_holder(arg1);
   13258             :   {
   13259           0 :     bool done = false, failed = false, tryNext;
   13260           0 :     if (args[1].isObject()) {
   13261           0 :       done = (failed = !arg1_holder.TrySetToFloat32Array(cx, args[1], tryNext, false)) || !tryNext;
   13262             : 
   13263           0 :       if (!done) {
   13264           0 :         done = (failed = !arg1_holder.TrySetToUnrestrictedFloatSequence(cx, args[1], tryNext, false)) || !tryNext;
   13265             :       }
   13266             :     }
   13267           0 :     if (failed) {
   13268           0 :       return false;
   13269             :     }
   13270           0 :     if (!done) {
   13271           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.vertexAttrib1fv", "Float32Array, UnrestrictedFloatSequence");
   13272           0 :       return false;
   13273             :     }
   13274             :   }
   13275           0 :   self->VertexAttrib1fv(arg0, Constify(arg1));
   13276           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13277           0 :   args.rval().setUndefined();
   13278           0 :   return true;
   13279             : }
   13280             : 
   13281             : static const JSJitInfo vertexAttrib1fv_methodinfo = {
   13282             :   { (JSJitGetterOp)vertexAttrib1fv },
   13283             :   { prototypes::id::WebGL2RenderingContext },
   13284             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13285             :   JSJitInfo::Method,
   13286             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13287             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13288             :   false,  /* isInfallible. False in setters. */
   13289             :   false,  /* isMovable.  Not relevant for setters. */
   13290             :   false, /* isEliminatable.  Not relevant for setters. */
   13291             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13292             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13293             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13294             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13295             : };
   13296             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13297             : static_assert(0 < 1, "There is no slot for us");
   13298             : 
   13299             : static bool
   13300           0 : vertexAttrib2f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13301             : {
   13302           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
   13303           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttrib2f");
   13304             :   }
   13305             :   uint32_t arg0;
   13306           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13307           0 :     return false;
   13308             :   }
   13309             :   float arg1;
   13310           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   13311           0 :     return false;
   13312             :   }
   13313             :   float arg2;
   13314           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
   13315           0 :     return false;
   13316             :   }
   13317           0 :   self->VertexAttrib2f(arg0, arg1, arg2);
   13318           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13319           0 :   args.rval().setUndefined();
   13320           0 :   return true;
   13321             : }
   13322             : 
   13323             : static const JSJitInfo vertexAttrib2f_methodinfo = {
   13324             :   { (JSJitGetterOp)vertexAttrib2f },
   13325             :   { prototypes::id::WebGL2RenderingContext },
   13326             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13327             :   JSJitInfo::Method,
   13328             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13329             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13330             :   false,  /* isInfallible. False in setters. */
   13331             :   false,  /* isMovable.  Not relevant for setters. */
   13332             :   false, /* isEliminatable.  Not relevant for setters. */
   13333             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13334             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13335             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13336             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13337             : };
   13338             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13339             : static_assert(0 < 1, "There is no slot for us");
   13340             : 
   13341             : static bool
   13342           0 : vertexAttrib2fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13343             : {
   13344           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   13345           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttrib2fv");
   13346             :   }
   13347             :   uint32_t arg0;
   13348           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13349           0 :     return false;
   13350             :   }
   13351           0 :   Float32ArrayOrUnrestrictedFloatSequence arg1;
   13352           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg1_holder(arg1);
   13353             :   {
   13354           0 :     bool done = false, failed = false, tryNext;
   13355           0 :     if (args[1].isObject()) {
   13356           0 :       done = (failed = !arg1_holder.TrySetToFloat32Array(cx, args[1], tryNext, false)) || !tryNext;
   13357             : 
   13358           0 :       if (!done) {
   13359           0 :         done = (failed = !arg1_holder.TrySetToUnrestrictedFloatSequence(cx, args[1], tryNext, false)) || !tryNext;
   13360             :       }
   13361             :     }
   13362           0 :     if (failed) {
   13363           0 :       return false;
   13364             :     }
   13365           0 :     if (!done) {
   13366           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.vertexAttrib2fv", "Float32Array, UnrestrictedFloatSequence");
   13367           0 :       return false;
   13368             :     }
   13369             :   }
   13370           0 :   self->VertexAttrib2fv(arg0, Constify(arg1));
   13371           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13372           0 :   args.rval().setUndefined();
   13373           0 :   return true;
   13374             : }
   13375             : 
   13376             : static const JSJitInfo vertexAttrib2fv_methodinfo = {
   13377             :   { (JSJitGetterOp)vertexAttrib2fv },
   13378             :   { prototypes::id::WebGL2RenderingContext },
   13379             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13380             :   JSJitInfo::Method,
   13381             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13382             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13383             :   false,  /* isInfallible. False in setters. */
   13384             :   false,  /* isMovable.  Not relevant for setters. */
   13385             :   false, /* isEliminatable.  Not relevant for setters. */
   13386             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13387             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13388             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13389             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13390             : };
   13391             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13392             : static_assert(0 < 1, "There is no slot for us");
   13393             : 
   13394             : static bool
   13395           0 : vertexAttrib3f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13396             : {
   13397           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   13398           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttrib3f");
   13399             :   }
   13400             :   uint32_t arg0;
   13401           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13402           0 :     return false;
   13403             :   }
   13404             :   float arg1;
   13405           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   13406           0 :     return false;
   13407             :   }
   13408             :   float arg2;
   13409           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
   13410           0 :     return false;
   13411             :   }
   13412             :   float arg3;
   13413           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[3], &arg3)) {
   13414           0 :     return false;
   13415             :   }
   13416           0 :   self->VertexAttrib3f(arg0, arg1, arg2, arg3);
   13417           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13418           0 :   args.rval().setUndefined();
   13419           0 :   return true;
   13420             : }
   13421             : 
   13422             : static const JSJitInfo vertexAttrib3f_methodinfo = {
   13423             :   { (JSJitGetterOp)vertexAttrib3f },
   13424             :   { prototypes::id::WebGL2RenderingContext },
   13425             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13426             :   JSJitInfo::Method,
   13427             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13428             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13429             :   false,  /* isInfallible. False in setters. */
   13430             :   false,  /* isMovable.  Not relevant for setters. */
   13431             :   false, /* isEliminatable.  Not relevant for setters. */
   13432             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13433             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13434             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13435             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13436             : };
   13437             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13438             : static_assert(0 < 1, "There is no slot for us");
   13439             : 
   13440             : static bool
   13441           0 : vertexAttrib3fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13442             : {
   13443           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   13444           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttrib3fv");
   13445             :   }
   13446             :   uint32_t arg0;
   13447           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13448           0 :     return false;
   13449             :   }
   13450           0 :   Float32ArrayOrUnrestrictedFloatSequence arg1;
   13451           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg1_holder(arg1);
   13452             :   {
   13453           0 :     bool done = false, failed = false, tryNext;
   13454           0 :     if (args[1].isObject()) {
   13455           0 :       done = (failed = !arg1_holder.TrySetToFloat32Array(cx, args[1], tryNext, false)) || !tryNext;
   13456             : 
   13457           0 :       if (!done) {
   13458           0 :         done = (failed = !arg1_holder.TrySetToUnrestrictedFloatSequence(cx, args[1], tryNext, false)) || !tryNext;
   13459             :       }
   13460             :     }
   13461           0 :     if (failed) {
   13462           0 :       return false;
   13463             :     }
   13464           0 :     if (!done) {
   13465           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.vertexAttrib3fv", "Float32Array, UnrestrictedFloatSequence");
   13466           0 :       return false;
   13467             :     }
   13468             :   }
   13469           0 :   self->VertexAttrib3fv(arg0, Constify(arg1));
   13470           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13471           0 :   args.rval().setUndefined();
   13472           0 :   return true;
   13473             : }
   13474             : 
   13475             : static const JSJitInfo vertexAttrib3fv_methodinfo = {
   13476             :   { (JSJitGetterOp)vertexAttrib3fv },
   13477             :   { prototypes::id::WebGL2RenderingContext },
   13478             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13479             :   JSJitInfo::Method,
   13480             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13481             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13482             :   false,  /* isInfallible. False in setters. */
   13483             :   false,  /* isMovable.  Not relevant for setters. */
   13484             :   false, /* isEliminatable.  Not relevant for setters. */
   13485             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13486             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13487             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13488             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13489             : };
   13490             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13491             : static_assert(0 < 1, "There is no slot for us");
   13492             : 
   13493             : static bool
   13494           0 : vertexAttrib4f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13495             : {
   13496           0 :   if (MOZ_UNLIKELY(args.length() < 5)) {
   13497           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttrib4f");
   13498             :   }
   13499             :   uint32_t arg0;
   13500           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13501           0 :     return false;
   13502             :   }
   13503             :   float arg1;
   13504           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[1], &arg1)) {
   13505           0 :     return false;
   13506             :   }
   13507             :   float arg2;
   13508           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[2], &arg2)) {
   13509           0 :     return false;
   13510             :   }
   13511             :   float arg3;
   13512           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[3], &arg3)) {
   13513           0 :     return false;
   13514             :   }
   13515             :   float arg4;
   13516           0 :   if (!ValueToPrimitive<float, eDefault>(cx, args[4], &arg4)) {
   13517           0 :     return false;
   13518             :   }
   13519           0 :   self->VertexAttrib4f(arg0, arg1, arg2, arg3, arg4);
   13520           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13521           0 :   args.rval().setUndefined();
   13522           0 :   return true;
   13523             : }
   13524             : 
   13525             : static const JSJitInfo vertexAttrib4f_methodinfo = {
   13526             :   { (JSJitGetterOp)vertexAttrib4f },
   13527             :   { prototypes::id::WebGL2RenderingContext },
   13528             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13529             :   JSJitInfo::Method,
   13530             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13531             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13532             :   false,  /* isInfallible. False in setters. */
   13533             :   false,  /* isMovable.  Not relevant for setters. */
   13534             :   false, /* isEliminatable.  Not relevant for setters. */
   13535             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13536             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13537             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13538             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13539             : };
   13540             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13541             : static_assert(0 < 1, "There is no slot for us");
   13542             : 
   13543             : static bool
   13544           0 : vertexAttrib4fv(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13545             : {
   13546           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
   13547           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttrib4fv");
   13548             :   }
   13549             :   uint32_t arg0;
   13550           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13551           0 :     return false;
   13552             :   }
   13553           0 :   Float32ArrayOrUnrestrictedFloatSequence arg1;
   13554           0 :   Float32ArrayOrUnrestrictedFloatSequenceArgument arg1_holder(arg1);
   13555             :   {
   13556           0 :     bool done = false, failed = false, tryNext;
   13557           0 :     if (args[1].isObject()) {
   13558           0 :       done = (failed = !arg1_holder.TrySetToFloat32Array(cx, args[1], tryNext, false)) || !tryNext;
   13559             : 
   13560           0 :       if (!done) {
   13561           0 :         done = (failed = !arg1_holder.TrySetToUnrestrictedFloatSequence(cx, args[1], tryNext, false)) || !tryNext;
   13562             :       }
   13563             :     }
   13564           0 :     if (failed) {
   13565           0 :       return false;
   13566             :     }
   13567           0 :     if (!done) {
   13568           0 :       ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Argument 2 of WebGL2RenderingContext.vertexAttrib4fv", "Float32Array, UnrestrictedFloatSequence");
   13569           0 :       return false;
   13570             :     }
   13571             :   }
   13572           0 :   self->VertexAttrib4fv(arg0, Constify(arg1));
   13573           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13574           0 :   args.rval().setUndefined();
   13575           0 :   return true;
   13576             : }
   13577             : 
   13578             : static const JSJitInfo vertexAttrib4fv_methodinfo = {
   13579             :   { (JSJitGetterOp)vertexAttrib4fv },
   13580             :   { prototypes::id::WebGL2RenderingContext },
   13581             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13582             :   JSJitInfo::Method,
   13583             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13584             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13585             :   false,  /* isInfallible. False in setters. */
   13586             :   false,  /* isMovable.  Not relevant for setters. */
   13587             :   false, /* isEliminatable.  Not relevant for setters. */
   13588             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13589             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13590             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13591             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13592             : };
   13593             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13594             : static_assert(0 < 1, "There is no slot for us");
   13595             : 
   13596             : static bool
   13597           0 : vertexAttribPointer(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13598             : {
   13599           0 :   if (MOZ_UNLIKELY(args.length() < 6)) {
   13600           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.vertexAttribPointer");
   13601             :   }
   13602             :   uint32_t arg0;
   13603           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
   13604           0 :     return false;
   13605             :   }
   13606             :   int32_t arg1;
   13607           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   13608           0 :     return false;
   13609             :   }
   13610             :   uint32_t arg2;
   13611           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
   13612           0 :     return false;
   13613             :   }
   13614             :   bool arg3;
   13615           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[3], &arg3)) {
   13616           0 :     return false;
   13617             :   }
   13618             :   int32_t arg4;
   13619           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[4], &arg4)) {
   13620           0 :     return false;
   13621             :   }
   13622             :   int64_t arg5;
   13623           0 :   if (!ValueToPrimitive<int64_t, eDefault>(cx, args[5], &arg5)) {
   13624           0 :     return false;
   13625             :   }
   13626           0 :   self->VertexAttribPointer(arg0, arg1, arg2, arg3, arg4, arg5);
   13627           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13628           0 :   args.rval().setUndefined();
   13629           0 :   return true;
   13630             : }
   13631             : 
   13632             : static const JSJitInfo vertexAttribPointer_methodinfo = {
   13633             :   { (JSJitGetterOp)vertexAttribPointer },
   13634             :   { prototypes::id::WebGL2RenderingContext },
   13635             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13636             :   JSJitInfo::Method,
   13637             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13638             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13639             :   false,  /* isInfallible. False in setters. */
   13640             :   false,  /* isMovable.  Not relevant for setters. */
   13641             :   false, /* isEliminatable.  Not relevant for setters. */
   13642             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13643             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13644             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13645             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13646             : };
   13647             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13648             : static_assert(0 < 1, "There is no slot for us");
   13649             : 
   13650             : static bool
   13651           0 : viewport(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::WebGL2Context* self, const JSJitMethodCallArgs& args)
   13652             : {
   13653           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
   13654           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebGL2RenderingContext.viewport");
   13655             :   }
   13656             :   int32_t arg0;
   13657           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
   13658           0 :     return false;
   13659             :   }
   13660             :   int32_t arg1;
   13661           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], &arg1)) {
   13662           0 :     return false;
   13663             :   }
   13664             :   int32_t arg2;
   13665           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[2], &arg2)) {
   13666           0 :     return false;
   13667             :   }
   13668             :   int32_t arg3;
   13669           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[3], &arg3)) {
   13670           0 :     return false;
   13671             :   }
   13672           0 :   self->Viewport(arg0, arg1, arg2, arg3);
   13673           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
   13674           0 :   args.rval().setUndefined();
   13675           0 :   return true;
   13676             : }
   13677             : 
   13678             : static const JSJitInfo viewport_methodinfo = {
   13679             :   { (JSJitGetterOp)viewport },
   13680             :   { prototypes::id::WebGL2RenderingContext },
   13681             :   { PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth },
   13682             :   JSJitInfo::Method,
   13683             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
   13684             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
   13685             :   false,  /* isInfallible. False in setters. */
   13686             :   false,  /* isMovable.  Not relevant for setters. */
   13687             :   false, /* isEliminatable.  Not relevant for setters. */
   13688             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
   13689             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
   13690             :   false,  /* isTypedMethod.  Only relevant for methods. */
   13691             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
   13692             : };
   13693             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
   13694             : static_assert(0 < 1, "There is no slot for us");
   13695             : 
   13696             : static bool
   13697           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
   13698             : {
   13699           0 :   mozilla::WebGL2Context* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGL2Context>(obj);
   13700             :   // We don't want to preserve if we don't have a wrapper, and we
   13701             :   // obviously can't preserve if we're not initialized.
   13702           0 :   if (self && self->GetWrapperPreserveColor()) {
   13703           0 :     PreserveWrapper(self);
   13704             :   }
   13705           0 :   return true;
   13706             : }
   13707             : 
   13708             : static void
   13709           0 : _finalize(js::FreeOp* fop, JSObject* obj)
   13710             : {
   13711           0 :   mozilla::WebGL2Context* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGL2Context>(obj);
   13712           0 :   if (self) {
   13713           0 :     ClearWrapper(self, self, obj);
   13714           0 :     AddForDeferredFinalization<mozilla::WebGL2Context>(self);
   13715             :   }
   13716           0 : }
   13717             : 
   13718             : static void
   13719           0 : _objectMoved(JSObject* obj, const JSObject* old)
   13720             : {
   13721           0 :   mozilla::WebGL2Context* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGL2Context>(obj);
   13722           0 :   if (self) {
   13723           0 :     UpdateWrapper(self, self, obj, old);
   13724             :   }
   13725           0 : }
   13726             : 
   13727             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   13728             : #if defined(__clang__)
   13729             : #pragma clang diagnostic push
   13730             : #pragma clang diagnostic ignored "-Wmissing-braces"
   13731             : #endif
   13732             : static const JSFunctionSpec sMethods_specs[] = {
   13733             :   JS_FNSPEC("bufferData", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bufferData_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13734             :   JS_FNSPEC("bufferSubData", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bufferSubData_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13735             :   JS_FNSPEC("copyBufferSubData", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&copyBufferSubData_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13736             :   JS_FNSPEC("getBufferSubData", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getBufferSubData_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13737             :   JS_FNSPEC("blitFramebuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&blitFramebuffer_methodinfo), 10, JSPROP_ENUMERATE, nullptr),
   13738             :   JS_FNSPEC("framebufferTextureLayer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&framebufferTextureLayer_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13739             :   JS_FNSPEC("invalidateFramebuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&invalidateFramebuffer_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13740             :   JS_FNSPEC("invalidateSubFramebuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&invalidateSubFramebuffer_methodinfo), 6, JSPROP_ENUMERATE, nullptr),
   13741             :   JS_FNSPEC("readBuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&readBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13742             :   JS_FNSPEC("getInternalformatParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getInternalformatParameter_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13743             :   JS_FNSPEC("renderbufferStorageMultisample", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&renderbufferStorageMultisample_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13744             :   JS_FNSPEC("texStorage2D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&texStorage2D_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13745             :   JS_FNSPEC("texStorage3D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&texStorage3D_methodinfo), 6, JSPROP_ENUMERATE, nullptr),
   13746             :   JS_FNSPEC("texImage2D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&texImage2D_methodinfo), 6, JSPROP_ENUMERATE, nullptr),
   13747             :   JS_FNSPEC("texSubImage2D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&texSubImage2D_methodinfo), 7, JSPROP_ENUMERATE, nullptr),
   13748             :   JS_FNSPEC("texImage3D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&texImage3D_methodinfo), 10, JSPROP_ENUMERATE, nullptr),
   13749             :   JS_FNSPEC("texSubImage3D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&texSubImage3D_methodinfo), 11, JSPROP_ENUMERATE, nullptr),
   13750             :   JS_FNSPEC("copyTexSubImage3D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&copyTexSubImage3D_methodinfo), 9, JSPROP_ENUMERATE, nullptr),
   13751             :   JS_FNSPEC("compressedTexImage2D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&compressedTexImage2D_methodinfo), 7, JSPROP_ENUMERATE, nullptr),
   13752             :   JS_FNSPEC("compressedTexImage3D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&compressedTexImage3D_methodinfo), 8, JSPROP_ENUMERATE, nullptr),
   13753             :   JS_FNSPEC("compressedTexSubImage2D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&compressedTexSubImage2D_methodinfo), 8, JSPROP_ENUMERATE, nullptr),
   13754             :   JS_FNSPEC("compressedTexSubImage3D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&compressedTexSubImage3D_methodinfo), 10, JSPROP_ENUMERATE, nullptr),
   13755             :   JS_FNSPEC("getFragDataLocation", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getFragDataLocation_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13756             :   JS_FNSPEC("uniform1ui", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform1ui_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13757             :   JS_FNSPEC("uniform2ui", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform2ui_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13758             :   JS_FNSPEC("uniform3ui", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform3ui_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13759             :   JS_FNSPEC("uniform4ui", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform4ui_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13760             :   JS_FNSPEC("uniform1fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform1fv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13761             :   JS_FNSPEC("uniform2fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform2fv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13762             :   JS_FNSPEC("uniform3fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform3fv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13763             :   JS_FNSPEC("uniform4fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform4fv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13764             :   JS_FNSPEC("uniform1iv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform1iv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13765             :   JS_FNSPEC("uniform2iv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform2iv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13766             :   JS_FNSPEC("uniform3iv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform3iv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13767             :   JS_FNSPEC("uniform4iv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform4iv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13768             :   JS_FNSPEC("uniform1uiv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform1uiv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13769             :   JS_FNSPEC("uniform2uiv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform2uiv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13770             :   JS_FNSPEC("uniform3uiv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform3uiv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13771             :   JS_FNSPEC("uniform4uiv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform4uiv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13772             :   JS_FNSPEC("uniformMatrix2fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix2fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13773             :   JS_FNSPEC("uniformMatrix3x2fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix3x2fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13774             :   JS_FNSPEC("uniformMatrix4x2fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix4x2fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13775             :   JS_FNSPEC("uniformMatrix2x3fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix2x3fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13776             :   JS_FNSPEC("uniformMatrix3fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix3fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13777             :   JS_FNSPEC("uniformMatrix4x3fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix4x3fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13778             :   JS_FNSPEC("uniformMatrix2x4fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix2x4fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13779             :   JS_FNSPEC("uniformMatrix3x4fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix3x4fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13780             :   JS_FNSPEC("uniformMatrix4fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformMatrix4fv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13781             :   JS_FNSPEC("vertexAttribI4i", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttribI4i_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13782             :   JS_FNSPEC("vertexAttribI4iv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttribI4iv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13783             :   JS_FNSPEC("vertexAttribI4ui", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttribI4ui_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13784             :   JS_FNSPEC("vertexAttribI4uiv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttribI4uiv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13785             :   JS_FNSPEC("vertexAttribIPointer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttribIPointer_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13786             :   JS_FNSPEC("vertexAttribDivisor", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttribDivisor_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13787             :   JS_FNSPEC("drawArraysInstanced", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&drawArraysInstanced_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13788             :   JS_FNSPEC("drawElementsInstanced", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&drawElementsInstanced_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13789             :   JS_FNSPEC("drawRangeElements", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&drawRangeElements_methodinfo), 6, JSPROP_ENUMERATE, nullptr),
   13790             :   JS_FNSPEC("readPixels", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&readPixels_methodinfo), 7, JSPROP_ENUMERATE, nullptr),
   13791             :   JS_FNSPEC("drawBuffers", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&drawBuffers_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13792             :   JS_FNSPEC("clearBufferfv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clearBufferfv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13793             :   JS_FNSPEC("clearBufferiv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clearBufferiv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13794             :   JS_FNSPEC("clearBufferuiv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clearBufferuiv_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13795             :   JS_FNSPEC("clearBufferfi", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clearBufferfi_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13796             :   JS_FNSPEC("createQuery", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createQuery_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13797             :   JS_FNSPEC("deleteQuery", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteQuery_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13798             :   JS_FNSPEC("isQuery", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isQuery_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13799             :   JS_FNSPEC("beginQuery", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&beginQuery_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13800             :   JS_FNSPEC("endQuery", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&endQuery_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13801             :   JS_FNSPEC("getQuery", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getQuery_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13802             :   JS_FNSPEC("getQueryParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getQueryParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13803             :   JS_FNSPEC("createSampler", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createSampler_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13804             :   JS_FNSPEC("deleteSampler", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteSampler_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13805             :   JS_FNSPEC("isSampler", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isSampler_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13806             :   JS_FNSPEC("bindSampler", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindSampler_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13807             :   JS_FNSPEC("samplerParameteri", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&samplerParameteri_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13808             :   JS_FNSPEC("samplerParameterf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&samplerParameterf_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13809             :   JS_FNSPEC("getSamplerParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getSamplerParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13810             :   JS_FNSPEC("fenceSync", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&fenceSync_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13811             :   JS_FNSPEC("isSync", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isSync_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13812             :   JS_FNSPEC("deleteSync", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteSync_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13813             :   JS_FNSPEC("clientWaitSync", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clientWaitSync_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13814             :   JS_FNSPEC("waitSync", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&waitSync_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13815             :   JS_FNSPEC("getSyncParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getSyncParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13816             :   JS_FNSPEC("createTransformFeedback", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createTransformFeedback_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13817             :   JS_FNSPEC("deleteTransformFeedback", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteTransformFeedback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13818             :   JS_FNSPEC("isTransformFeedback", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isTransformFeedback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13819             :   JS_FNSPEC("bindTransformFeedback", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindTransformFeedback_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13820             :   JS_FNSPEC("beginTransformFeedback", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&beginTransformFeedback_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13821             :   JS_FNSPEC("endTransformFeedback", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&endTransformFeedback_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13822             :   JS_FNSPEC("transformFeedbackVaryings", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&transformFeedbackVaryings_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13823             :   JS_FNSPEC("getTransformFeedbackVarying", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getTransformFeedbackVarying_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13824             :   JS_FNSPEC("pauseTransformFeedback", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&pauseTransformFeedback_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13825             :   JS_FNSPEC("resumeTransformFeedback", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&resumeTransformFeedback_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13826             :   JS_FNSPEC("bindBufferBase", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindBufferBase_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13827             :   JS_FNSPEC("bindBufferRange", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindBufferRange_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13828             :   JS_FNSPEC("getIndexedParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getIndexedParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13829             :   JS_FNSPEC("getUniformIndices", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getUniformIndices_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13830             :   JS_FNSPEC("getActiveUniforms", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getActiveUniforms_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13831             :   JS_FNSPEC("getUniformBlockIndex", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getUniformBlockIndex_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13832             :   JS_FNSPEC("getActiveUniformBlockParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getActiveUniformBlockParameter_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13833             :   JS_FNSPEC("getActiveUniformBlockName", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getActiveUniformBlockName_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13834             :   JS_FNSPEC("uniformBlockBinding", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniformBlockBinding_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13835             :   JS_FNSPEC("createVertexArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createVertexArray_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13836             :   JS_FNSPEC("deleteVertexArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteVertexArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13837             :   JS_FNSPEC("isVertexArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isVertexArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13838             :   JS_FNSPEC("bindVertexArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindVertexArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13839             :   JS_FNSPEC("getContextAttributes", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getContextAttributes_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13840             :   JS_FNSPEC("isContextLost", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isContextLost_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13841             :   JS_FNSPEC("getSupportedExtensions", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getSupportedExtensions_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13842             :   JS_FNSPEC("getExtension", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getExtension_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13843             :   JS_FNSPEC("activeTexture", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&activeTexture_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13844             :   JS_FNSPEC("attachShader", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&attachShader_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13845             :   JS_FNSPEC("bindAttribLocation", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindAttribLocation_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13846             :   JS_FNSPEC("bindBuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindBuffer_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13847             :   JS_FNSPEC("bindFramebuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindFramebuffer_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13848             :   JS_FNSPEC("bindRenderbuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindRenderbuffer_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13849             :   JS_FNSPEC("bindTexture", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&bindTexture_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13850             :   JS_FNSPEC("blendColor", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&blendColor_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13851             :   JS_FNSPEC("blendEquation", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&blendEquation_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13852             :   JS_FNSPEC("blendEquationSeparate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&blendEquationSeparate_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13853             :   JS_FNSPEC("blendFunc", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&blendFunc_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13854             :   JS_FNSPEC("blendFuncSeparate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&blendFuncSeparate_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13855             :   JS_FNSPEC("checkFramebufferStatus", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&checkFramebufferStatus_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13856             :   JS_FNSPEC("clear", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clear_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13857             :   JS_FNSPEC("clearColor", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clearColor_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13858             :   JS_FNSPEC("clearDepth", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clearDepth_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13859             :   JS_FNSPEC("clearStencil", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&clearStencil_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13860             :   JS_FNSPEC("colorMask", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&colorMask_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13861             :   JS_FNSPEC("compileShader", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&compileShader_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13862             :   JS_FNSPEC("copyTexImage2D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&copyTexImage2D_methodinfo), 8, JSPROP_ENUMERATE, nullptr),
   13863             :   JS_FNSPEC("copyTexSubImage2D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&copyTexSubImage2D_methodinfo), 8, JSPROP_ENUMERATE, nullptr),
   13864             :   JS_FNSPEC("createBuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createBuffer_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13865             :   JS_FNSPEC("createFramebuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createFramebuffer_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13866             :   JS_FNSPEC("createProgram", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createProgram_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13867             :   JS_FNSPEC("createRenderbuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createRenderbuffer_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13868             :   JS_FNSPEC("createShader", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createShader_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13869             :   JS_FNSPEC("createTexture", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&createTexture_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13870             :   JS_FNSPEC("cullFace", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&cullFace_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13871             :   JS_FNSPEC("deleteBuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13872             :   JS_FNSPEC("deleteFramebuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteFramebuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13873             :   JS_FNSPEC("deleteProgram", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteProgram_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13874             :   JS_FNSPEC("deleteRenderbuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteRenderbuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13875             :   JS_FNSPEC("deleteShader", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteShader_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13876             :   JS_FNSPEC("deleteTexture", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&deleteTexture_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13877             :   JS_FNSPEC("depthFunc", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&depthFunc_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13878             :   JS_FNSPEC("depthMask", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&depthMask_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13879             :   JS_FNSPEC("depthRange", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&depthRange_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13880             :   JS_FNSPEC("detachShader", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&detachShader_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13881             :   JS_FNSPEC("disable", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&disable_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13882             :   JS_FNSPEC("disableVertexAttribArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&disableVertexAttribArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13883             :   JS_FNSPEC("drawArrays", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&drawArrays_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13884             :   JS_FNSPEC("drawElements", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&drawElements_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13885             :   JS_FNSPEC("enable", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&enable_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13886             :   JS_FNSPEC("enableVertexAttribArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&enableVertexAttribArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13887             :   JS_FNSPEC("finish", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&finish_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13888             :   JS_FNSPEC("flush", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&flush_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13889             :   JS_FNSPEC("framebufferRenderbuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&framebufferRenderbuffer_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13890             :   JS_FNSPEC("framebufferTexture2D", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&framebufferTexture2D_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13891             :   JS_FNSPEC("frontFace", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&frontFace_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13892             :   JS_FNSPEC("generateMipmap", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&generateMipmap_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13893             :   JS_FNSPEC("getActiveAttrib", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getActiveAttrib_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13894             :   JS_FNSPEC("getActiveUniform", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getActiveUniform_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13895             :   JS_FNSPEC("getAttachedShaders", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getAttachedShaders_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13896             :   JS_FNSPEC("getAttribLocation", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getAttribLocation_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13897             :   JS_FNSPEC("getBufferParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getBufferParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13898             :   JS_FNSPEC("getParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getParameter_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13899             :   JS_FNSPEC("getError", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getError_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
   13900             :   JS_FNSPEC("getFramebufferAttachmentParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getFramebufferAttachmentParameter_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13901             :   JS_FNSPEC("getProgramParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getProgramParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13902             :   JS_FNSPEC("getProgramInfoLog", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getProgramInfoLog_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13903             :   JS_FNSPEC("getRenderbufferParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRenderbufferParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13904             :   JS_FNSPEC("getShaderParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getShaderParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13905             :   JS_FNSPEC("getShaderPrecisionFormat", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getShaderPrecisionFormat_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13906             :   JS_FNSPEC("getShaderInfoLog", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getShaderInfoLog_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13907             :   JS_FNSPEC("getShaderSource", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getShaderSource_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13908             :   JS_FNSPEC("getTexParameter", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getTexParameter_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13909             :   JS_FNSPEC("getUniform", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getUniform_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13910             :   JS_FNSPEC("getUniformLocation", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getUniformLocation_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13911             :   JS_FNSPEC("getVertexAttrib", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getVertexAttrib_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13912             :   JS_FNSPEC("getVertexAttribOffset", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getVertexAttribOffset_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13913             :   JS_FNSPEC("hint", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&hint_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13914             :   JS_FNSPEC("isBuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13915             :   JS_FNSPEC("isEnabled", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isEnabled_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13916             :   JS_FNSPEC("isFramebuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isFramebuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13917             :   JS_FNSPEC("isProgram", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isProgram_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13918             :   JS_FNSPEC("isRenderbuffer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isRenderbuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13919             :   JS_FNSPEC("isShader", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isShader_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13920             :   JS_FNSPEC("isTexture", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&isTexture_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13921             :   JS_FNSPEC("lineWidth", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&lineWidth_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13922             :   JS_FNSPEC("linkProgram", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&linkProgram_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13923             :   JS_FNSPEC("pixelStorei", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&pixelStorei_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13924             :   JS_FNSPEC("polygonOffset", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&polygonOffset_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13925             :   JS_FNSPEC("renderbufferStorage", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&renderbufferStorage_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13926             :   JS_FNSPEC("sampleCoverage", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&sampleCoverage_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13927             :   JS_FNSPEC("scissor", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&scissor_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13928             :   JS_FNSPEC("shaderSource", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&shaderSource_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13929             :   JS_FNSPEC("stencilFunc", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stencilFunc_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13930             :   JS_FNSPEC("stencilFuncSeparate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stencilFuncSeparate_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13931             :   JS_FNSPEC("stencilMask", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stencilMask_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13932             :   JS_FNSPEC("stencilMaskSeparate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stencilMaskSeparate_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13933             :   JS_FNSPEC("stencilOp", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stencilOp_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13934             :   JS_FNSPEC("stencilOpSeparate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stencilOpSeparate_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13935             :   JS_FNSPEC("texParameterf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&texParameterf_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13936             :   JS_FNSPEC("texParameteri", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&texParameteri_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13937             :   JS_FNSPEC("uniform1f", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform1f_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13938             :   JS_FNSPEC("uniform2f", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform2f_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13939             :   JS_FNSPEC("uniform3f", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform3f_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13940             :   JS_FNSPEC("uniform4f", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform4f_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13941             :   JS_FNSPEC("uniform1i", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform1i_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13942             :   JS_FNSPEC("uniform2i", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform2i_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13943             :   JS_FNSPEC("uniform3i", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform3i_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13944             :   JS_FNSPEC("uniform4i", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&uniform4i_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13945             :   JS_FNSPEC("useProgram", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&useProgram_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13946             :   JS_FNSPEC("validateProgram", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&validateProgram_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
   13947             :   JS_FNSPEC("vertexAttrib1f", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttrib1f_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13948             :   JS_FNSPEC("vertexAttrib1fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttrib1fv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13949             :   JS_FNSPEC("vertexAttrib2f", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttrib2f_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
   13950             :   JS_FNSPEC("vertexAttrib2fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttrib2fv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13951             :   JS_FNSPEC("vertexAttrib3f", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttrib3f_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13952             :   JS_FNSPEC("vertexAttrib3fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttrib3fv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13953             :   JS_FNSPEC("vertexAttrib4f", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttrib4f_methodinfo), 5, JSPROP_ENUMERATE, nullptr),
   13954             :   JS_FNSPEC("vertexAttrib4fv", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttrib4fv_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
   13955             :   JS_FNSPEC("vertexAttribPointer", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&vertexAttribPointer_methodinfo), 6, JSPROP_ENUMERATE, nullptr),
   13956             :   JS_FNSPEC("viewport", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&viewport_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
   13957             :   JS_FS_END
   13958             : };
   13959             : #if defined(__clang__)
   13960             : #pragma clang diagnostic pop
   13961             : #endif
   13962             : 
   13963             : 
   13964             : // Can't be const because the pref-enabled boolean needs to be writable
   13965             : static Prefable<const JSFunctionSpec> sMethods[] = {
   13966             :   { nullptr, &sMethods_specs[0] },
   13967             :   { nullptr, nullptr }
   13968             : };
   13969             : 
   13970             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   13971             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   13972             : static_assert(224 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   13973             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   13974             : 
   13975             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   13976             : #if defined(__clang__)
   13977             : #pragma clang diagnostic push
   13978             : #pragma clang diagnostic ignored "-Wmissing-braces"
   13979             : #endif
   13980             : static const JSPropertySpec sAttributes_specs[] = {
   13981             :   { "canvas", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &canvas_getterinfo, nullptr, nullptr },
   13982             :   { "drawingBufferWidth", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &drawingBufferWidth_getterinfo, nullptr, nullptr },
   13983             :   { "drawingBufferHeight", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &drawingBufferHeight_getterinfo, nullptr, nullptr },
   13984             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
   13985             : };
   13986             : #if defined(__clang__)
   13987             : #pragma clang diagnostic pop
   13988             : #endif
   13989             : 
   13990             : 
   13991             : // Can't be const because the pref-enabled boolean needs to be writable
   13992             : static Prefable<const JSPropertySpec> sAttributes[] = {
   13993             :   { nullptr, &sAttributes_specs[0] },
   13994             :   { nullptr, nullptr }
   13995             : };
   13996             : 
   13997             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   13998             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   13999             : static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   14000             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   14001             : 
   14002             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
   14003             : #if defined(__clang__)
   14004             : #pragma clang diagnostic push
   14005             : #pragma clang diagnostic ignored "-Wmissing-braces"
   14006             : #endif
   14007           3 : static const ConstantSpec sConstants_specs[] = {
   14008             :   { "READ_BUFFER", JS::NumberValue(3074U) },
   14009             :   { "UNPACK_ROW_LENGTH", JS::NumberValue(3314U) },
   14010             :   { "UNPACK_SKIP_ROWS", JS::NumberValue(3315U) },
   14011             :   { "UNPACK_SKIP_PIXELS", JS::NumberValue(3316U) },
   14012             :   { "PACK_ROW_LENGTH", JS::NumberValue(3330U) },
   14013             :   { "PACK_SKIP_ROWS", JS::NumberValue(3331U) },
   14014             :   { "PACK_SKIP_PIXELS", JS::NumberValue(3332U) },
   14015             :   { "COLOR", JS::NumberValue(6144U) },
   14016             :   { "DEPTH", JS::NumberValue(6145U) },
   14017             :   { "STENCIL", JS::NumberValue(6146U) },
   14018             :   { "RED", JS::NumberValue(6403U) },
   14019             :   { "RGB8", JS::NumberValue(32849U) },
   14020             :   { "RGBA8", JS::NumberValue(32856U) },
   14021             :   { "RGB10_A2", JS::NumberValue(32857U) },
   14022             :   { "TEXTURE_BINDING_3D", JS::NumberValue(32874U) },
   14023             :   { "UNPACK_SKIP_IMAGES", JS::NumberValue(32877U) },
   14024             :   { "UNPACK_IMAGE_HEIGHT", JS::NumberValue(32878U) },
   14025             :   { "TEXTURE_3D", JS::NumberValue(32879U) },
   14026             :   { "TEXTURE_WRAP_R", JS::NumberValue(32882U) },
   14027             :   { "MAX_3D_TEXTURE_SIZE", JS::NumberValue(32883U) },
   14028             :   { "UNSIGNED_INT_2_10_10_10_REV", JS::NumberValue(33640U) },
   14029             :   { "MAX_ELEMENTS_VERTICES", JS::NumberValue(33000U) },
   14030             :   { "MAX_ELEMENTS_INDICES", JS::NumberValue(33001U) },
   14031             :   { "TEXTURE_MIN_LOD", JS::NumberValue(33082U) },
   14032             :   { "TEXTURE_MAX_LOD", JS::NumberValue(33083U) },
   14033             :   { "TEXTURE_BASE_LEVEL", JS::NumberValue(33084U) },
   14034             :   { "TEXTURE_MAX_LEVEL", JS::NumberValue(33085U) },
   14035             :   { "MIN", JS::NumberValue(32775U) },
   14036             :   { "MAX", JS::NumberValue(32776U) },
   14037             :   { "DEPTH_COMPONENT24", JS::NumberValue(33190U) },
   14038             :   { "MAX_TEXTURE_LOD_BIAS", JS::NumberValue(34045U) },
   14039             :   { "TEXTURE_COMPARE_MODE", JS::NumberValue(34892U) },
   14040             :   { "TEXTURE_COMPARE_FUNC", JS::NumberValue(34893U) },
   14041             :   { "CURRENT_QUERY", JS::NumberValue(34917U) },
   14042             :   { "QUERY_RESULT", JS::NumberValue(34918U) },
   14043             :   { "QUERY_RESULT_AVAILABLE", JS::NumberValue(34919U) },
   14044             :   { "STREAM_READ", JS::NumberValue(35041U) },
   14045             :   { "STREAM_COPY", JS::NumberValue(35042U) },
   14046             :   { "STATIC_READ", JS::NumberValue(35045U) },
   14047             :   { "STATIC_COPY", JS::NumberValue(35046U) },
   14048             :   { "DYNAMIC_READ", JS::NumberValue(35049U) },
   14049             :   { "DYNAMIC_COPY", JS::NumberValue(35050U) },
   14050             :   { "MAX_DRAW_BUFFERS", JS::NumberValue(34852U) },
   14051             :   { "DRAW_BUFFER0", JS::NumberValue(34853U) },
   14052             :   { "DRAW_BUFFER1", JS::NumberValue(34854U) },
   14053             :   { "DRAW_BUFFER2", JS::NumberValue(34855U) },
   14054             :   { "DRAW_BUFFER3", JS::NumberValue(34856U) },
   14055             :   { "DRAW_BUFFER4", JS::NumberValue(34857U) },
   14056             :   { "DRAW_BUFFER5", JS::NumberValue(34858U) },
   14057             :   { "DRAW_BUFFER6", JS::NumberValue(34859U) },
   14058             :   { "DRAW_BUFFER7", JS::NumberValue(34860U) },
   14059             :   { "DRAW_BUFFER8", JS::NumberValue(34861U) },
   14060             :   { "DRAW_BUFFER9", JS::NumberValue(34862U) },
   14061             :   { "DRAW_BUFFER10", JS::NumberValue(34863U) },
   14062             :   { "DRAW_BUFFER11", JS::NumberValue(34864U) },
   14063             :   { "DRAW_BUFFER12", JS::NumberValue(34865U) },
   14064             :   { "DRAW_BUFFER13", JS::NumberValue(34866U) },
   14065             :   { "DRAW_BUFFER14", JS::NumberValue(34867U) },
   14066             :   { "DRAW_BUFFER15", JS::NumberValue(34868U) },
   14067             :   { "MAX_FRAGMENT_UNIFORM_COMPONENTS", JS::NumberValue(35657U) },
   14068             :   { "MAX_VERTEX_UNIFORM_COMPONENTS", JS::NumberValue(35658U) },
   14069             :   { "SAMPLER_3D", JS::NumberValue(35679U) },
   14070             :   { "SAMPLER_2D_SHADOW", JS::NumberValue(35682U) },
   14071             :   { "FRAGMENT_SHADER_DERIVATIVE_HINT", JS::NumberValue(35723U) },
   14072             :   { "PIXEL_PACK_BUFFER", JS::NumberValue(35051U) },
   14073             :   { "PIXEL_UNPACK_BUFFER", JS::NumberValue(35052U) },
   14074             :   { "PIXEL_PACK_BUFFER_BINDING", JS::NumberValue(35053U) },
   14075             :   { "PIXEL_UNPACK_BUFFER_BINDING", JS::NumberValue(35055U) },
   14076             :   { "FLOAT_MAT2x3", JS::NumberValue(35685U) },
   14077             :   { "FLOAT_MAT2x4", JS::NumberValue(35686U) },
   14078             :   { "FLOAT_MAT3x2", JS::NumberValue(35687U) },
   14079             :   { "FLOAT_MAT3x4", JS::NumberValue(35688U) },
   14080             :   { "FLOAT_MAT4x2", JS::NumberValue(35689U) },
   14081             :   { "FLOAT_MAT4x3", JS::NumberValue(35690U) },
   14082             :   { "SRGB", JS::NumberValue(35904U) },
   14083             :   { "SRGB8", JS::NumberValue(35905U) },
   14084             :   { "SRGB8_ALPHA8", JS::NumberValue(35907U) },
   14085             :   { "COMPARE_REF_TO_TEXTURE", JS::NumberValue(34894U) },
   14086             :   { "RGBA32F", JS::NumberValue(34836U) },
   14087             :   { "RGB32F", JS::NumberValue(34837U) },
   14088             :   { "RGBA16F", JS::NumberValue(34842U) },
   14089             :   { "RGB16F", JS::NumberValue(34843U) },
   14090             :   { "VERTEX_ATTRIB_ARRAY_INTEGER", JS::NumberValue(35069U) },
   14091             :   { "MAX_ARRAY_TEXTURE_LAYERS", JS::NumberValue(35071U) },
   14092             :   { "MIN_PROGRAM_TEXEL_OFFSET", JS::NumberValue(35076U) },
   14093             :   { "MAX_PROGRAM_TEXEL_OFFSET", JS::NumberValue(35077U) },
   14094             :   { "MAX_VARYING_COMPONENTS", JS::NumberValue(35659U) },
   14095             :   { "TEXTURE_2D_ARRAY", JS::NumberValue(35866U) },
   14096             :   { "TEXTURE_BINDING_2D_ARRAY", JS::NumberValue(35869U) },
   14097             :   { "R11F_G11F_B10F", JS::NumberValue(35898U) },
   14098             :   { "UNSIGNED_INT_10F_11F_11F_REV", JS::NumberValue(35899U) },
   14099             :   { "RGB9_E5", JS::NumberValue(35901U) },
   14100             :   { "UNSIGNED_INT_5_9_9_9_REV", JS::NumberValue(35902U) },
   14101             :   { "TRANSFORM_FEEDBACK_BUFFER_MODE", JS::NumberValue(35967U) },
   14102             :   { "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS", JS::NumberValue(35968U) },
   14103             :   { "TRANSFORM_FEEDBACK_VARYINGS", JS::NumberValue(35971U) },
   14104             :   { "TRANSFORM_FEEDBACK_BUFFER_START", JS::NumberValue(35972U) },
   14105             :   { "TRANSFORM_FEEDBACK_BUFFER_SIZE", JS::NumberValue(35973U) },
   14106             :   { "TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN", JS::NumberValue(35976U) },
   14107             :   { "RASTERIZER_DISCARD", JS::NumberValue(35977U) },
   14108             :   { "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS", JS::NumberValue(35978U) },
   14109             :   { "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS", JS::NumberValue(35979U) },
   14110             :   { "INTERLEAVED_ATTRIBS", JS::NumberValue(35980U) },
   14111             :   { "SEPARATE_ATTRIBS", JS::NumberValue(35981U) },
   14112             :   { "TRANSFORM_FEEDBACK_BUFFER", JS::NumberValue(35982U) },
   14113             :   { "TRANSFORM_FEEDBACK_BUFFER_BINDING", JS::NumberValue(35983U) },
   14114             :   { "RGBA32UI", JS::NumberValue(36208U) },
   14115             :   { "RGB32UI", JS::NumberValue(36209U) },
   14116             :   { "RGBA16UI", JS::NumberValue(36214U) },
   14117             :   { "RGB16UI", JS::NumberValue(36215U) },
   14118             :   { "RGBA8UI", JS::NumberValue(36220U) },
   14119             :   { "RGB8UI", JS::NumberValue(36221U) },
   14120             :   { "RGBA32I", JS::NumberValue(36226U) },
   14121             :   { "RGB32I", JS::NumberValue(36227U) },
   14122             :   { "RGBA16I", JS::NumberValue(36232U) },
   14123             :   { "RGB16I", JS::NumberValue(36233U) },
   14124             :   { "RGBA8I", JS::NumberValue(36238U) },
   14125             :   { "RGB8I", JS::NumberValue(36239U) },
   14126             :   { "RED_INTEGER", JS::NumberValue(36244U) },
   14127             :   { "RGB_INTEGER", JS::NumberValue(36248U) },
   14128             :   { "RGBA_INTEGER", JS::NumberValue(36249U) },
   14129             :   { "SAMPLER_2D_ARRAY", JS::NumberValue(36289U) },
   14130             :   { "SAMPLER_2D_ARRAY_SHADOW", JS::NumberValue(36292U) },
   14131             :   { "SAMPLER_CUBE_SHADOW", JS::NumberValue(36293U) },
   14132             :   { "UNSIGNED_INT_VEC2", JS::NumberValue(36294U) },
   14133             :   { "UNSIGNED_INT_VEC3", JS::NumberValue(36295U) },
   14134             :   { "UNSIGNED_INT_VEC4", JS::NumberValue(36296U) },
   14135             :   { "INT_SAMPLER_2D", JS::NumberValue(36298U) },
   14136             :   { "INT_SAMPLER_3D", JS::NumberValue(36299U) },
   14137             :   { "INT_SAMPLER_CUBE", JS::NumberValue(36300U) },
   14138             :   { "INT_SAMPLER_2D_ARRAY", JS::NumberValue(36303U) },
   14139             :   { "UNSIGNED_INT_SAMPLER_2D", JS::NumberValue(36306U) },
   14140             :   { "UNSIGNED_INT_SAMPLER_3D", JS::NumberValue(36307U) },
   14141             :   { "UNSIGNED_INT_SAMPLER_CUBE", JS::NumberValue(36308U) },
   14142             :   { "UNSIGNED_INT_SAMPLER_2D_ARRAY", JS::NumberValue(36311U) },
   14143             :   { "DEPTH_COMPONENT32F", JS::NumberValue(36012U) },
   14144             :   { "DEPTH32F_STENCIL8", JS::NumberValue(36013U) },
   14145             :   { "FLOAT_32_UNSIGNED_INT_24_8_REV", JS::NumberValue(36269U) },
   14146             :   { "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING", JS::NumberValue(33296U) },
   14147             :   { "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE", JS::NumberValue(33297U) },
   14148             :   { "FRAMEBUFFER_ATTACHMENT_RED_SIZE", JS::NumberValue(33298U) },
   14149             :   { "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE", JS::NumberValue(33299U) },
   14150             :   { "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE", JS::NumberValue(33300U) },
   14151             :   { "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE", JS::NumberValue(33301U) },
   14152             :   { "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE", JS::NumberValue(33302U) },
   14153             :   { "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE", JS::NumberValue(33303U) },
   14154             :   { "FRAMEBUFFER_DEFAULT", JS::NumberValue(33304U) },
   14155             :   { "UNSIGNED_INT_24_8", JS::NumberValue(34042U) },
   14156             :   { "DEPTH24_STENCIL8", JS::NumberValue(35056U) },
   14157             :   { "UNSIGNED_NORMALIZED", JS::NumberValue(35863U) },
   14158             :   { "DRAW_FRAMEBUFFER_BINDING", JS::NumberValue(36006U) },
   14159             :   { "READ_FRAMEBUFFER", JS::NumberValue(36008U) },
   14160             :   { "DRAW_FRAMEBUFFER", JS::NumberValue(36009U) },
   14161             :   { "READ_FRAMEBUFFER_BINDING", JS::NumberValue(36010U) },
   14162             :   { "RENDERBUFFER_SAMPLES", JS::NumberValue(36011U) },
   14163             :   { "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER", JS::NumberValue(36052U) },
   14164             :   { "MAX_COLOR_ATTACHMENTS", JS::NumberValue(36063U) },
   14165             :   { "COLOR_ATTACHMENT1", JS::NumberValue(36065U) },
   14166             :   { "COLOR_ATTACHMENT2", JS::NumberValue(36066U) },
   14167             :   { "COLOR_ATTACHMENT3", JS::NumberValue(36067U) },
   14168             :   { "COLOR_ATTACHMENT4", JS::NumberValue(36068U) },
   14169             :   { "COLOR_ATTACHMENT5", JS::NumberValue(36069U) },
   14170             :   { "COLOR_ATTACHMENT6", JS::NumberValue(36070U) },
   14171             :   { "COLOR_ATTACHMENT7", JS::NumberValue(36071U) },
   14172             :   { "COLOR_ATTACHMENT8", JS::NumberValue(36072U) },
   14173             :   { "COLOR_ATTACHMENT9", JS::NumberValue(36073U) },
   14174             :   { "COLOR_ATTACHMENT10", JS::NumberValue(36074U) },
   14175             :   { "COLOR_ATTACHMENT11", JS::NumberValue(36075U) },
   14176             :   { "COLOR_ATTACHMENT12", JS::NumberValue(36076U) },
   14177             :   { "COLOR_ATTACHMENT13", JS::NumberValue(36077U) },
   14178             :   { "COLOR_ATTACHMENT14", JS::NumberValue(36078U) },
   14179             :   { "COLOR_ATTACHMENT15", JS::NumberValue(36079U) },
   14180             :   { "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE", JS::NumberValue(36182U) },
   14181             :   { "MAX_SAMPLES", JS::NumberValue(36183U) },
   14182             :   { "HALF_FLOAT", JS::NumberValue(5131U) },
   14183             :   { "RG", JS::NumberValue(33319U) },
   14184             :   { "RG_INTEGER", JS::NumberValue(33320U) },
   14185             :   { "R8", JS::NumberValue(33321U) },
   14186             :   { "RG8", JS::NumberValue(33323U) },
   14187             :   { "R16F", JS::NumberValue(33325U) },
   14188             :   { "R32F", JS::NumberValue(33326U) },
   14189             :   { "RG16F", JS::NumberValue(33327U) },
   14190             :   { "RG32F", JS::NumberValue(33328U) },
   14191             :   { "R8I", JS::NumberValue(33329U) },
   14192             :   { "R8UI", JS::NumberValue(33330U) },
   14193             :   { "R16I", JS::NumberValue(33331U) },
   14194             :   { "R16UI", JS::NumberValue(33332U) },
   14195             :   { "R32I", JS::NumberValue(33333U) },
   14196             :   { "R32UI", JS::NumberValue(33334U) },
   14197             :   { "RG8I", JS::NumberValue(33335U) },
   14198             :   { "RG8UI", JS::NumberValue(33336U) },
   14199             :   { "RG16I", JS::NumberValue(33337U) },
   14200             :   { "RG16UI", JS::NumberValue(33338U) },
   14201             :   { "RG32I", JS::NumberValue(33339U) },
   14202             :   { "RG32UI", JS::NumberValue(33340U) },
   14203             :   { "VERTEX_ARRAY_BINDING", JS::NumberValue(34229U) },
   14204             :   { "R8_SNORM", JS::NumberValue(36756U) },
   14205             :   { "RG8_SNORM", JS::NumberValue(36757U) },
   14206             :   { "RGB8_SNORM", JS::NumberValue(36758U) },
   14207             :   { "RGBA8_SNORM", JS::NumberValue(36759U) },
   14208             :   { "SIGNED_NORMALIZED", JS::NumberValue(36764U) },
   14209             :   { "COPY_READ_BUFFER", JS::NumberValue(36662U) },
   14210             :   { "COPY_WRITE_BUFFER", JS::NumberValue(36663U) },
   14211             :   { "COPY_READ_BUFFER_BINDING", JS::NumberValue(36662U) },
   14212             :   { "COPY_WRITE_BUFFER_BINDING", JS::NumberValue(36663U) },
   14213             :   { "UNIFORM_BUFFER", JS::NumberValue(35345U) },
   14214             :   { "UNIFORM_BUFFER_BINDING", JS::NumberValue(35368U) },
   14215             :   { "UNIFORM_BUFFER_START", JS::NumberValue(35369U) },
   14216             :   { "UNIFORM_BUFFER_SIZE", JS::NumberValue(35370U) },
   14217             :   { "MAX_VERTEX_UNIFORM_BLOCKS", JS::NumberValue(35371U) },
   14218             :   { "MAX_FRAGMENT_UNIFORM_BLOCKS", JS::NumberValue(35373U) },
   14219             :   { "MAX_COMBINED_UNIFORM_BLOCKS", JS::NumberValue(35374U) },
   14220             :   { "MAX_UNIFORM_BUFFER_BINDINGS", JS::NumberValue(35375U) },
   14221             :   { "MAX_UNIFORM_BLOCK_SIZE", JS::NumberValue(35376U) },
   14222             :   { "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS", JS::NumberValue(35377U) },
   14223             :   { "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS", JS::NumberValue(35379U) },
   14224             :   { "UNIFORM_BUFFER_OFFSET_ALIGNMENT", JS::NumberValue(35380U) },
   14225             :   { "ACTIVE_UNIFORM_BLOCKS", JS::NumberValue(35382U) },
   14226             :   { "UNIFORM_TYPE", JS::NumberValue(35383U) },
   14227             :   { "UNIFORM_SIZE", JS::NumberValue(35384U) },
   14228             :   { "UNIFORM_BLOCK_INDEX", JS::NumberValue(35386U) },
   14229             :   { "UNIFORM_OFFSET", JS::NumberValue(35387U) },
   14230             :   { "UNIFORM_ARRAY_STRIDE", JS::NumberValue(35388U) },
   14231             :   { "UNIFORM_MATRIX_STRIDE", JS::NumberValue(35389U) },
   14232             :   { "UNIFORM_IS_ROW_MAJOR", JS::NumberValue(35390U) },
   14233             :   { "UNIFORM_BLOCK_BINDING", JS::NumberValue(35391U) },
   14234             :   { "UNIFORM_BLOCK_DATA_SIZE", JS::NumberValue(35392U) },
   14235             :   { "UNIFORM_BLOCK_ACTIVE_UNIFORMS", JS::NumberValue(35394U) },
   14236             :   { "UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES", JS::NumberValue(35395U) },
   14237             :   { "UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER", JS::NumberValue(35396U) },
   14238             :   { "UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER", JS::NumberValue(35398U) },
   14239             :   { "INVALID_INDEX", JS::NumberValue(4294967295U) },
   14240             :   { "MAX_VERTEX_OUTPUT_COMPONENTS", JS::NumberValue(37154U) },
   14241             :   { "MAX_FRAGMENT_INPUT_COMPONENTS", JS::NumberValue(37157U) },
   14242             :   { "MAX_SERVER_WAIT_TIMEOUT", JS::NumberValue(37137U) },
   14243             :   { "OBJECT_TYPE", JS::NumberValue(37138U) },
   14244             :   { "SYNC_CONDITION", JS::NumberValue(37139U) },
   14245             :   { "SYNC_STATUS", JS::NumberValue(37140U) },
   14246             :   { "SYNC_FLAGS", JS::NumberValue(37141U) },
   14247             :   { "SYNC_FENCE", JS::NumberValue(37142U) },
   14248             :   { "SYNC_GPU_COMMANDS_COMPLETE", JS::NumberValue(37143U) },
   14249             :   { "UNSIGNALED", JS::NumberValue(37144U) },
   14250             :   { "SIGNALED", JS::NumberValue(37145U) },
   14251             :   { "ALREADY_SIGNALED", JS::NumberValue(37146U) },
   14252             :   { "TIMEOUT_EXPIRED", JS::NumberValue(37147U) },
   14253             :   { "CONDITION_SATISFIED", JS::NumberValue(37148U) },
   14254             :   { "WAIT_FAILED", JS::NumberValue(37149U) },
   14255             :   { "SYNC_FLUSH_COMMANDS_BIT", JS::NumberValue(1U) },
   14256             :   { "VERTEX_ATTRIB_ARRAY_DIVISOR", JS::NumberValue(35070U) },
   14257             :   { "ANY_SAMPLES_PASSED", JS::NumberValue(35887U) },
   14258             :   { "ANY_SAMPLES_PASSED_CONSERVATIVE", JS::NumberValue(36202U) },
   14259             :   { "SAMPLER_BINDING", JS::NumberValue(35097U) },
   14260             :   { "RGB10_A2UI", JS::NumberValue(36975U) },
   14261             :   { "INT_2_10_10_10_REV", JS::NumberValue(36255U) },
   14262             :   { "TRANSFORM_FEEDBACK", JS::NumberValue(36386U) },
   14263             :   { "TRANSFORM_FEEDBACK_PAUSED", JS::NumberValue(36387U) },
   14264             :   { "TRANSFORM_FEEDBACK_ACTIVE", JS::NumberValue(36388U) },
   14265             :   { "TRANSFORM_FEEDBACK_BINDING", JS::NumberValue(36389U) },
   14266             :   { "TEXTURE_IMMUTABLE_FORMAT", JS::NumberValue(37167U) },
   14267             :   { "MAX_ELEMENT_INDEX", JS::NumberValue(36203U) },
   14268             :   { "TEXTURE_IMMUTABLE_LEVELS", JS::NumberValue(33503U) },
   14269             :   { "TIMEOUT_IGNORED", JS::CanonicalizedDoubleValue(-1LL) },
   14270             :   { "MAX_CLIENT_WAIT_TIMEOUT_WEBGL", JS::NumberValue(37447U) },
   14271             :   { "DEPTH_BUFFER_BIT", JS::NumberValue(256U) },
   14272             :   { "STENCIL_BUFFER_BIT", JS::NumberValue(1024U) },
   14273             :   { "COLOR_BUFFER_BIT", JS::NumberValue(16384U) },
   14274             :   { "POINTS", JS::NumberValue(0U) },
   14275             :   { "LINES", JS::NumberValue(1U) },
   14276             :   { "LINE_LOOP", JS::NumberValue(2U) },
   14277             :   { "LINE_STRIP", JS::NumberValue(3U) },
   14278             :   { "TRIANGLES", JS::NumberValue(4U) },
   14279             :   { "TRIANGLE_STRIP", JS::NumberValue(5U) },
   14280             :   { "TRIANGLE_FAN", JS::NumberValue(6U) },
   14281             :   { "ZERO", JS::NumberValue(0U) },
   14282             :   { "ONE", JS::NumberValue(1U) },
   14283             :   { "SRC_COLOR", JS::NumberValue(768U) },
   14284             :   { "ONE_MINUS_SRC_COLOR", JS::NumberValue(769U) },
   14285             :   { "SRC_ALPHA", JS::NumberValue(770U) },
   14286             :   { "ONE_MINUS_SRC_ALPHA", JS::NumberValue(771U) },
   14287             :   { "DST_ALPHA", JS::NumberValue(772U) },
   14288             :   { "ONE_MINUS_DST_ALPHA", JS::NumberValue(773U) },
   14289             :   { "DST_COLOR", JS::NumberValue(774U) },
   14290             :   { "ONE_MINUS_DST_COLOR", JS::NumberValue(775U) },
   14291             :   { "SRC_ALPHA_SATURATE", JS::NumberValue(776U) },
   14292             :   { "FUNC_ADD", JS::NumberValue(32774U) },
   14293             :   { "BLEND_EQUATION", JS::NumberValue(32777U) },
   14294             :   { "BLEND_EQUATION_RGB", JS::NumberValue(32777U) },
   14295             :   { "BLEND_EQUATION_ALPHA", JS::NumberValue(34877U) },
   14296             :   { "FUNC_SUBTRACT", JS::NumberValue(32778U) },
   14297             :   { "FUNC_REVERSE_SUBTRACT", JS::NumberValue(32779U) },
   14298             :   { "BLEND_DST_RGB", JS::NumberValue(32968U) },
   14299             :   { "BLEND_SRC_RGB", JS::NumberValue(32969U) },
   14300             :   { "BLEND_DST_ALPHA", JS::NumberValue(32970U) },
   14301             :   { "BLEND_SRC_ALPHA", JS::NumberValue(32971U) },
   14302             :   { "CONSTANT_COLOR", JS::NumberValue(32769U) },
   14303             :   { "ONE_MINUS_CONSTANT_COLOR", JS::NumberValue(32770U) },
   14304             :   { "CONSTANT_ALPHA", JS::NumberValue(32771U) },
   14305             :   { "ONE_MINUS_CONSTANT_ALPHA", JS::NumberValue(32772U) },
   14306             :   { "BLEND_COLOR", JS::NumberValue(32773U) },
   14307             :   { "ARRAY_BUFFER", JS::NumberValue(34962U) },
   14308             :   { "ELEMENT_ARRAY_BUFFER", JS::NumberValue(34963U) },
   14309             :   { "ARRAY_BUFFER_BINDING", JS::NumberValue(34964U) },
   14310             :   { "ELEMENT_ARRAY_BUFFER_BINDING", JS::NumberValue(34965U) },
   14311             :   { "STREAM_DRAW", JS::NumberValue(35040U) },
   14312             :   { "STATIC_DRAW", JS::NumberValue(35044U) },
   14313             :   { "DYNAMIC_DRAW", JS::NumberValue(35048U) },
   14314             :   { "BUFFER_SIZE", JS::NumberValue(34660U) },
   14315             :   { "BUFFER_USAGE", JS::NumberValue(34661U) },
   14316             :   { "CURRENT_VERTEX_ATTRIB", JS::NumberValue(34342U) },
   14317             :   { "FRONT", JS::NumberValue(1028U) },
   14318             :   { "BACK", JS::NumberValue(1029U) },
   14319             :   { "FRONT_AND_BACK", JS::NumberValue(1032U) },
   14320             :   { "CULL_FACE", JS::NumberValue(2884U) },
   14321             :   { "BLEND", JS::NumberValue(3042U) },
   14322             :   { "DITHER", JS::NumberValue(3024U) },
   14323             :   { "STENCIL_TEST", JS::NumberValue(2960U) },
   14324             :   { "DEPTH_TEST", JS::NumberValue(2929U) },
   14325             :   { "SCISSOR_TEST", JS::NumberValue(3089U) },
   14326             :   { "POLYGON_OFFSET_FILL", JS::NumberValue(32823U) },
   14327             :   { "SAMPLE_ALPHA_TO_COVERAGE", JS::NumberValue(32926U) },
   14328             :   { "SAMPLE_COVERAGE", JS::NumberValue(32928U) },
   14329             :   { "NO_ERROR", JS::NumberValue(0U) },
   14330             :   { "INVALID_ENUM", JS::NumberValue(1280U) },
   14331             :   { "INVALID_VALUE", JS::NumberValue(1281U) },
   14332             :   { "INVALID_OPERATION", JS::NumberValue(1282U) },
   14333             :   { "OUT_OF_MEMORY", JS::NumberValue(1285U) },
   14334             :   { "CW", JS::NumberValue(2304U) },
   14335             :   { "CCW", JS::NumberValue(2305U) },
   14336             :   { "LINE_WIDTH", JS::NumberValue(2849U) },
   14337             :   { "ALIASED_POINT_SIZE_RANGE", JS::NumberValue(33901U) },
   14338             :   { "ALIASED_LINE_WIDTH_RANGE", JS::NumberValue(33902U) },
   14339             :   { "CULL_FACE_MODE", JS::NumberValue(2885U) },
   14340             :   { "FRONT_FACE", JS::NumberValue(2886U) },
   14341             :   { "DEPTH_RANGE", JS::NumberValue(2928U) },
   14342             :   { "DEPTH_WRITEMASK", JS::NumberValue(2930U) },
   14343             :   { "DEPTH_CLEAR_VALUE", JS::NumberValue(2931U) },
   14344             :   { "DEPTH_FUNC", JS::NumberValue(2932U) },
   14345             :   { "STENCIL_CLEAR_VALUE", JS::NumberValue(2961U) },
   14346             :   { "STENCIL_FUNC", JS::NumberValue(2962U) },
   14347             :   { "STENCIL_FAIL", JS::NumberValue(2964U) },
   14348             :   { "STENCIL_PASS_DEPTH_FAIL", JS::NumberValue(2965U) },
   14349             :   { "STENCIL_PASS_DEPTH_PASS", JS::NumberValue(2966U) },
   14350             :   { "STENCIL_REF", JS::NumberValue(2967U) },
   14351             :   { "STENCIL_VALUE_MASK", JS::NumberValue(2963U) },
   14352             :   { "STENCIL_WRITEMASK", JS::NumberValue(2968U) },
   14353             :   { "STENCIL_BACK_FUNC", JS::NumberValue(34816U) },
   14354             :   { "STENCIL_BACK_FAIL", JS::NumberValue(34817U) },
   14355             :   { "STENCIL_BACK_PASS_DEPTH_FAIL", JS::NumberValue(34818U) },
   14356             :   { "STENCIL_BACK_PASS_DEPTH_PASS", JS::NumberValue(34819U) },
   14357             :   { "STENCIL_BACK_REF", JS::NumberValue(36003U) },
   14358             :   { "STENCIL_BACK_VALUE_MASK", JS::NumberValue(36004U) },
   14359             :   { "STENCIL_BACK_WRITEMASK", JS::NumberValue(36005U) },
   14360             :   { "VIEWPORT", JS::NumberValue(2978U) },
   14361             :   { "SCISSOR_BOX", JS::NumberValue(3088U) },
   14362             :   { "COLOR_CLEAR_VALUE", JS::NumberValue(3106U) },
   14363             :   { "COLOR_WRITEMASK", JS::NumberValue(3107U) },
   14364             :   { "UNPACK_ALIGNMENT", JS::NumberValue(3317U) },
   14365             :   { "PACK_ALIGNMENT", JS::NumberValue(3333U) },
   14366             :   { "MAX_TEXTURE_SIZE", JS::NumberValue(3379U) },
   14367             :   { "MAX_VIEWPORT_DIMS", JS::NumberValue(3386U) },
   14368             :   { "SUBPIXEL_BITS", JS::NumberValue(3408U) },
   14369             :   { "RED_BITS", JS::NumberValue(3410U) },
   14370             :   { "GREEN_BITS", JS::NumberValue(3411U) },
   14371             :   { "BLUE_BITS", JS::NumberValue(3412U) },
   14372             :   { "ALPHA_BITS", JS::NumberValue(3413U) },
   14373             :   { "DEPTH_BITS", JS::NumberValue(3414U) },
   14374             :   { "STENCIL_BITS", JS::NumberValue(3415U) },
   14375             :   { "POLYGON_OFFSET_UNITS", JS::NumberValue(10752U) },
   14376             :   { "POLYGON_OFFSET_FACTOR", JS::NumberValue(32824U) },
   14377             :   { "TEXTURE_BINDING_2D", JS::NumberValue(32873U) },
   14378             :   { "SAMPLE_BUFFERS", JS::NumberValue(32936U) },
   14379             :   { "SAMPLES", JS::NumberValue(32937U) },
   14380             :   { "SAMPLE_COVERAGE_VALUE", JS::NumberValue(32938U) },
   14381             :   { "SAMPLE_COVERAGE_INVERT", JS::NumberValue(32939U) },
   14382             :   { "COMPRESSED_TEXTURE_FORMATS", JS::NumberValue(34467U) },
   14383             :   { "DONT_CARE", JS::NumberValue(4352U) },
   14384             :   { "FASTEST", JS::NumberValue(4353U) },
   14385             :   { "NICEST", JS::NumberValue(4354U) },
   14386             :   { "GENERATE_MIPMAP_HINT", JS::NumberValue(33170U) },
   14387             :   { "BYTE", JS::NumberValue(5120U) },
   14388             :   { "UNSIGNED_BYTE", JS::NumberValue(5121U) },
   14389             :   { "SHORT", JS::NumberValue(5122U) },
   14390             :   { "UNSIGNED_SHORT", JS::NumberValue(5123U) },
   14391             :   { "INT", JS::NumberValue(5124U) },
   14392             :   { "UNSIGNED_INT", JS::NumberValue(5125U) },
   14393             :   { "FLOAT", JS::NumberValue(5126U) },
   14394             :   { "DEPTH_COMPONENT", JS::NumberValue(6402U) },
   14395             :   { "ALPHA", JS::NumberValue(6406U) },
   14396             :   { "RGB", JS::NumberValue(6407U) },
   14397             :   { "RGBA", JS::NumberValue(6408U) },
   14398             :   { "LUMINANCE", JS::NumberValue(6409U) },
   14399             :   { "LUMINANCE_ALPHA", JS::NumberValue(6410U) },
   14400             :   { "UNSIGNED_SHORT_4_4_4_4", JS::NumberValue(32819U) },
   14401             :   { "UNSIGNED_SHORT_5_5_5_1", JS::NumberValue(32820U) },
   14402             :   { "UNSIGNED_SHORT_5_6_5", JS::NumberValue(33635U) },
   14403             :   { "FRAGMENT_SHADER", JS::NumberValue(35632U) },
   14404             :   { "VERTEX_SHADER", JS::NumberValue(35633U) },
   14405             :   { "MAX_VERTEX_ATTRIBS", JS::NumberValue(34921U) },
   14406             :   { "MAX_VERTEX_UNIFORM_VECTORS", JS::NumberValue(36347U) },
   14407             :   { "MAX_VARYING_VECTORS", JS::NumberValue(36348U) },
   14408             :   { "MAX_COMBINED_TEXTURE_IMAGE_UNITS", JS::NumberValue(35661U) },
   14409             :   { "MAX_VERTEX_TEXTURE_IMAGE_UNITS", JS::NumberValue(35660U) },
   14410             :   { "MAX_TEXTURE_IMAGE_UNITS", JS::NumberValue(34930U) },
   14411             :   { "MAX_FRAGMENT_UNIFORM_VECTORS", JS::NumberValue(36349U) },
   14412             :   { "SHADER_TYPE", JS::NumberValue(35663U) },
   14413             :   { "DELETE_STATUS", JS::NumberValue(35712U) },
   14414             :   { "LINK_STATUS", JS::NumberValue(35714U) },
   14415             :   { "VALIDATE_STATUS", JS::NumberValue(35715U) },
   14416             :   { "ATTACHED_SHADERS", JS::NumberValue(35717U) },
   14417             :   { "ACTIVE_UNIFORMS", JS::NumberValue(35718U) },
   14418             :   { "ACTIVE_ATTRIBUTES", JS::NumberValue(35721U) },
   14419             :   { "SHADING_LANGUAGE_VERSION", JS::NumberValue(35724U) },
   14420             :   { "CURRENT_PROGRAM", JS::NumberValue(35725U) },
   14421             :   { "NEVER", JS::NumberValue(512U) },
   14422             :   { "LESS", JS::NumberValue(513U) },
   14423             :   { "EQUAL", JS::NumberValue(514U) },
   14424             :   { "LEQUAL", JS::NumberValue(515U) },
   14425             :   { "GREATER", JS::NumberValue(516U) },
   14426             :   { "NOTEQUAL", JS::NumberValue(517U) },
   14427             :   { "GEQUAL", JS::NumberValue(518U) },
   14428             :   { "ALWAYS", JS::NumberValue(519U) },
   14429             :   { "KEEP", JS::NumberValue(7680U) },
   14430             :   { "REPLACE", JS::NumberValue(7681U) },
   14431             :   { "INCR", JS::NumberValue(7682U) },
   14432             :   { "DECR", JS::NumberValue(7683U) },
   14433             :   { "INVERT", JS::NumberValue(5386U) },
   14434             :   { "INCR_WRAP", JS::NumberValue(34055U) },
   14435             :   { "DECR_WRAP", JS::NumberValue(34056U) },
   14436             :   { "VENDOR", JS::NumberValue(7936U) },
   14437             :   { "RENDERER", JS::NumberValue(7937U) },
   14438             :   { "VERSION", JS::NumberValue(7938U) },
   14439             :   { "NEAREST", JS::NumberValue(9728U) },
   14440             :   { "LINEAR", JS::NumberValue(9729U) },
   14441             :   { "NEAREST_MIPMAP_NEAREST", JS::NumberValue(9984U) },
   14442             :   { "LINEAR_MIPMAP_NEAREST", JS::NumberValue(9985U) },
   14443             :   { "NEAREST_MIPMAP_LINEAR", JS::NumberValue(9986U) },
   14444             :   { "LINEAR_MIPMAP_LINEAR", JS::NumberValue(9987U) },
   14445             :   { "TEXTURE_MAG_FILTER", JS::NumberValue(10240U) },
   14446             :   { "TEXTURE_MIN_FILTER", JS::NumberValue(10241U) },
   14447             :   { "TEXTURE_WRAP_S", JS::NumberValue(10242U) },
   14448             :   { "TEXTURE_WRAP_T", JS::NumberValue(10243U) },
   14449             :   { "TEXTURE_2D", JS::NumberValue(3553U) },
   14450             :   { "TEXTURE", JS::NumberValue(5890U) },
   14451             :   { "TEXTURE_CUBE_MAP", JS::NumberValue(34067U) },
   14452             :   { "TEXTURE_BINDING_CUBE_MAP", JS::NumberValue(34068U) },
   14453             :   { "TEXTURE_CUBE_MAP_POSITIVE_X", JS::NumberValue(34069U) },
   14454             :   { "TEXTURE_CUBE_MAP_NEGATIVE_X", JS::NumberValue(34070U) },
   14455             :   { "TEXTURE_CUBE_MAP_POSITIVE_Y", JS::NumberValue(34071U) },
   14456             :   { "TEXTURE_CUBE_MAP_NEGATIVE_Y", JS::NumberValue(34072U) },
   14457             :   { "TEXTURE_CUBE_MAP_POSITIVE_Z", JS::NumberValue(34073U) },
   14458             :   { "TEXTURE_CUBE_MAP_NEGATIVE_Z", JS::NumberValue(34074U) },
   14459             :   { "MAX_CUBE_MAP_TEXTURE_SIZE", JS::NumberValue(34076U) },
   14460             :   { "TEXTURE0", JS::NumberValue(33984U) },
   14461             :   { "TEXTURE1", JS::NumberValue(33985U) },
   14462             :   { "TEXTURE2", JS::NumberValue(33986U) },
   14463             :   { "TEXTURE3", JS::NumberValue(33987U) },
   14464             :   { "TEXTURE4", JS::NumberValue(33988U) },
   14465             :   { "TEXTURE5", JS::NumberValue(33989U) },
   14466             :   { "TEXTURE6", JS::NumberValue(33990U) },
   14467             :   { "TEXTURE7", JS::NumberValue(33991U) },
   14468             :   { "TEXTURE8", JS::NumberValue(33992U) },
   14469             :   { "TEXTURE9", JS::NumberValue(33993U) },
   14470             :   { "TEXTURE10", JS::NumberValue(33994U) },
   14471             :   { "TEXTURE11", JS::NumberValue(33995U) },
   14472             :   { "TEXTURE12", JS::NumberValue(33996U) },
   14473             :   { "TEXTURE13", JS::NumberValue(33997U) },
   14474             :   { "TEXTURE14", JS::NumberValue(33998U) },
   14475             :   { "TEXTURE15", JS::NumberValue(33999U) },
   14476             :   { "TEXTURE16", JS::NumberValue(34000U) },
   14477             :   { "TEXTURE17", JS::NumberValue(34001U) },
   14478             :   { "TEXTURE18", JS::NumberValue(34002U) },
   14479             :   { "TEXTURE19", JS::NumberValue(34003U) },
   14480             :   { "TEXTURE20", JS::NumberValue(34004U) },
   14481             :   { "TEXTURE21", JS::NumberValue(34005U) },
   14482             :   { "TEXTURE22", JS::NumberValue(34006U) },
   14483             :   { "TEXTURE23", JS::NumberValue(34007U) },
   14484             :   { "TEXTURE24", JS::NumberValue(34008U) },
   14485             :   { "TEXTURE25", JS::NumberValue(34009U) },
   14486             :   { "TEXTURE26", JS::NumberValue(34010U) },
   14487             :   { "TEXTURE27", JS::NumberValue(34011U) },
   14488             :   { "TEXTURE28", JS::NumberValue(34012U) },
   14489             :   { "TEXTURE29", JS::NumberValue(34013U) },
   14490             :   { "TEXTURE30", JS::NumberValue(34014U) },
   14491             :   { "TEXTURE31", JS::NumberValue(34015U) },
   14492             :   { "ACTIVE_TEXTURE", JS::NumberValue(34016U) },
   14493             :   { "REPEAT", JS::NumberValue(10497U) },
   14494             :   { "CLAMP_TO_EDGE", JS::NumberValue(33071U) },
   14495             :   { "MIRRORED_REPEAT", JS::NumberValue(33648U) },
   14496             :   { "FLOAT_VEC2", JS::NumberValue(35664U) },
   14497             :   { "FLOAT_VEC3", JS::NumberValue(35665U) },
   14498             :   { "FLOAT_VEC4", JS::NumberValue(35666U) },
   14499             :   { "INT_VEC2", JS::NumberValue(35667U) },
   14500             :   { "INT_VEC3", JS::NumberValue(35668U) },
   14501             :   { "INT_VEC4", JS::NumberValue(35669U) },
   14502             :   { "BOOL", JS::NumberValue(35670U) },
   14503             :   { "BOOL_VEC2", JS::NumberValue(35671U) },
   14504             :   { "BOOL_VEC3", JS::NumberValue(35672U) },
   14505             :   { "BOOL_VEC4", JS::NumberValue(35673U) },
   14506             :   { "FLOAT_MAT2", JS::NumberValue(35674U) },
   14507             :   { "FLOAT_MAT3", JS::NumberValue(35675U) },
   14508             :   { "FLOAT_MAT4", JS::NumberValue(35676U) },
   14509             :   { "SAMPLER_2D", JS::NumberValue(35678U) },
   14510             :   { "SAMPLER_CUBE", JS::NumberValue(35680U) },
   14511             :   { "VERTEX_ATTRIB_ARRAY_ENABLED", JS::NumberValue(34338U) },
   14512             :   { "VERTEX_ATTRIB_ARRAY_SIZE", JS::NumberValue(34339U) },
   14513             :   { "VERTEX_ATTRIB_ARRAY_STRIDE", JS::NumberValue(34340U) },
   14514             :   { "VERTEX_ATTRIB_ARRAY_TYPE", JS::NumberValue(34341U) },
   14515             :   { "VERTEX_ATTRIB_ARRAY_NORMALIZED", JS::NumberValue(34922U) },
   14516             :   { "VERTEX_ATTRIB_ARRAY_POINTER", JS::NumberValue(34373U) },
   14517             :   { "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", JS::NumberValue(34975U) },
   14518             :   { "IMPLEMENTATION_COLOR_READ_TYPE", JS::NumberValue(35738U) },
   14519             :   { "IMPLEMENTATION_COLOR_READ_FORMAT", JS::NumberValue(35739U) },
   14520             :   { "COMPILE_STATUS", JS::NumberValue(35713U) },
   14521             :   { "LOW_FLOAT", JS::NumberValue(36336U) },
   14522             :   { "MEDIUM_FLOAT", JS::NumberValue(36337U) },
   14523             :   { "HIGH_FLOAT", JS::NumberValue(36338U) },
   14524             :   { "LOW_INT", JS::NumberValue(36339U) },
   14525             :   { "MEDIUM_INT", JS::NumberValue(36340U) },
   14526             :   { "HIGH_INT", JS::NumberValue(36341U) },
   14527             :   { "FRAMEBUFFER", JS::NumberValue(36160U) },
   14528             :   { "RENDERBUFFER", JS::NumberValue(36161U) },
   14529             :   { "RGBA4", JS::NumberValue(32854U) },
   14530             :   { "RGB5_A1", JS::NumberValue(32855U) },
   14531             :   { "RGB565", JS::NumberValue(36194U) },
   14532             :   { "DEPTH_COMPONENT16", JS::NumberValue(33189U) },
   14533             :   { "STENCIL_INDEX8", JS::NumberValue(36168U) },
   14534             :   { "DEPTH_STENCIL", JS::NumberValue(34041U) },
   14535             :   { "RENDERBUFFER_WIDTH", JS::NumberValue(36162U) },
   14536             :   { "RENDERBUFFER_HEIGHT", JS::NumberValue(36163U) },
   14537             :   { "RENDERBUFFER_INTERNAL_FORMAT", JS::NumberValue(36164U) },
   14538             :   { "RENDERBUFFER_RED_SIZE", JS::NumberValue(36176U) },
   14539             :   { "RENDERBUFFER_GREEN_SIZE", JS::NumberValue(36177U) },
   14540             :   { "RENDERBUFFER_BLUE_SIZE", JS::NumberValue(36178U) },
   14541             :   { "RENDERBUFFER_ALPHA_SIZE", JS::NumberValue(36179U) },
   14542             :   { "RENDERBUFFER_DEPTH_SIZE", JS::NumberValue(36180U) },
   14543             :   { "RENDERBUFFER_STENCIL_SIZE", JS::NumberValue(36181U) },
   14544             :   { "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", JS::NumberValue(36048U) },
   14545             :   { "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", JS::NumberValue(36049U) },
   14546             :   { "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", JS::NumberValue(36050U) },
   14547             :   { "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", JS::NumberValue(36051U) },
   14548             :   { "COLOR_ATTACHMENT0", JS::NumberValue(36064U) },
   14549             :   { "DEPTH_ATTACHMENT", JS::NumberValue(36096U) },
   14550             :   { "STENCIL_ATTACHMENT", JS::NumberValue(36128U) },
   14551             :   { "DEPTH_STENCIL_ATTACHMENT", JS::NumberValue(33306U) },
   14552             :   { "NONE", JS::NumberValue(0U) },
   14553             :   { "FRAMEBUFFER_COMPLETE", JS::NumberValue(36053U) },
   14554             :   { "FRAMEBUFFER_INCOMPLETE_ATTACHMENT", JS::NumberValue(36054U) },
   14555             :   { "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", JS::NumberValue(36055U) },
   14556             :   { "FRAMEBUFFER_INCOMPLETE_DIMENSIONS", JS::NumberValue(36057U) },
   14557             :   { "FRAMEBUFFER_UNSUPPORTED", JS::NumberValue(36061U) },
   14558             :   { "FRAMEBUFFER_BINDING", JS::NumberValue(36006U) },
   14559             :   { "RENDERBUFFER_BINDING", JS::NumberValue(36007U) },
   14560             :   { "MAX_RENDERBUFFER_SIZE", JS::NumberValue(34024U) },
   14561             :   { "INVALID_FRAMEBUFFER_OPERATION", JS::NumberValue(1286U) },
   14562             :   { "UNPACK_FLIP_Y_WEBGL", JS::NumberValue(37440U) },
   14563             :   { "UNPACK_PREMULTIPLY_ALPHA_WEBGL", JS::NumberValue(37441U) },
   14564             :   { "CONTEXT_LOST_WEBGL", JS::NumberValue(37442U) },
   14565             :   { "UNPACK_COLORSPACE_CONVERSION_WEBGL", JS::NumberValue(37443U) },
   14566             :   { "BROWSER_DEFAULT_WEBGL", JS::NumberValue(37444U) },
   14567             :   { 0, JS::UndefinedValue() }
   14568          16 : };
   14569             : #if defined(__clang__)
   14570             : #pragma clang diagnostic pop
   14571             : #endif
   14572             : 
   14573             : 
   14574             : // Can't be const because the pref-enabled boolean needs to be writable
   14575             : static Prefable<const ConstantSpec> sConstants[] = {
   14576             :   { nullptr, &sConstants_specs[0] },
   14577             :   { nullptr, nullptr }
   14578             : };
   14579             : 
   14580             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
   14581             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
   14582             : static_assert(559 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
   14583             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
   14584             : 
   14585             : 
   14586             : static uint16_t sNativeProperties_sortedPropertyIndices[786];
   14587             : static PropertyInfo sNativeProperties_propertyInfos[786];
   14588             : 
   14589             : static const NativePropertiesN<3> sNativeProperties = {
   14590             :   false, 0,
   14591             :   false, 0,
   14592             :   true,  0 /* sMethods */,
   14593             :   true,  1 /* sAttributes */,
   14594             :   false, 0,
   14595             :   false, 0,
   14596             :   true,  2 /* sConstants */,
   14597             :   -1,
   14598             :   786,
   14599             :   sNativeProperties_sortedPropertyIndices,
   14600             :   {
   14601             :     { sMethods, &sNativeProperties_propertyInfos[0] },
   14602             :     { sAttributes, &sNativeProperties_propertyInfos[224] },
   14603             :     { sConstants, &sNativeProperties_propertyInfos[227] }
   14604             :   }
   14605             : };
   14606             : static_assert(786 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
   14607             :     "We have a property info count that is oversized");
   14608             : 
   14609             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
   14610             :   {
   14611             :     "Function",
   14612             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
   14613             :     &sBoringInterfaceObjectClassClassOps,
   14614             :     JS_NULL_CLASS_SPEC,
   14615             :     JS_NULL_CLASS_EXT,
   14616             :     &sInterfaceObjectClassObjectOps
   14617             :   },
   14618             :   eInterface,
   14619             :   true,
   14620             :   prototypes::id::WebGL2RenderingContext,
   14621             :   PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth,
   14622             :   sNativePropertyHooks,
   14623             :   "function WebGL2RenderingContext() {\n    [native code]\n}",
   14624             :   JS::GetRealmFunctionPrototype
   14625             : };
   14626             : 
   14627             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
   14628             :   {
   14629             :     "WebGL2RenderingContextPrototype",
   14630             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
   14631             :     JS_NULL_CLASS_OPS,
   14632             :     JS_NULL_CLASS_SPEC,
   14633             :     JS_NULL_CLASS_EXT,
   14634             :     JS_NULL_OBJECT_OPS
   14635             :   },
   14636             :   eInterfacePrototype,
   14637             :   false,
   14638             :   prototypes::id::WebGL2RenderingContext,
   14639             :   PrototypeTraits<prototypes::id::WebGL2RenderingContext>::Depth,
   14640             :   sNativePropertyHooks,
   14641             :   "[object WebGL2RenderingContextPrototype]",
   14642             :   JS::GetRealmObjectPrototype
   14643             : };
   14644             : 
   14645             : bool
   14646           0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
   14647             : {
   14648             :   static bool sPrefValue;
   14649             :   static bool sPrefCacheSetUp = false;
   14650           0 :   if (!sPrefCacheSetUp) {
   14651           0 :     sPrefCacheSetUp = true;
   14652           0 :     Preferences::AddBoolVarCache(&sPrefValue, "webgl.enable-webgl2");
   14653             :   }
   14654             : 
   14655           0 :   return sPrefValue;
   14656             : }
   14657             : 
   14658             : JSObject*
   14659           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
   14660             : {
   14661           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
   14662             : }
   14663             : 
   14664             : static const js::ClassOps sClassOps = {
   14665             :   _addProperty, /* addProperty */
   14666             :   nullptr,               /* delProperty */
   14667             :   nullptr,               /* getProperty */
   14668             :   nullptr,               /* setProperty */
   14669             :   nullptr,               /* enumerate */
   14670             :   nullptr, /* newEnumerate */
   14671             :   nullptr, /* resolve */
   14672             :   nullptr, /* mayResolve */
   14673             :   _finalize, /* finalize */
   14674             :   nullptr, /* call */
   14675             :   nullptr,               /* hasInstance */
   14676             :   nullptr,               /* construct */
   14677             :   nullptr, /* trace */
   14678             : };
   14679             : 
   14680             : static const js::ClassExtension sClassExtension = {
   14681             :   nullptr, /* weakmapKeyDelegateOp */
   14682             :   _objectMoved /* objectMovedOp */
   14683             : };
   14684             : 
   14685             : static const DOMJSClass sClass = {
   14686             :   { "WebGL2RenderingContext",
   14687             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
   14688             :     &sClassOps,
   14689             :     JS_NULL_CLASS_SPEC,
   14690             :     &sClassExtension,
   14691             :     JS_NULL_OBJECT_OPS
   14692             :   },
   14693             :   { prototypes::id::WebGL2RenderingContext, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
   14694             :   IsBaseOf<nsISupports, mozilla::WebGL2Context >::value,
   14695             :   sNativePropertyHooks,
   14696             :   FindAssociatedGlobalForNative<mozilla::WebGL2Context>::Get,
   14697             :   GetProtoObjectHandle,
   14698             :   GetCCParticipant<mozilla::WebGL2Context>::Get()
   14699             : };
   14700             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
   14701             :               "Must have the right minimal number of reserved slots.");
   14702             : static_assert(1 >= 1,
   14703             :               "Must have enough reserved slots.");
   14704             : 
   14705             : const JSClass*
   14706           0 : GetJSClass()
   14707             : {
   14708           0 :   return sClass.ToJSClass();
   14709             : }
   14710             : 
   14711             : bool
   14712           0 : Wrap(JSContext* aCx, mozilla::WebGL2Context* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
   14713             : {
   14714             :   MOZ_ASSERT(static_cast<mozilla::WebGL2Context*>(aObject) ==
   14715             :              reinterpret_cast<mozilla::WebGL2Context*>(aObject),
   14716             :              "Multiple inheritance for mozilla::WebGL2Context is broken.");
   14717           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
   14718           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
   14719           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
   14720             :              "You should probably not be using Wrap() directly; use "
   14721             :              "GetOrCreateDOMReflector instead");
   14722             : 
   14723           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
   14724             :              "nsISupports must be on our primary inheritance chain");
   14725             : 
   14726           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
   14727           0 :   if (!global) {
   14728           0 :     return false;
   14729             :   }
   14730           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
   14731           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
   14732             : 
   14733             :   // That might have ended up wrapping us already, due to the wonders
   14734             :   // of XBL.  Check for that, and bail out as needed.
   14735           0 :   aReflector.set(aCache->GetWrapper());
   14736           0 :   if (aReflector) {
   14737             : #ifdef DEBUG
   14738           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
   14739             : #endif // DEBUG
   14740           0 :     return true;
   14741             :   }
   14742             : 
   14743           0 :   JSAutoCompartment ac(aCx, global);
   14744           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
   14745           0 :   if (!canonicalProto) {
   14746           0 :     return false;
   14747             :   }
   14748           0 :   JS::Rooted<JSObject*> proto(aCx);
   14749           0 :   if (aGivenProto) {
   14750           0 :     proto = aGivenProto;
   14751             :     // Unfortunately, while aGivenProto was in the compartment of aCx
   14752             :     // coming in, we changed compartments to that of "parent" so may need
   14753             :     // to wrap the proto here.
   14754           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
   14755           0 :       if (!JS_WrapObject(aCx, &proto)) {
   14756           0 :         return false;
   14757             :       }
   14758             :     }
   14759             :   } else {
   14760           0 :     proto = canonicalProto;
   14761             :   }
   14762             : 
   14763           0 :   BindingJSObjectCreator<mozilla::WebGL2Context> creator(aCx);
   14764           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
   14765           0 :   if (!aReflector) {
   14766           0 :     return false;
   14767             :   }
   14768             : 
   14769           0 :   aCache->SetWrapper(aReflector);
   14770           0 :   creator.InitializationSucceeded();
   14771             : 
   14772           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
   14773             :              aCache->GetWrapperPreserveColor() == aReflector);
   14774             :   // If proto != canonicalProto, we have to preserve our wrapper;
   14775             :   // otherwise we won't be able to properly recreate it later, since
   14776             :   // we won't know what proto to use.  Note that we don't check
   14777             :   // aGivenProto here, since it's entirely possible (and even
   14778             :   // somewhat common) to have a non-null aGivenProto which is the
   14779             :   // same as canonicalProto.
   14780           0 :   if (proto != canonicalProto) {
   14781           0 :     PreserveWrapper(aObject);
   14782             :   }
   14783             : 
   14784           0 :   return true;
   14785             : }
   14786             : 
   14787             : const NativePropertyHooks sNativePropertyHooks[] = { {
   14788             :   nullptr,
   14789             :   nullptr,
   14790             :   nullptr,
   14791             :   { sNativeProperties.Upcast(), nullptr },
   14792             :   prototypes::id::WebGL2RenderingContext,
   14793             :   constructors::id::WebGL2RenderingContext,
   14794             :   nullptr,
   14795             :   &DefaultXrayExpandoObjectClass
   14796             : } };
   14797             : 
   14798             : void
   14799           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
   14800             : {
   14801           0 :   JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
   14802           0 :   if (!parentProto) {
   14803           0 :     return;
   14804             :   }
   14805             : 
   14806           0 :   JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
   14807           0 :   if (!constructorProto) {
   14808           0 :     return;
   14809             :   }
   14810             : 
   14811             :   static bool sIdsInited = false;
   14812           0 :   if (!sIdsInited && NS_IsMainThread()) {
   14813           0 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
   14814           0 :       return;
   14815             :     }
   14816           0 :     sIdsInited = true;
   14817             :   }
   14818             : 
   14819           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::WebGL2RenderingContext);
   14820           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::WebGL2RenderingContext);
   14821           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
   14822             :                               &sPrototypeClass.mBase, protoCache,
   14823             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
   14824             :                               interfaceCache,
   14825             :                               sNativeProperties.Upcast(),
   14826             :                               nullptr,
   14827             :                               "WebGL2RenderingContext", aDefineOnGlobal,
   14828             :                               nullptr,
   14829           0 :                               false);
   14830             : }
   14831             : 
   14832             : JS::Handle<JSObject*>
   14833           0 : GetProtoObjectHandle(JSContext* aCx)
   14834             : {
   14835             :   /* Get the interface prototype object for this class.  This will create the
   14836             :      object as needed. */
   14837           0 :   bool aDefineOnGlobal = true;
   14838             : 
   14839             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   14840           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   14841           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   14842           0 :     return nullptr;
   14843             :   }
   14844             : 
   14845             :   /* Check to see whether the interface objects are already installed */
   14846           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   14847           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::WebGL2RenderingContext)) {
   14848           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   14849           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   14850             :   }
   14851             : 
   14852             :   /*
   14853             :    * The object might _still_ be null, but that's OK.
   14854             :    *
   14855             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   14856             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   14857             :    * changed after they have been set.
   14858             :    *
   14859             :    * Calling address() avoids the read read barrier that does gray
   14860             :    * unmarking, but it's not possible for the object to be gray here.
   14861             :    */
   14862             : 
   14863           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::WebGL2RenderingContext);
   14864           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   14865           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   14866             : }
   14867             : 
   14868             : JS::Handle<JSObject*>
   14869           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
   14870             : {
   14871             :   /* Get the interface object for this class.  This will create the object as
   14872             :      needed. */
   14873             : 
   14874             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   14875           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   14876           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   14877           0 :     return nullptr;
   14878             :   }
   14879             : 
   14880             :   /* Check to see whether the interface objects are already installed */
   14881           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   14882           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::WebGL2RenderingContext)) {
   14883           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   14884           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   14885             :   }
   14886             : 
   14887             :   /*
   14888             :    * The object might _still_ be null, but that's OK.
   14889             :    *
   14890             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   14891             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   14892             :    * changed after they have been set.
   14893             :    *
   14894             :    * Calling address() avoids the read read barrier that does gray
   14895             :    * unmarking, but it's not possible for the object to be gray here.
   14896             :    */
   14897             : 
   14898           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::WebGL2RenderingContext);
   14899           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   14900           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   14901             : }
   14902             : 
   14903             : JSObject*
   14904           0 : GetConstructorObject(JSContext* aCx)
   14905             : {
   14906           0 :   return GetConstructorObjectHandle(aCx);
   14907             : }
   14908             : 
   14909             : } // namespace WebGL2RenderingContextBinding
   14910             : 
   14911             : 
   14912             : 
   14913             : namespace WebGLSamplerBinding {
   14914             : 
   14915             : static bool
   14916           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
   14917             : {
   14918           0 :   mozilla::WebGLSampler* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLSampler>(obj);
   14919             :   // We don't want to preserve if we don't have a wrapper, and we
   14920             :   // obviously can't preserve if we're not initialized.
   14921           0 :   if (self && self->GetWrapperPreserveColor()) {
   14922           0 :     PreserveWrapper(self);
   14923             :   }
   14924           0 :   return true;
   14925             : }
   14926             : 
   14927             : static void
   14928           0 : _finalize(js::FreeOp* fop, JSObject* obj)
   14929             : {
   14930           0 :   mozilla::WebGLSampler* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLSampler>(obj);
   14931           0 :   if (self) {
   14932           0 :     ClearWrapper(self, self, obj);
   14933           0 :     AddForDeferredFinalization<mozilla::WebGLSampler>(self);
   14934             :   }
   14935           0 : }
   14936             : 
   14937             : static void
   14938           0 : _objectMoved(JSObject* obj, const JSObject* old)
   14939             : {
   14940           0 :   mozilla::WebGLSampler* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLSampler>(obj);
   14941           0 :   if (self) {
   14942           0 :     UpdateWrapper(self, self, obj, old);
   14943             :   }
   14944           0 : }
   14945             : 
   14946             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
   14947             :   {
   14948             :     "Function",
   14949             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
   14950             :     &sBoringInterfaceObjectClassClassOps,
   14951             :     JS_NULL_CLASS_SPEC,
   14952             :     JS_NULL_CLASS_EXT,
   14953             :     &sInterfaceObjectClassObjectOps
   14954             :   },
   14955             :   eInterface,
   14956             :   true,
   14957             :   prototypes::id::WebGLSampler,
   14958             :   PrototypeTraits<prototypes::id::WebGLSampler>::Depth,
   14959             :   sNativePropertyHooks,
   14960             :   "function WebGLSampler() {\n    [native code]\n}",
   14961             :   JS::GetRealmFunctionPrototype
   14962             : };
   14963             : 
   14964             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
   14965             :   {
   14966             :     "WebGLSamplerPrototype",
   14967             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
   14968             :     JS_NULL_CLASS_OPS,
   14969             :     JS_NULL_CLASS_SPEC,
   14970             :     JS_NULL_CLASS_EXT,
   14971             :     JS_NULL_OBJECT_OPS
   14972             :   },
   14973             :   eInterfacePrototype,
   14974             :   false,
   14975             :   prototypes::id::WebGLSampler,
   14976             :   PrototypeTraits<prototypes::id::WebGLSampler>::Depth,
   14977             :   sNativePropertyHooks,
   14978             :   "[object WebGLSamplerPrototype]",
   14979             :   JS::GetRealmObjectPrototype
   14980             : };
   14981             : 
   14982             : bool
   14983           0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
   14984             : {
   14985             :   static bool sPrefValue;
   14986             :   static bool sPrefCacheSetUp = false;
   14987           0 :   if (!sPrefCacheSetUp) {
   14988           0 :     sPrefCacheSetUp = true;
   14989           0 :     Preferences::AddBoolVarCache(&sPrefValue, "webgl.enable-webgl2");
   14990             :   }
   14991             : 
   14992           0 :   return sPrefValue;
   14993             : }
   14994             : 
   14995             : JSObject*
   14996           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
   14997             : {
   14998           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
   14999             : }
   15000             : 
   15001             : static const js::ClassOps sClassOps = {
   15002             :   _addProperty, /* addProperty */
   15003             :   nullptr,               /* delProperty */
   15004             :   nullptr,               /* getProperty */
   15005             :   nullptr,               /* setProperty */
   15006             :   nullptr,               /* enumerate */
   15007             :   nullptr, /* newEnumerate */
   15008             :   nullptr, /* resolve */
   15009             :   nullptr, /* mayResolve */
   15010             :   _finalize, /* finalize */
   15011             :   nullptr, /* call */
   15012             :   nullptr,               /* hasInstance */
   15013             :   nullptr,               /* construct */
   15014             :   nullptr, /* trace */
   15015             : };
   15016             : 
   15017             : static const js::ClassExtension sClassExtension = {
   15018             :   nullptr, /* weakmapKeyDelegateOp */
   15019             :   _objectMoved /* objectMovedOp */
   15020             : };
   15021             : 
   15022             : static const DOMJSClass sClass = {
   15023             :   { "WebGLSampler",
   15024             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
   15025             :     &sClassOps,
   15026             :     JS_NULL_CLASS_SPEC,
   15027             :     &sClassExtension,
   15028             :     JS_NULL_OBJECT_OPS
   15029             :   },
   15030             :   { prototypes::id::WebGLSampler, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
   15031             :   IsBaseOf<nsISupports, mozilla::WebGLSampler >::value,
   15032             :   sNativePropertyHooks,
   15033             :   FindAssociatedGlobalForNative<mozilla::WebGLSampler>::Get,
   15034             :   GetProtoObjectHandle,
   15035             :   GetCCParticipant<mozilla::WebGLSampler>::Get()
   15036             : };
   15037             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
   15038             :               "Must have the right minimal number of reserved slots.");
   15039             : static_assert(1 >= 1,
   15040             :               "Must have enough reserved slots.");
   15041             : 
   15042             : const JSClass*
   15043           0 : GetJSClass()
   15044             : {
   15045           0 :   return sClass.ToJSClass();
   15046             : }
   15047             : 
   15048             : bool
   15049           0 : Wrap(JSContext* aCx, mozilla::WebGLSampler* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
   15050             : {
   15051             :   MOZ_ASSERT(static_cast<mozilla::WebGLSampler*>(aObject) ==
   15052             :              reinterpret_cast<mozilla::WebGLSampler*>(aObject),
   15053             :              "Multiple inheritance for mozilla::WebGLSampler is broken.");
   15054           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
   15055           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
   15056           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
   15057             :              "You should probably not be using Wrap() directly; use "
   15058             :              "GetOrCreateDOMReflector instead");
   15059             : 
   15060           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
   15061             :              "nsISupports must be on our primary inheritance chain");
   15062             : 
   15063           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
   15064           0 :   if (!global) {
   15065           0 :     return false;
   15066             :   }
   15067           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
   15068           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
   15069             : 
   15070             :   // That might have ended up wrapping us already, due to the wonders
   15071             :   // of XBL.  Check for that, and bail out as needed.
   15072           0 :   aReflector.set(aCache->GetWrapper());
   15073           0 :   if (aReflector) {
   15074             : #ifdef DEBUG
   15075           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
   15076             : #endif // DEBUG
   15077           0 :     return true;
   15078             :   }
   15079             : 
   15080           0 :   JSAutoCompartment ac(aCx, global);
   15081           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
   15082           0 :   if (!canonicalProto) {
   15083           0 :     return false;
   15084             :   }
   15085           0 :   JS::Rooted<JSObject*> proto(aCx);
   15086           0 :   if (aGivenProto) {
   15087           0 :     proto = aGivenProto;
   15088             :     // Unfortunately, while aGivenProto was in the compartment of aCx
   15089             :     // coming in, we changed compartments to that of "parent" so may need
   15090             :     // to wrap the proto here.
   15091           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
   15092           0 :       if (!JS_WrapObject(aCx, &proto)) {
   15093           0 :         return false;
   15094             :       }
   15095             :     }
   15096             :   } else {
   15097           0 :     proto = canonicalProto;
   15098             :   }
   15099             : 
   15100           0 :   BindingJSObjectCreator<mozilla::WebGLSampler> creator(aCx);
   15101           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
   15102           0 :   if (!aReflector) {
   15103           0 :     return false;
   15104             :   }
   15105             : 
   15106           0 :   aCache->SetWrapper(aReflector);
   15107           0 :   creator.InitializationSucceeded();
   15108             : 
   15109           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
   15110             :              aCache->GetWrapperPreserveColor() == aReflector);
   15111             :   // If proto != canonicalProto, we have to preserve our wrapper;
   15112             :   // otherwise we won't be able to properly recreate it later, since
   15113             :   // we won't know what proto to use.  Note that we don't check
   15114             :   // aGivenProto here, since it's entirely possible (and even
   15115             :   // somewhat common) to have a non-null aGivenProto which is the
   15116             :   // same as canonicalProto.
   15117           0 :   if (proto != canonicalProto) {
   15118           0 :     PreserveWrapper(aObject);
   15119             :   }
   15120             : 
   15121           0 :   return true;
   15122             : }
   15123             : 
   15124             : const NativePropertyHooks sNativePropertyHooks[] = { {
   15125             :   nullptr,
   15126             :   nullptr,
   15127             :   nullptr,
   15128             :   { nullptr, nullptr },
   15129             :   prototypes::id::WebGLSampler,
   15130             :   constructors::id::WebGLSampler,
   15131             :   nullptr,
   15132             :   &DefaultXrayExpandoObjectClass
   15133             : } };
   15134             : 
   15135             : void
   15136           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
   15137             : {
   15138           0 :   JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
   15139           0 :   if (!parentProto) {
   15140           0 :     return;
   15141             :   }
   15142             : 
   15143           0 :   JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
   15144           0 :   if (!constructorProto) {
   15145           0 :     return;
   15146             :   }
   15147             : 
   15148           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::WebGLSampler);
   15149           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::WebGLSampler);
   15150           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
   15151             :                               &sPrototypeClass.mBase, protoCache,
   15152             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
   15153             :                               interfaceCache,
   15154             :                               nullptr,
   15155             :                               nullptr,
   15156             :                               "WebGLSampler", aDefineOnGlobal,
   15157             :                               nullptr,
   15158           0 :                               false);
   15159             : }
   15160             : 
   15161             : JS::Handle<JSObject*>
   15162           0 : GetProtoObjectHandle(JSContext* aCx)
   15163             : {
   15164             :   /* Get the interface prototype object for this class.  This will create the
   15165             :      object as needed. */
   15166           0 :   bool aDefineOnGlobal = true;
   15167             : 
   15168             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   15169           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   15170           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   15171           0 :     return nullptr;
   15172             :   }
   15173             : 
   15174             :   /* Check to see whether the interface objects are already installed */
   15175           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   15176           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::WebGLSampler)) {
   15177           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   15178           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   15179             :   }
   15180             : 
   15181             :   /*
   15182             :    * The object might _still_ be null, but that's OK.
   15183             :    *
   15184             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   15185             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   15186             :    * changed after they have been set.
   15187             :    *
   15188             :    * Calling address() avoids the read read barrier that does gray
   15189             :    * unmarking, but it's not possible for the object to be gray here.
   15190             :    */
   15191             : 
   15192           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::WebGLSampler);
   15193           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   15194           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   15195             : }
   15196             : 
   15197             : JS::Handle<JSObject*>
   15198           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
   15199             : {
   15200             :   /* Get the interface object for this class.  This will create the object as
   15201             :      needed. */
   15202             : 
   15203             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   15204           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   15205           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   15206           0 :     return nullptr;
   15207             :   }
   15208             : 
   15209             :   /* Check to see whether the interface objects are already installed */
   15210           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   15211           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::WebGLSampler)) {
   15212           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   15213           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   15214             :   }
   15215             : 
   15216             :   /*
   15217             :    * The object might _still_ be null, but that's OK.
   15218             :    *
   15219             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   15220             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   15221             :    * changed after they have been set.
   15222             :    *
   15223             :    * Calling address() avoids the read read barrier that does gray
   15224             :    * unmarking, but it's not possible for the object to be gray here.
   15225             :    */
   15226             : 
   15227           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::WebGLSampler);
   15228           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   15229           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   15230             : }
   15231             : 
   15232             : JSObject*
   15233           0 : GetConstructorObject(JSContext* aCx)
   15234             : {
   15235           0 :   return GetConstructorObjectHandle(aCx);
   15236             : }
   15237             : 
   15238             : } // namespace WebGLSamplerBinding
   15239             : 
   15240             : 
   15241             : 
   15242             : namespace WebGLSyncBinding {
   15243             : 
   15244             : static bool
   15245           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
   15246             : {
   15247           0 :   mozilla::WebGLSync* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLSync>(obj);
   15248             :   // We don't want to preserve if we don't have a wrapper, and we
   15249             :   // obviously can't preserve if we're not initialized.
   15250           0 :   if (self && self->GetWrapperPreserveColor()) {
   15251           0 :     PreserveWrapper(self);
   15252             :   }
   15253           0 :   return true;
   15254             : }
   15255             : 
   15256             : static void
   15257           0 : _finalize(js::FreeOp* fop, JSObject* obj)
   15258             : {
   15259           0 :   mozilla::WebGLSync* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLSync>(obj);
   15260           0 :   if (self) {
   15261           0 :     ClearWrapper(self, self, obj);
   15262           0 :     AddForDeferredFinalization<mozilla::WebGLSync>(self);
   15263             :   }
   15264           0 : }
   15265             : 
   15266             : static void
   15267           0 : _objectMoved(JSObject* obj, const JSObject* old)
   15268             : {
   15269           0 :   mozilla::WebGLSync* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLSync>(obj);
   15270           0 :   if (self) {
   15271           0 :     UpdateWrapper(self, self, obj, old);
   15272             :   }
   15273           0 : }
   15274             : 
   15275             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
   15276             :   {
   15277             :     "Function",
   15278             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
   15279             :     &sBoringInterfaceObjectClassClassOps,
   15280             :     JS_NULL_CLASS_SPEC,
   15281             :     JS_NULL_CLASS_EXT,
   15282             :     &sInterfaceObjectClassObjectOps
   15283             :   },
   15284             :   eInterface,
   15285             :   true,
   15286             :   prototypes::id::WebGLSync,
   15287             :   PrototypeTraits<prototypes::id::WebGLSync>::Depth,
   15288             :   sNativePropertyHooks,
   15289             :   "function WebGLSync() {\n    [native code]\n}",
   15290             :   JS::GetRealmFunctionPrototype
   15291             : };
   15292             : 
   15293             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
   15294             :   {
   15295             :     "WebGLSyncPrototype",
   15296             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
   15297             :     JS_NULL_CLASS_OPS,
   15298             :     JS_NULL_CLASS_SPEC,
   15299             :     JS_NULL_CLASS_EXT,
   15300             :     JS_NULL_OBJECT_OPS
   15301             :   },
   15302             :   eInterfacePrototype,
   15303             :   false,
   15304             :   prototypes::id::WebGLSync,
   15305             :   PrototypeTraits<prototypes::id::WebGLSync>::Depth,
   15306             :   sNativePropertyHooks,
   15307             :   "[object WebGLSyncPrototype]",
   15308             :   JS::GetRealmObjectPrototype
   15309             : };
   15310             : 
   15311             : bool
   15312           0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
   15313             : {
   15314             :   static bool sPrefValue;
   15315             :   static bool sPrefCacheSetUp = false;
   15316           0 :   if (!sPrefCacheSetUp) {
   15317           0 :     sPrefCacheSetUp = true;
   15318           0 :     Preferences::AddBoolVarCache(&sPrefValue, "webgl.enable-webgl2");
   15319             :   }
   15320             : 
   15321           0 :   return sPrefValue;
   15322             : }
   15323             : 
   15324             : JSObject*
   15325           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
   15326             : {
   15327           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
   15328             : }
   15329             : 
   15330             : static const js::ClassOps sClassOps = {
   15331             :   _addProperty, /* addProperty */
   15332             :   nullptr,               /* delProperty */
   15333             :   nullptr,               /* getProperty */
   15334             :   nullptr,               /* setProperty */
   15335             :   nullptr,               /* enumerate */
   15336             :   nullptr, /* newEnumerate */
   15337             :   nullptr, /* resolve */
   15338             :   nullptr, /* mayResolve */
   15339             :   _finalize, /* finalize */
   15340             :   nullptr, /* call */
   15341             :   nullptr,               /* hasInstance */
   15342             :   nullptr,               /* construct */
   15343             :   nullptr, /* trace */
   15344             : };
   15345             : 
   15346             : static const js::ClassExtension sClassExtension = {
   15347             :   nullptr, /* weakmapKeyDelegateOp */
   15348             :   _objectMoved /* objectMovedOp */
   15349             : };
   15350             : 
   15351             : static const DOMJSClass sClass = {
   15352             :   { "WebGLSync",
   15353             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
   15354             :     &sClassOps,
   15355             :     JS_NULL_CLASS_SPEC,
   15356             :     &sClassExtension,
   15357             :     JS_NULL_OBJECT_OPS
   15358             :   },
   15359             :   { prototypes::id::WebGLSync, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
   15360             :   IsBaseOf<nsISupports, mozilla::WebGLSync >::value,
   15361             :   sNativePropertyHooks,
   15362             :   FindAssociatedGlobalForNative<mozilla::WebGLSync>::Get,
   15363             :   GetProtoObjectHandle,
   15364             :   GetCCParticipant<mozilla::WebGLSync>::Get()
   15365             : };
   15366             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
   15367             :               "Must have the right minimal number of reserved slots.");
   15368             : static_assert(1 >= 1,
   15369             :               "Must have enough reserved slots.");
   15370             : 
   15371             : const JSClass*
   15372           0 : GetJSClass()
   15373             : {
   15374           0 :   return sClass.ToJSClass();
   15375             : }
   15376             : 
   15377             : bool
   15378           0 : Wrap(JSContext* aCx, mozilla::WebGLSync* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
   15379             : {
   15380             :   MOZ_ASSERT(static_cast<mozilla::WebGLSync*>(aObject) ==
   15381             :              reinterpret_cast<mozilla::WebGLSync*>(aObject),
   15382             :              "Multiple inheritance for mozilla::WebGLSync is broken.");
   15383           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
   15384           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
   15385           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
   15386             :              "You should probably not be using Wrap() directly; use "
   15387             :              "GetOrCreateDOMReflector instead");
   15388             : 
   15389           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
   15390             :              "nsISupports must be on our primary inheritance chain");
   15391             : 
   15392           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
   15393           0 :   if (!global) {
   15394           0 :     return false;
   15395             :   }
   15396           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
   15397           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
   15398             : 
   15399             :   // That might have ended up wrapping us already, due to the wonders
   15400             :   // of XBL.  Check for that, and bail out as needed.
   15401           0 :   aReflector.set(aCache->GetWrapper());
   15402           0 :   if (aReflector) {
   15403             : #ifdef DEBUG
   15404           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
   15405             : #endif // DEBUG
   15406           0 :     return true;
   15407             :   }
   15408             : 
   15409           0 :   JSAutoCompartment ac(aCx, global);
   15410           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
   15411           0 :   if (!canonicalProto) {
   15412           0 :     return false;
   15413             :   }
   15414           0 :   JS::Rooted<JSObject*> proto(aCx);
   15415           0 :   if (aGivenProto) {
   15416           0 :     proto = aGivenProto;
   15417             :     // Unfortunately, while aGivenProto was in the compartment of aCx
   15418             :     // coming in, we changed compartments to that of "parent" so may need
   15419             :     // to wrap the proto here.
   15420           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
   15421           0 :       if (!JS_WrapObject(aCx, &proto)) {
   15422           0 :         return false;
   15423             :       }
   15424             :     }
   15425             :   } else {
   15426           0 :     proto = canonicalProto;
   15427             :   }
   15428             : 
   15429           0 :   BindingJSObjectCreator<mozilla::WebGLSync> creator(aCx);
   15430           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
   15431           0 :   if (!aReflector) {
   15432           0 :     return false;
   15433             :   }
   15434             : 
   15435           0 :   aCache->SetWrapper(aReflector);
   15436           0 :   creator.InitializationSucceeded();
   15437             : 
   15438           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
   15439             :              aCache->GetWrapperPreserveColor() == aReflector);
   15440             :   // If proto != canonicalProto, we have to preserve our wrapper;
   15441             :   // otherwise we won't be able to properly recreate it later, since
   15442             :   // we won't know what proto to use.  Note that we don't check
   15443             :   // aGivenProto here, since it's entirely possible (and even
   15444             :   // somewhat common) to have a non-null aGivenProto which is the
   15445             :   // same as canonicalProto.
   15446           0 :   if (proto != canonicalProto) {
   15447           0 :     PreserveWrapper(aObject);
   15448             :   }
   15449             : 
   15450           0 :   return true;
   15451             : }
   15452             : 
   15453             : const NativePropertyHooks sNativePropertyHooks[] = { {
   15454             :   nullptr,
   15455             :   nullptr,
   15456             :   nullptr,
   15457             :   { nullptr, nullptr },
   15458             :   prototypes::id::WebGLSync,
   15459             :   constructors::id::WebGLSync,
   15460             :   nullptr,
   15461             :   &DefaultXrayExpandoObjectClass
   15462             : } };
   15463             : 
   15464             : void
   15465           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
   15466             : {
   15467           0 :   JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
   15468           0 :   if (!parentProto) {
   15469           0 :     return;
   15470             :   }
   15471             : 
   15472           0 :   JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
   15473           0 :   if (!constructorProto) {
   15474           0 :     return;
   15475             :   }
   15476             : 
   15477           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::WebGLSync);
   15478           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::WebGLSync);
   15479           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
   15480             :                               &sPrototypeClass.mBase, protoCache,
   15481             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
   15482             :                               interfaceCache,
   15483             :                               nullptr,
   15484             :                               nullptr,
   15485             :                               "WebGLSync", aDefineOnGlobal,
   15486             :                               nullptr,
   15487           0 :                               false);
   15488             : }
   15489             : 
   15490             : JS::Handle<JSObject*>
   15491           0 : GetProtoObjectHandle(JSContext* aCx)
   15492             : {
   15493             :   /* Get the interface prototype object for this class.  This will create the
   15494             :      object as needed. */
   15495           0 :   bool aDefineOnGlobal = true;
   15496             : 
   15497             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   15498           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   15499           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   15500           0 :     return nullptr;
   15501             :   }
   15502             : 
   15503             :   /* Check to see whether the interface objects are already installed */
   15504           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   15505           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::WebGLSync)) {
   15506           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   15507           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   15508             :   }
   15509             : 
   15510             :   /*
   15511             :    * The object might _still_ be null, but that's OK.
   15512             :    *
   15513             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   15514             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   15515             :    * changed after they have been set.
   15516             :    *
   15517             :    * Calling address() avoids the read read barrier that does gray
   15518             :    * unmarking, but it's not possible for the object to be gray here.
   15519             :    */
   15520             : 
   15521           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::WebGLSync);
   15522           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   15523           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   15524             : }
   15525             : 
   15526             : JS::Handle<JSObject*>
   15527           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
   15528             : {
   15529             :   /* Get the interface object for this class.  This will create the object as
   15530             :      needed. */
   15531             : 
   15532             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   15533           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   15534           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   15535           0 :     return nullptr;
   15536             :   }
   15537             : 
   15538             :   /* Check to see whether the interface objects are already installed */
   15539           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   15540           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::WebGLSync)) {
   15541           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   15542           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   15543             :   }
   15544             : 
   15545             :   /*
   15546             :    * The object might _still_ be null, but that's OK.
   15547             :    *
   15548             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   15549             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   15550             :    * changed after they have been set.
   15551             :    *
   15552             :    * Calling address() avoids the read read barrier that does gray
   15553             :    * unmarking, but it's not possible for the object to be gray here.
   15554             :    */
   15555             : 
   15556           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::WebGLSync);
   15557           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   15558           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   15559             : }
   15560             : 
   15561             : JSObject*
   15562           0 : GetConstructorObject(JSContext* aCx)
   15563             : {
   15564           0 :   return GetConstructorObjectHandle(aCx);
   15565             : }
   15566             : 
   15567             : } // namespace WebGLSyncBinding
   15568             : 
   15569             : 
   15570             : 
   15571             : namespace WebGLTransformFeedbackBinding {
   15572             : 
   15573             : static bool
   15574           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
   15575             : {
   15576           0 :   mozilla::WebGLTransformFeedback* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLTransformFeedback>(obj);
   15577             :   // We don't want to preserve if we don't have a wrapper, and we
   15578             :   // obviously can't preserve if we're not initialized.
   15579           0 :   if (self && self->GetWrapperPreserveColor()) {
   15580           0 :     PreserveWrapper(self);
   15581             :   }
   15582           0 :   return true;
   15583             : }
   15584             : 
   15585             : static void
   15586           0 : _finalize(js::FreeOp* fop, JSObject* obj)
   15587             : {
   15588           0 :   mozilla::WebGLTransformFeedback* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLTransformFeedback>(obj);
   15589           0 :   if (self) {
   15590           0 :     ClearWrapper(self, self, obj);
   15591           0 :     AddForDeferredFinalization<mozilla::WebGLTransformFeedback>(self);
   15592             :   }
   15593           0 : }
   15594             : 
   15595             : static void
   15596           0 : _objectMoved(JSObject* obj, const JSObject* old)
   15597             : {
   15598           0 :   mozilla::WebGLTransformFeedback* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::WebGLTransformFeedback>(obj);
   15599           0 :   if (self) {
   15600           0 :     UpdateWrapper(self, self, obj, old);
   15601             :   }
   15602           0 : }
   15603             : 
   15604             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
   15605             :   {
   15606             :     "Function",
   15607             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
   15608             :     &sBoringInterfaceObjectClassClassOps,
   15609             :     JS_NULL_CLASS_SPEC,
   15610             :     JS_NULL_CLASS_EXT,
   15611             :     &sInterfaceObjectClassObjectOps
   15612             :   },
   15613             :   eInterface,
   15614             :   true,
   15615             :   prototypes::id::WebGLTransformFeedback,
   15616             :   PrototypeTraits<prototypes::id::WebGLTransformFeedback>::Depth,
   15617             :   sNativePropertyHooks,
   15618             :   "function WebGLTransformFeedback() {\n    [native code]\n}",
   15619             :   JS::GetRealmFunctionPrototype
   15620             : };
   15621             : 
   15622             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
   15623             :   {
   15624             :     "WebGLTransformFeedbackPrototype",
   15625             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
   15626             :     JS_NULL_CLASS_OPS,
   15627             :     JS_NULL_CLASS_SPEC,
   15628             :     JS_NULL_CLASS_EXT,
   15629             :     JS_NULL_OBJECT_OPS
   15630             :   },
   15631             :   eInterfacePrototype,
   15632             :   false,
   15633             :   prototypes::id::WebGLTransformFeedback,
   15634             :   PrototypeTraits<prototypes::id::WebGLTransformFeedback>::Depth,
   15635             :   sNativePropertyHooks,
   15636             :   "[object WebGLTransformFeedbackPrototype]",
   15637             :   JS::GetRealmObjectPrototype
   15638             : };
   15639             : 
   15640             : bool
   15641           0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
   15642             : {
   15643             :   static bool sPrefValue;
   15644             :   static bool sPrefCacheSetUp = false;
   15645           0 :   if (!sPrefCacheSetUp) {
   15646           0 :     sPrefCacheSetUp = true;
   15647           0 :     Preferences::AddBoolVarCache(&sPrefValue, "webgl.enable-webgl2");
   15648             :   }
   15649             : 
   15650           0 :   return sPrefValue;
   15651             : }
   15652             : 
   15653             : JSObject*
   15654           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
   15655             : {
   15656           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
   15657             : }
   15658             : 
   15659             : static const js::ClassOps sClassOps = {
   15660             :   _addProperty, /* addProperty */
   15661             :   nullptr,               /* delProperty */
   15662             :   nullptr,               /* getProperty */
   15663             :   nullptr,               /* setProperty */
   15664             :   nullptr,               /* enumerate */
   15665             :   nullptr, /* newEnumerate */
   15666             :   nullptr, /* resolve */
   15667             :   nullptr, /* mayResolve */
   15668             :   _finalize, /* finalize */
   15669             :   nullptr, /* call */
   15670             :   nullptr,               /* hasInstance */
   15671             :   nullptr,               /* construct */
   15672             :   nullptr, /* trace */
   15673             : };
   15674             : 
   15675             : static const js::ClassExtension sClassExtension = {
   15676             :   nullptr, /* weakmapKeyDelegateOp */
   15677             :   _objectMoved /* objectMovedOp */
   15678             : };
   15679             : 
   15680             : static const DOMJSClass sClass = {
   15681             :   { "WebGLTransformFeedback",
   15682             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
   15683             :     &sClassOps,
   15684             :     JS_NULL_CLASS_SPEC,
   15685             :     &sClassExtension,
   15686             :     JS_NULL_OBJECT_OPS
   15687             :   },
   15688             :   { prototypes::id::WebGLTransformFeedback, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
   15689             :   IsBaseOf<nsISupports, mozilla::WebGLTransformFeedback >::value,
   15690             :   sNativePropertyHooks,
   15691             :   FindAssociatedGlobalForNative<mozilla::WebGLTransformFeedback>::Get,
   15692             :   GetProtoObjectHandle,
   15693             :   GetCCParticipant<mozilla::WebGLTransformFeedback>::Get()
   15694             : };
   15695             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
   15696             :               "Must have the right minimal number of reserved slots.");
   15697             : static_assert(1 >= 1,
   15698             :               "Must have enough reserved slots.");
   15699             : 
   15700             : const JSClass*
   15701           0 : GetJSClass()
   15702             : {
   15703           0 :   return sClass.ToJSClass();
   15704             : }
   15705             : 
   15706             : bool
   15707           0 : Wrap(JSContext* aCx, mozilla::WebGLTransformFeedback* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
   15708             : {
   15709             :   MOZ_ASSERT(static_cast<mozilla::WebGLTransformFeedback*>(aObject) ==
   15710             :              reinterpret_cast<mozilla::WebGLTransformFeedback*>(aObject),
   15711             :              "Multiple inheritance for mozilla::WebGLTransformFeedback is broken.");
   15712           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
   15713           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
   15714           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
   15715             :              "You should probably not be using Wrap() directly; use "
   15716             :              "GetOrCreateDOMReflector instead");
   15717             : 
   15718           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
   15719             :              "nsISupports must be on our primary inheritance chain");
   15720             : 
   15721           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
   15722           0 :   if (!global) {
   15723           0 :     return false;
   15724             :   }
   15725           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
   15726           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
   15727             : 
   15728             :   // That might have ended up wrapping us already, due to the wonders
   15729             :   // of XBL.  Check for that, and bail out as needed.
   15730           0 :   aReflector.set(aCache->GetWrapper());
   15731           0 :   if (aReflector) {
   15732             : #ifdef DEBUG
   15733           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
   15734             : #endif // DEBUG
   15735           0 :     return true;
   15736             :   }
   15737             : 
   15738           0 :   JSAutoCompartment ac(aCx, global);
   15739           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
   15740           0 :   if (!canonicalProto) {
   15741           0 :     return false;
   15742             :   }
   15743           0 :   JS::Rooted<JSObject*> proto(aCx);
   15744           0 :   if (aGivenProto) {
   15745           0 :     proto = aGivenProto;
   15746             :     // Unfortunately, while aGivenProto was in the compartment of aCx
   15747             :     // coming in, we changed compartments to that of "parent" so may need
   15748             :     // to wrap the proto here.
   15749           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
   15750           0 :       if (!JS_WrapObject(aCx, &proto)) {
   15751           0 :         return false;
   15752             :       }
   15753             :     }
   15754             :   } else {
   15755           0 :     proto = canonicalProto;
   15756             :   }
   15757             : 
   15758           0 :   BindingJSObjectCreator<mozilla::WebGLTransformFeedback> creator(aCx);
   15759           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
   15760           0 :   if (!aReflector) {
   15761           0 :     return false;
   15762             :   }
   15763             : 
   15764           0 :   aCache->SetWrapper(aReflector);
   15765           0 :   creator.InitializationSucceeded();
   15766             : 
   15767           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
   15768             :              aCache->GetWrapperPreserveColor() == aReflector);
   15769             :   // If proto != canonicalProto, we have to preserve our wrapper;
   15770             :   // otherwise we won't be able to properly recreate it later, since
   15771             :   // we won't know what proto to use.  Note that we don't check
   15772             :   // aGivenProto here, since it's entirely possible (and even
   15773             :   // somewhat common) to have a non-null aGivenProto which is the
   15774             :   // same as canonicalProto.
   15775           0 :   if (proto != canonicalProto) {
   15776           0 :     PreserveWrapper(aObject);
   15777             :   }
   15778             : 
   15779           0 :   return true;
   15780             : }
   15781             : 
   15782             : const NativePropertyHooks sNativePropertyHooks[] = { {
   15783             :   nullptr,
   15784             :   nullptr,
   15785             :   nullptr,
   15786             :   { nullptr, nullptr },
   15787             :   prototypes::id::WebGLTransformFeedback,
   15788             :   constructors::id::WebGLTransformFeedback,
   15789             :   nullptr,
   15790             :   &DefaultXrayExpandoObjectClass
   15791             : } };
   15792             : 
   15793             : void
   15794           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
   15795             : {
   15796           0 :   JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
   15797           0 :   if (!parentProto) {
   15798           0 :     return;
   15799             :   }
   15800             : 
   15801           0 :   JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
   15802           0 :   if (!constructorProto) {
   15803           0 :     return;
   15804             :   }
   15805             : 
   15806           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::WebGLTransformFeedback);
   15807           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::WebGLTransformFeedback);
   15808           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
   15809             :                               &sPrototypeClass.mBase, protoCache,
   15810             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
   15811             :                               interfaceCache,
   15812             :                               nullptr,
   15813             :                               nullptr,
   15814             :                               "WebGLTransformFeedback", aDefineOnGlobal,
   15815             :                               nullptr,
   15816           0 :                               false);
   15817             : }
   15818             : 
   15819             : JS::Handle<JSObject*>
   15820           0 : GetProtoObjectHandle(JSContext* aCx)
   15821             : {
   15822             :   /* Get the interface prototype object for this class.  This will create the
   15823             :      object as needed. */
   15824           0 :   bool aDefineOnGlobal = true;
   15825             : 
   15826             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   15827           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   15828           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   15829           0 :     return nullptr;
   15830             :   }
   15831             : 
   15832             :   /* Check to see whether the interface objects are already installed */
   15833           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   15834           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::WebGLTransformFeedback)) {
   15835           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   15836           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   15837             :   }
   15838             : 
   15839             :   /*
   15840             :    * The object might _still_ be null, but that's OK.
   15841             :    *
   15842             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   15843             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   15844             :    * changed after they have been set.
   15845             :    *
   15846             :    * Calling address() avoids the read read barrier that does gray
   15847             :    * unmarking, but it's not possible for the object to be gray here.
   15848             :    */
   15849             : 
   15850           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::WebGLTransformFeedback);
   15851           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   15852           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   15853             : }
   15854             : 
   15855             : JS::Handle<JSObject*>
   15856           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
   15857             : {
   15858             :   /* Get the interface object for this class.  This will create the object as
   15859             :      needed. */
   15860             : 
   15861             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
   15862           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
   15863           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
   15864           0 :     return nullptr;
   15865             :   }
   15866             : 
   15867             :   /* Check to see whether the interface objects are already installed */
   15868           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
   15869           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::WebGLTransformFeedback)) {
   15870           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
   15871           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
   15872             :   }
   15873             : 
   15874             :   /*
   15875             :    * The object might _still_ be null, but that's OK.
   15876             :    *
   15877             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
   15878             :    * traced by TraceProtoAndIfaceCache() and its contents are never
   15879             :    * changed after they have been set.
   15880             :    *
   15881             :    * Calling address() avoids the read read barrier that does gray
   15882             :    * unmarking, but it's not possible for the object to be gray here.
   15883             :    */
   15884             : 
   15885           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::WebGLTransformFeedback);
   15886           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
   15887           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
   15888             : }
   15889             : 
   15890             : JSObject*
   15891           0 : GetConstructorObject(JSContext* aCx)
   15892             : {
   15893           0 :   return GetConstructorObjectHandle(aCx);
   15894             : }
   15895             : 
   15896             : } // namespace WebGLTransformFeedbackBinding
   15897             : 
   15898             : 
   15899             : 
   15900             : } // namespace dom
   15901             : } // namespace mozilla

Generated by: LCOV version 1.13