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

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM DOMMatrix.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "DOMMatrixBinding.h"
       4             : #include "DOMPointBinding.h"
       5             : #include "WrapperFactory.h"
       6             : #include "jsfriendapi.h"
       7             : #include "mozilla/OwningNonNull.h"
       8             : #include "mozilla/Preferences.h"
       9             : #include "mozilla/dom/BindingUtils.h"
      10             : #include "mozilla/dom/DOMJSClass.h"
      11             : #include "mozilla/dom/DOMMatrix.h"
      12             : #include "mozilla/dom/DOMPoint.h"
      13             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      14             : #include "mozilla/dom/PrimitiveConversions.h"
      15             : #include "mozilla/dom/TypedArray.h"
      16             : #include "mozilla/dom/XrayExpandoClass.h"
      17             : 
      18             : namespace mozilla {
      19             : namespace dom {
      20             : 
      21             : namespace DOMMatrixBinding {
      22             : 
      23             : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<DOMMatrixReadOnlyBinding::NativeType>::value,
      24             :               "Can't inherit from an interface with a different ownership model.");
      25             : 
      26             : static bool
      27           0 : get_a(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
      28             : {
      29           0 :   double result(self->A());
      30           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      31           0 :   args.rval().set(JS_NumberValue(double(result)));
      32           0 :   return true;
      33             : }
      34             : 
      35             : static bool
      36           0 : set_a(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
      37             : {
      38             :   double arg0;
      39           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
      40           0 :     return false;
      41             :   }
      42           0 :   self->SetA(arg0);
      43           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      44             : 
      45           0 :   return true;
      46             : }
      47             : 
      48             : static const JSJitInfo a_getterinfo = {
      49             :   { (JSJitGetterOp)get_a },
      50             :   { prototypes::id::DOMMatrix },
      51             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
      52             :   JSJitInfo::Getter,
      53             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
      54             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
      55             :   true,  /* isInfallible. False in setters. */
      56             :   false,  /* isMovable.  Not relevant for setters. */
      57             :   false, /* isEliminatable.  Not relevant for setters. */
      58             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
      59             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
      60             :   false,  /* isTypedMethod.  Only relevant for methods. */
      61             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
      62             : };
      63             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
      64             : static_assert(0 < 1, "There is no slot for us");
      65             : static const JSJitInfo a_setterinfo = {
      66             :   { (JSJitGetterOp)set_a },
      67             :   { prototypes::id::DOMMatrix },
      68             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
      69             :   JSJitInfo::Setter,
      70             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
      71             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
      72             :   false,  /* isInfallible. False in setters. */
      73             :   false,  /* isMovable.  Not relevant for setters. */
      74             :   false, /* isEliminatable.  Not relevant for setters. */
      75             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
      76             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
      77             :   false,  /* isTypedMethod.  Only relevant for methods. */
      78             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
      79             : };
      80             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
      81             : static_assert(0 < 1, "There is no slot for us");
      82             : 
      83             : static bool
      84           0 : get_b(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
      85             : {
      86           0 :   double result(self->B());
      87           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      88           0 :   args.rval().set(JS_NumberValue(double(result)));
      89           0 :   return true;
      90             : }
      91             : 
      92             : static bool
      93           0 : set_b(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
      94             : {
      95             :   double arg0;
      96           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
      97           0 :     return false;
      98             :   }
      99           0 :   self->SetB(arg0);
     100           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     101             : 
     102           0 :   return true;
     103             : }
     104             : 
     105             : static const JSJitInfo b_getterinfo = {
     106             :   { (JSJitGetterOp)get_b },
     107             :   { prototypes::id::DOMMatrix },
     108             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     109             :   JSJitInfo::Getter,
     110             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     111             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     112             :   true,  /* isInfallible. False in setters. */
     113             :   false,  /* isMovable.  Not relevant for setters. */
     114             :   false, /* isEliminatable.  Not relevant for setters. */
     115             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     116             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     117             :   false,  /* isTypedMethod.  Only relevant for methods. */
     118             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     119             : };
     120             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     121             : static_assert(0 < 1, "There is no slot for us");
     122             : static const JSJitInfo b_setterinfo = {
     123             :   { (JSJitGetterOp)set_b },
     124             :   { prototypes::id::DOMMatrix },
     125             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     126             :   JSJitInfo::Setter,
     127             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     128             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     129             :   false,  /* isInfallible. False in setters. */
     130             :   false,  /* isMovable.  Not relevant for setters. */
     131             :   false, /* isEliminatable.  Not relevant for setters. */
     132             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     133             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     134             :   false,  /* isTypedMethod.  Only relevant for methods. */
     135             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     136             : };
     137             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     138             : static_assert(0 < 1, "There is no slot for us");
     139             : 
     140             : static bool
     141           0 : get_c(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     142             : {
     143           0 :   double result(self->C());
     144           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     145           0 :   args.rval().set(JS_NumberValue(double(result)));
     146           0 :   return true;
     147             : }
     148             : 
     149             : static bool
     150           0 : set_c(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     151             : {
     152             :   double arg0;
     153           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     154           0 :     return false;
     155             :   }
     156           0 :   self->SetC(arg0);
     157           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     158             : 
     159           0 :   return true;
     160             : }
     161             : 
     162             : static const JSJitInfo c_getterinfo = {
     163             :   { (JSJitGetterOp)get_c },
     164             :   { prototypes::id::DOMMatrix },
     165             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     166             :   JSJitInfo::Getter,
     167             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     168             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     169             :   true,  /* isInfallible. False in setters. */
     170             :   false,  /* isMovable.  Not relevant for setters. */
     171             :   false, /* isEliminatable.  Not relevant for setters. */
     172             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     173             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     174             :   false,  /* isTypedMethod.  Only relevant for methods. */
     175             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     176             : };
     177             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     178             : static_assert(0 < 1, "There is no slot for us");
     179             : static const JSJitInfo c_setterinfo = {
     180             :   { (JSJitGetterOp)set_c },
     181             :   { prototypes::id::DOMMatrix },
     182             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     183             :   JSJitInfo::Setter,
     184             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     185             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     186             :   false,  /* isInfallible. False in setters. */
     187             :   false,  /* isMovable.  Not relevant for setters. */
     188             :   false, /* isEliminatable.  Not relevant for setters. */
     189             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     190             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     191             :   false,  /* isTypedMethod.  Only relevant for methods. */
     192             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     193             : };
     194             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     195             : static_assert(0 < 1, "There is no slot for us");
     196             : 
     197             : static bool
     198           0 : get_d(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     199             : {
     200           0 :   double result(self->D());
     201           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     202           0 :   args.rval().set(JS_NumberValue(double(result)));
     203           0 :   return true;
     204             : }
     205             : 
     206             : static bool
     207           0 : set_d(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     208             : {
     209             :   double arg0;
     210           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     211           0 :     return false;
     212             :   }
     213           0 :   self->SetD(arg0);
     214           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     215             : 
     216           0 :   return true;
     217             : }
     218             : 
     219             : static const JSJitInfo d_getterinfo = {
     220             :   { (JSJitGetterOp)get_d },
     221             :   { prototypes::id::DOMMatrix },
     222             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     223             :   JSJitInfo::Getter,
     224             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     225             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     226             :   true,  /* isInfallible. False in setters. */
     227             :   false,  /* isMovable.  Not relevant for setters. */
     228             :   false, /* isEliminatable.  Not relevant for setters. */
     229             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     230             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     231             :   false,  /* isTypedMethod.  Only relevant for methods. */
     232             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     233             : };
     234             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     235             : static_assert(0 < 1, "There is no slot for us");
     236             : static const JSJitInfo d_setterinfo = {
     237             :   { (JSJitGetterOp)set_d },
     238             :   { prototypes::id::DOMMatrix },
     239             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     240             :   JSJitInfo::Setter,
     241             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     242             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     243             :   false,  /* isInfallible. False in setters. */
     244             :   false,  /* isMovable.  Not relevant for setters. */
     245             :   false, /* isEliminatable.  Not relevant for setters. */
     246             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     247             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     248             :   false,  /* isTypedMethod.  Only relevant for methods. */
     249             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     250             : };
     251             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     252             : static_assert(0 < 1, "There is no slot for us");
     253             : 
     254             : static bool
     255           0 : get_e(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     256             : {
     257           0 :   double result(self->E());
     258           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     259           0 :   args.rval().set(JS_NumberValue(double(result)));
     260           0 :   return true;
     261             : }
     262             : 
     263             : static bool
     264           0 : set_e(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     265             : {
     266             :   double arg0;
     267           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     268           0 :     return false;
     269             :   }
     270           0 :   self->SetE(arg0);
     271           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     272             : 
     273           0 :   return true;
     274             : }
     275             : 
     276             : static const JSJitInfo e_getterinfo = {
     277             :   { (JSJitGetterOp)get_e },
     278             :   { prototypes::id::DOMMatrix },
     279             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     280             :   JSJitInfo::Getter,
     281             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     282             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     283             :   true,  /* isInfallible. False in setters. */
     284             :   false,  /* isMovable.  Not relevant for setters. */
     285             :   false, /* isEliminatable.  Not relevant for setters. */
     286             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     287             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     288             :   false,  /* isTypedMethod.  Only relevant for methods. */
     289             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     290             : };
     291             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     292             : static_assert(0 < 1, "There is no slot for us");
     293             : static const JSJitInfo e_setterinfo = {
     294             :   { (JSJitGetterOp)set_e },
     295             :   { prototypes::id::DOMMatrix },
     296             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     297             :   JSJitInfo::Setter,
     298             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     299             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     300             :   false,  /* isInfallible. False in setters. */
     301             :   false,  /* isMovable.  Not relevant for setters. */
     302             :   false, /* isEliminatable.  Not relevant for setters. */
     303             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     304             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     305             :   false,  /* isTypedMethod.  Only relevant for methods. */
     306             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     307             : };
     308             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     309             : static_assert(0 < 1, "There is no slot for us");
     310             : 
     311             : static bool
     312           0 : get_f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     313             : {
     314           0 :   double result(self->F());
     315           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     316           0 :   args.rval().set(JS_NumberValue(double(result)));
     317           0 :   return true;
     318             : }
     319             : 
     320             : static bool
     321           0 : set_f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     322             : {
     323             :   double arg0;
     324           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     325           0 :     return false;
     326             :   }
     327           0 :   self->SetF(arg0);
     328           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     329             : 
     330           0 :   return true;
     331             : }
     332             : 
     333             : static const JSJitInfo f_getterinfo = {
     334             :   { (JSJitGetterOp)get_f },
     335             :   { prototypes::id::DOMMatrix },
     336             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     337             :   JSJitInfo::Getter,
     338             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     339             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     340             :   true,  /* isInfallible. False in setters. */
     341             :   false,  /* isMovable.  Not relevant for setters. */
     342             :   false, /* isEliminatable.  Not relevant for setters. */
     343             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     344             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     345             :   false,  /* isTypedMethod.  Only relevant for methods. */
     346             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     347             : };
     348             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     349             : static_assert(0 < 1, "There is no slot for us");
     350             : static const JSJitInfo f_setterinfo = {
     351             :   { (JSJitGetterOp)set_f },
     352             :   { prototypes::id::DOMMatrix },
     353             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     354             :   JSJitInfo::Setter,
     355             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     356             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     357             :   false,  /* isInfallible. False in setters. */
     358             :   false,  /* isMovable.  Not relevant for setters. */
     359             :   false, /* isEliminatable.  Not relevant for setters. */
     360             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     361             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     362             :   false,  /* isTypedMethod.  Only relevant for methods. */
     363             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     364             : };
     365             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     366             : static_assert(0 < 1, "There is no slot for us");
     367             : 
     368             : static bool
     369           0 : get_m11(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     370             : {
     371           0 :   double result(self->M11());
     372           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     373           0 :   args.rval().set(JS_NumberValue(double(result)));
     374           0 :   return true;
     375             : }
     376             : 
     377             : static bool
     378           0 : set_m11(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     379             : {
     380             :   double arg0;
     381           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     382           0 :     return false;
     383             :   }
     384           0 :   self->SetM11(arg0);
     385           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     386             : 
     387           0 :   return true;
     388             : }
     389             : 
     390             : static const JSJitInfo m11_getterinfo = {
     391             :   { (JSJitGetterOp)get_m11 },
     392             :   { prototypes::id::DOMMatrix },
     393             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     394             :   JSJitInfo::Getter,
     395             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     396             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     397             :   true,  /* isInfallible. False in setters. */
     398             :   false,  /* isMovable.  Not relevant for setters. */
     399             :   false, /* isEliminatable.  Not relevant for setters. */
     400             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     401             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     402             :   false,  /* isTypedMethod.  Only relevant for methods. */
     403             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     404             : };
     405             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     406             : static_assert(0 < 1, "There is no slot for us");
     407             : static const JSJitInfo m11_setterinfo = {
     408             :   { (JSJitGetterOp)set_m11 },
     409             :   { prototypes::id::DOMMatrix },
     410             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     411             :   JSJitInfo::Setter,
     412             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     413             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     414             :   false,  /* isInfallible. False in setters. */
     415             :   false,  /* isMovable.  Not relevant for setters. */
     416             :   false, /* isEliminatable.  Not relevant for setters. */
     417             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     418             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     419             :   false,  /* isTypedMethod.  Only relevant for methods. */
     420             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     421             : };
     422             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     423             : static_assert(0 < 1, "There is no slot for us");
     424             : 
     425             : static bool
     426           0 : get_m12(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     427             : {
     428           0 :   double result(self->M12());
     429           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     430           0 :   args.rval().set(JS_NumberValue(double(result)));
     431           0 :   return true;
     432             : }
     433             : 
     434             : static bool
     435           0 : set_m12(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     436             : {
     437             :   double arg0;
     438           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     439           0 :     return false;
     440             :   }
     441           0 :   self->SetM12(arg0);
     442           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     443             : 
     444           0 :   return true;
     445             : }
     446             : 
     447             : static const JSJitInfo m12_getterinfo = {
     448             :   { (JSJitGetterOp)get_m12 },
     449             :   { prototypes::id::DOMMatrix },
     450             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     451             :   JSJitInfo::Getter,
     452             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     453             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     454             :   true,  /* isInfallible. False in setters. */
     455             :   false,  /* isMovable.  Not relevant for setters. */
     456             :   false, /* isEliminatable.  Not relevant for setters. */
     457             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     458             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     459             :   false,  /* isTypedMethod.  Only relevant for methods. */
     460             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     461             : };
     462             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     463             : static_assert(0 < 1, "There is no slot for us");
     464             : static const JSJitInfo m12_setterinfo = {
     465             :   { (JSJitGetterOp)set_m12 },
     466             :   { prototypes::id::DOMMatrix },
     467             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     468             :   JSJitInfo::Setter,
     469             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     470             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     471             :   false,  /* isInfallible. False in setters. */
     472             :   false,  /* isMovable.  Not relevant for setters. */
     473             :   false, /* isEliminatable.  Not relevant for setters. */
     474             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     475             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     476             :   false,  /* isTypedMethod.  Only relevant for methods. */
     477             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     478             : };
     479             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     480             : static_assert(0 < 1, "There is no slot for us");
     481             : 
     482             : static bool
     483           0 : get_m13(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     484             : {
     485           0 :   double result(self->M13());
     486           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     487           0 :   args.rval().set(JS_NumberValue(double(result)));
     488           0 :   return true;
     489             : }
     490             : 
     491             : static bool
     492           0 : set_m13(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     493             : {
     494             :   double arg0;
     495           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     496           0 :     return false;
     497             :   }
     498           0 :   self->SetM13(arg0);
     499           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     500             : 
     501           0 :   return true;
     502             : }
     503             : 
     504             : static const JSJitInfo m13_getterinfo = {
     505             :   { (JSJitGetterOp)get_m13 },
     506             :   { prototypes::id::DOMMatrix },
     507             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     508             :   JSJitInfo::Getter,
     509             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     510             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     511             :   true,  /* isInfallible. False in setters. */
     512             :   false,  /* isMovable.  Not relevant for setters. */
     513             :   false, /* isEliminatable.  Not relevant for setters. */
     514             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     515             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     516             :   false,  /* isTypedMethod.  Only relevant for methods. */
     517             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     518             : };
     519             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     520             : static_assert(0 < 1, "There is no slot for us");
     521             : static const JSJitInfo m13_setterinfo = {
     522             :   { (JSJitGetterOp)set_m13 },
     523             :   { prototypes::id::DOMMatrix },
     524             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     525             :   JSJitInfo::Setter,
     526             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     527             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     528             :   false,  /* isInfallible. False in setters. */
     529             :   false,  /* isMovable.  Not relevant for setters. */
     530             :   false, /* isEliminatable.  Not relevant for setters. */
     531             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     532             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     533             :   false,  /* isTypedMethod.  Only relevant for methods. */
     534             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     535             : };
     536             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     537             : static_assert(0 < 1, "There is no slot for us");
     538             : 
     539             : static bool
     540           0 : get_m14(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     541             : {
     542           0 :   double result(self->M14());
     543           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     544           0 :   args.rval().set(JS_NumberValue(double(result)));
     545           0 :   return true;
     546             : }
     547             : 
     548             : static bool
     549           0 : set_m14(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     550             : {
     551             :   double arg0;
     552           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     553           0 :     return false;
     554             :   }
     555           0 :   self->SetM14(arg0);
     556           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     557             : 
     558           0 :   return true;
     559             : }
     560             : 
     561             : static const JSJitInfo m14_getterinfo = {
     562             :   { (JSJitGetterOp)get_m14 },
     563             :   { prototypes::id::DOMMatrix },
     564             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     565             :   JSJitInfo::Getter,
     566             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     567             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     568             :   true,  /* isInfallible. False in setters. */
     569             :   false,  /* isMovable.  Not relevant for setters. */
     570             :   false, /* isEliminatable.  Not relevant for setters. */
     571             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     572             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     573             :   false,  /* isTypedMethod.  Only relevant for methods. */
     574             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     575             : };
     576             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     577             : static_assert(0 < 1, "There is no slot for us");
     578             : static const JSJitInfo m14_setterinfo = {
     579             :   { (JSJitGetterOp)set_m14 },
     580             :   { prototypes::id::DOMMatrix },
     581             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     582             :   JSJitInfo::Setter,
     583             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     584             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     585             :   false,  /* isInfallible. False in setters. */
     586             :   false,  /* isMovable.  Not relevant for setters. */
     587             :   false, /* isEliminatable.  Not relevant for setters. */
     588             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     589             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     590             :   false,  /* isTypedMethod.  Only relevant for methods. */
     591             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     592             : };
     593             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     594             : static_assert(0 < 1, "There is no slot for us");
     595             : 
     596             : static bool
     597           0 : get_m21(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     598             : {
     599           0 :   double result(self->M21());
     600           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     601           0 :   args.rval().set(JS_NumberValue(double(result)));
     602           0 :   return true;
     603             : }
     604             : 
     605             : static bool
     606           0 : set_m21(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     607             : {
     608             :   double arg0;
     609           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     610           0 :     return false;
     611             :   }
     612           0 :   self->SetM21(arg0);
     613           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     614             : 
     615           0 :   return true;
     616             : }
     617             : 
     618             : static const JSJitInfo m21_getterinfo = {
     619             :   { (JSJitGetterOp)get_m21 },
     620             :   { prototypes::id::DOMMatrix },
     621             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     622             :   JSJitInfo::Getter,
     623             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     624             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     625             :   true,  /* isInfallible. False in setters. */
     626             :   false,  /* isMovable.  Not relevant for setters. */
     627             :   false, /* isEliminatable.  Not relevant for setters. */
     628             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     629             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     630             :   false,  /* isTypedMethod.  Only relevant for methods. */
     631             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     632             : };
     633             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     634             : static_assert(0 < 1, "There is no slot for us");
     635             : static const JSJitInfo m21_setterinfo = {
     636             :   { (JSJitGetterOp)set_m21 },
     637             :   { prototypes::id::DOMMatrix },
     638             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     639             :   JSJitInfo::Setter,
     640             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     641             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     642             :   false,  /* isInfallible. False in setters. */
     643             :   false,  /* isMovable.  Not relevant for setters. */
     644             :   false, /* isEliminatable.  Not relevant for setters. */
     645             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     646             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     647             :   false,  /* isTypedMethod.  Only relevant for methods. */
     648             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     649             : };
     650             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     651             : static_assert(0 < 1, "There is no slot for us");
     652             : 
     653             : static bool
     654           0 : get_m22(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     655             : {
     656           0 :   double result(self->M22());
     657           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     658           0 :   args.rval().set(JS_NumberValue(double(result)));
     659           0 :   return true;
     660             : }
     661             : 
     662             : static bool
     663           0 : set_m22(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     664             : {
     665             :   double arg0;
     666           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     667           0 :     return false;
     668             :   }
     669           0 :   self->SetM22(arg0);
     670           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     671             : 
     672           0 :   return true;
     673             : }
     674             : 
     675             : static const JSJitInfo m22_getterinfo = {
     676             :   { (JSJitGetterOp)get_m22 },
     677             :   { prototypes::id::DOMMatrix },
     678             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     679             :   JSJitInfo::Getter,
     680             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     681             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     682             :   true,  /* isInfallible. False in setters. */
     683             :   false,  /* isMovable.  Not relevant for setters. */
     684             :   false, /* isEliminatable.  Not relevant for setters. */
     685             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     686             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     687             :   false,  /* isTypedMethod.  Only relevant for methods. */
     688             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     689             : };
     690             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     691             : static_assert(0 < 1, "There is no slot for us");
     692             : static const JSJitInfo m22_setterinfo = {
     693             :   { (JSJitGetterOp)set_m22 },
     694             :   { prototypes::id::DOMMatrix },
     695             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     696             :   JSJitInfo::Setter,
     697             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     698             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     699             :   false,  /* isInfallible. False in setters. */
     700             :   false,  /* isMovable.  Not relevant for setters. */
     701             :   false, /* isEliminatable.  Not relevant for setters. */
     702             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     703             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     704             :   false,  /* isTypedMethod.  Only relevant for methods. */
     705             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     706             : };
     707             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     708             : static_assert(0 < 1, "There is no slot for us");
     709             : 
     710             : static bool
     711           0 : get_m23(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     712             : {
     713           0 :   double result(self->M23());
     714           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     715           0 :   args.rval().set(JS_NumberValue(double(result)));
     716           0 :   return true;
     717             : }
     718             : 
     719             : static bool
     720           0 : set_m23(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     721             : {
     722             :   double arg0;
     723           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     724           0 :     return false;
     725             :   }
     726           0 :   self->SetM23(arg0);
     727           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     728             : 
     729           0 :   return true;
     730             : }
     731             : 
     732             : static const JSJitInfo m23_getterinfo = {
     733             :   { (JSJitGetterOp)get_m23 },
     734             :   { prototypes::id::DOMMatrix },
     735             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     736             :   JSJitInfo::Getter,
     737             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     738             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     739             :   true,  /* isInfallible. False in setters. */
     740             :   false,  /* isMovable.  Not relevant for setters. */
     741             :   false, /* isEliminatable.  Not relevant for setters. */
     742             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     743             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     744             :   false,  /* isTypedMethod.  Only relevant for methods. */
     745             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     746             : };
     747             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     748             : static_assert(0 < 1, "There is no slot for us");
     749             : static const JSJitInfo m23_setterinfo = {
     750             :   { (JSJitGetterOp)set_m23 },
     751             :   { prototypes::id::DOMMatrix },
     752             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     753             :   JSJitInfo::Setter,
     754             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     755             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     756             :   false,  /* isInfallible. False in setters. */
     757             :   false,  /* isMovable.  Not relevant for setters. */
     758             :   false, /* isEliminatable.  Not relevant for setters. */
     759             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     760             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     761             :   false,  /* isTypedMethod.  Only relevant for methods. */
     762             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     763             : };
     764             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     765             : static_assert(0 < 1, "There is no slot for us");
     766             : 
     767             : static bool
     768           0 : get_m24(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     769             : {
     770           0 :   double result(self->M24());
     771           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     772           0 :   args.rval().set(JS_NumberValue(double(result)));
     773           0 :   return true;
     774             : }
     775             : 
     776             : static bool
     777           0 : set_m24(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     778             : {
     779             :   double arg0;
     780           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     781           0 :     return false;
     782             :   }
     783           0 :   self->SetM24(arg0);
     784           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     785             : 
     786           0 :   return true;
     787             : }
     788             : 
     789             : static const JSJitInfo m24_getterinfo = {
     790             :   { (JSJitGetterOp)get_m24 },
     791             :   { prototypes::id::DOMMatrix },
     792             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     793             :   JSJitInfo::Getter,
     794             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     795             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     796             :   true,  /* isInfallible. False in setters. */
     797             :   false,  /* isMovable.  Not relevant for setters. */
     798             :   false, /* isEliminatable.  Not relevant for setters. */
     799             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     800             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     801             :   false,  /* isTypedMethod.  Only relevant for methods. */
     802             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     803             : };
     804             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     805             : static_assert(0 < 1, "There is no slot for us");
     806             : static const JSJitInfo m24_setterinfo = {
     807             :   { (JSJitGetterOp)set_m24 },
     808             :   { prototypes::id::DOMMatrix },
     809             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     810             :   JSJitInfo::Setter,
     811             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     812             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     813             :   false,  /* isInfallible. False in setters. */
     814             :   false,  /* isMovable.  Not relevant for setters. */
     815             :   false, /* isEliminatable.  Not relevant for setters. */
     816             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     817             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     818             :   false,  /* isTypedMethod.  Only relevant for methods. */
     819             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     820             : };
     821             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     822             : static_assert(0 < 1, "There is no slot for us");
     823             : 
     824             : static bool
     825           0 : get_m31(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     826             : {
     827           0 :   double result(self->M31());
     828           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     829           0 :   args.rval().set(JS_NumberValue(double(result)));
     830           0 :   return true;
     831             : }
     832             : 
     833             : static bool
     834           0 : set_m31(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     835             : {
     836             :   double arg0;
     837           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     838           0 :     return false;
     839             :   }
     840           0 :   self->SetM31(arg0);
     841           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     842             : 
     843           0 :   return true;
     844             : }
     845             : 
     846             : static const JSJitInfo m31_getterinfo = {
     847             :   { (JSJitGetterOp)get_m31 },
     848             :   { prototypes::id::DOMMatrix },
     849             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     850             :   JSJitInfo::Getter,
     851             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     852             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     853             :   true,  /* isInfallible. False in setters. */
     854             :   false,  /* isMovable.  Not relevant for setters. */
     855             :   false, /* isEliminatable.  Not relevant for setters. */
     856             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     857             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     858             :   false,  /* isTypedMethod.  Only relevant for methods. */
     859             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     860             : };
     861             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     862             : static_assert(0 < 1, "There is no slot for us");
     863             : static const JSJitInfo m31_setterinfo = {
     864             :   { (JSJitGetterOp)set_m31 },
     865             :   { prototypes::id::DOMMatrix },
     866             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     867             :   JSJitInfo::Setter,
     868             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     869             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     870             :   false,  /* isInfallible. False in setters. */
     871             :   false,  /* isMovable.  Not relevant for setters. */
     872             :   false, /* isEliminatable.  Not relevant for setters. */
     873             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     874             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     875             :   false,  /* isTypedMethod.  Only relevant for methods. */
     876             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     877             : };
     878             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     879             : static_assert(0 < 1, "There is no slot for us");
     880             : 
     881             : static bool
     882           0 : get_m32(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     883             : {
     884           0 :   double result(self->M32());
     885           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     886           0 :   args.rval().set(JS_NumberValue(double(result)));
     887           0 :   return true;
     888             : }
     889             : 
     890             : static bool
     891           0 : set_m32(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     892             : {
     893             :   double arg0;
     894           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     895           0 :     return false;
     896             :   }
     897           0 :   self->SetM32(arg0);
     898           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     899             : 
     900           0 :   return true;
     901             : }
     902             : 
     903             : static const JSJitInfo m32_getterinfo = {
     904             :   { (JSJitGetterOp)get_m32 },
     905             :   { prototypes::id::DOMMatrix },
     906             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     907             :   JSJitInfo::Getter,
     908             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     909             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     910             :   true,  /* isInfallible. False in setters. */
     911             :   false,  /* isMovable.  Not relevant for setters. */
     912             :   false, /* isEliminatable.  Not relevant for setters. */
     913             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     914             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     915             :   false,  /* isTypedMethod.  Only relevant for methods. */
     916             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     917             : };
     918             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     919             : static_assert(0 < 1, "There is no slot for us");
     920             : static const JSJitInfo m32_setterinfo = {
     921             :   { (JSJitGetterOp)set_m32 },
     922             :   { prototypes::id::DOMMatrix },
     923             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     924             :   JSJitInfo::Setter,
     925             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     926             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     927             :   false,  /* isInfallible. False in setters. */
     928             :   false,  /* isMovable.  Not relevant for setters. */
     929             :   false, /* isEliminatable.  Not relevant for setters. */
     930             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     931             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     932             :   false,  /* isTypedMethod.  Only relevant for methods. */
     933             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     934             : };
     935             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     936             : static_assert(0 < 1, "There is no slot for us");
     937             : 
     938             : static bool
     939           0 : get_m33(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     940             : {
     941           0 :   double result(self->M33());
     942           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     943           0 :   args.rval().set(JS_NumberValue(double(result)));
     944           0 :   return true;
     945             : }
     946             : 
     947             : static bool
     948           0 : set_m33(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
     949             : {
     950             :   double arg0;
     951           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
     952           0 :     return false;
     953             :   }
     954           0 :   self->SetM33(arg0);
     955           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     956             : 
     957           0 :   return true;
     958             : }
     959             : 
     960             : static const JSJitInfo m33_getterinfo = {
     961             :   { (JSJitGetterOp)get_m33 },
     962             :   { prototypes::id::DOMMatrix },
     963             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     964             :   JSJitInfo::Getter,
     965             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     966             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
     967             :   true,  /* isInfallible. False in setters. */
     968             :   false,  /* isMovable.  Not relevant for setters. */
     969             :   false, /* isEliminatable.  Not relevant for setters. */
     970             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     971             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     972             :   false,  /* isTypedMethod.  Only relevant for methods. */
     973             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     974             : };
     975             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     976             : static_assert(0 < 1, "There is no slot for us");
     977             : static const JSJitInfo m33_setterinfo = {
     978             :   { (JSJitGetterOp)set_m33 },
     979             :   { prototypes::id::DOMMatrix },
     980             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
     981             :   JSJitInfo::Setter,
     982             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     983             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     984             :   false,  /* isInfallible. False in setters. */
     985             :   false,  /* isMovable.  Not relevant for setters. */
     986             :   false, /* isEliminatable.  Not relevant for setters. */
     987             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     988             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     989             :   false,  /* isTypedMethod.  Only relevant for methods. */
     990             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     991             : };
     992             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     993             : static_assert(0 < 1, "There is no slot for us");
     994             : 
     995             : static bool
     996           0 : get_m34(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
     997             : {
     998           0 :   double result(self->M34());
     999           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1000           0 :   args.rval().set(JS_NumberValue(double(result)));
    1001           0 :   return true;
    1002             : }
    1003             : 
    1004             : static bool
    1005           0 : set_m34(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
    1006             : {
    1007             :   double arg0;
    1008           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1009           0 :     return false;
    1010             :   }
    1011           0 :   self->SetM34(arg0);
    1012           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1013             : 
    1014           0 :   return true;
    1015             : }
    1016             : 
    1017             : static const JSJitInfo m34_getterinfo = {
    1018             :   { (JSJitGetterOp)get_m34 },
    1019             :   { prototypes::id::DOMMatrix },
    1020             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1021             :   JSJitInfo::Getter,
    1022             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1023             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1024             :   true,  /* isInfallible. False in setters. */
    1025             :   false,  /* isMovable.  Not relevant for setters. */
    1026             :   false, /* isEliminatable.  Not relevant for setters. */
    1027             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1028             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1029             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1030             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1031             : };
    1032             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1033             : static_assert(0 < 1, "There is no slot for us");
    1034             : static const JSJitInfo m34_setterinfo = {
    1035             :   { (JSJitGetterOp)set_m34 },
    1036             :   { prototypes::id::DOMMatrix },
    1037             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1038             :   JSJitInfo::Setter,
    1039             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1040             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1041             :   false,  /* isInfallible. False in setters. */
    1042             :   false,  /* isMovable.  Not relevant for setters. */
    1043             :   false, /* isEliminatable.  Not relevant for setters. */
    1044             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1045             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1046             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1047             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1048             : };
    1049             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1050             : static_assert(0 < 1, "There is no slot for us");
    1051             : 
    1052             : static bool
    1053           0 : get_m41(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
    1054             : {
    1055           0 :   double result(self->M41());
    1056           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1057           0 :   args.rval().set(JS_NumberValue(double(result)));
    1058           0 :   return true;
    1059             : }
    1060             : 
    1061             : static bool
    1062           0 : set_m41(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
    1063             : {
    1064             :   double arg0;
    1065           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1066           0 :     return false;
    1067             :   }
    1068           0 :   self->SetM41(arg0);
    1069           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1070             : 
    1071           0 :   return true;
    1072             : }
    1073             : 
    1074             : static const JSJitInfo m41_getterinfo = {
    1075             :   { (JSJitGetterOp)get_m41 },
    1076             :   { prototypes::id::DOMMatrix },
    1077             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1078             :   JSJitInfo::Getter,
    1079             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1080             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1081             :   true,  /* isInfallible. False in setters. */
    1082             :   false,  /* isMovable.  Not relevant for setters. */
    1083             :   false, /* isEliminatable.  Not relevant for setters. */
    1084             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1085             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1086             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1087             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1088             : };
    1089             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1090             : static_assert(0 < 1, "There is no slot for us");
    1091             : static const JSJitInfo m41_setterinfo = {
    1092             :   { (JSJitGetterOp)set_m41 },
    1093             :   { prototypes::id::DOMMatrix },
    1094             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1095             :   JSJitInfo::Setter,
    1096             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1097             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1098             :   false,  /* isInfallible. False in setters. */
    1099             :   false,  /* isMovable.  Not relevant for setters. */
    1100             :   false, /* isEliminatable.  Not relevant for setters. */
    1101             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1102             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1103             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1104             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1105             : };
    1106             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1107             : static_assert(0 < 1, "There is no slot for us");
    1108             : 
    1109             : static bool
    1110           0 : get_m42(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
    1111             : {
    1112           0 :   double result(self->M42());
    1113           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1114           0 :   args.rval().set(JS_NumberValue(double(result)));
    1115           0 :   return true;
    1116             : }
    1117             : 
    1118             : static bool
    1119           0 : set_m42(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
    1120             : {
    1121             :   double arg0;
    1122           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1123           0 :     return false;
    1124             :   }
    1125           0 :   self->SetM42(arg0);
    1126           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1127             : 
    1128           0 :   return true;
    1129             : }
    1130             : 
    1131             : static const JSJitInfo m42_getterinfo = {
    1132             :   { (JSJitGetterOp)get_m42 },
    1133             :   { prototypes::id::DOMMatrix },
    1134             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1135             :   JSJitInfo::Getter,
    1136             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1137             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1138             :   true,  /* isInfallible. False in setters. */
    1139             :   false,  /* isMovable.  Not relevant for setters. */
    1140             :   false, /* isEliminatable.  Not relevant for setters. */
    1141             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1142             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1143             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1144             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1145             : };
    1146             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1147             : static_assert(0 < 1, "There is no slot for us");
    1148             : static const JSJitInfo m42_setterinfo = {
    1149             :   { (JSJitGetterOp)set_m42 },
    1150             :   { prototypes::id::DOMMatrix },
    1151             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1152             :   JSJitInfo::Setter,
    1153             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1154             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1155             :   false,  /* isInfallible. False in setters. */
    1156             :   false,  /* isMovable.  Not relevant for setters. */
    1157             :   false, /* isEliminatable.  Not relevant for setters. */
    1158             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1159             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1160             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1161             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1162             : };
    1163             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1164             : static_assert(0 < 1, "There is no slot for us");
    1165             : 
    1166             : static bool
    1167           0 : get_m43(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
    1168             : {
    1169           0 :   double result(self->M43());
    1170           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1171           0 :   args.rval().set(JS_NumberValue(double(result)));
    1172           0 :   return true;
    1173             : }
    1174             : 
    1175             : static bool
    1176           0 : set_m43(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
    1177             : {
    1178             :   double arg0;
    1179           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1180           0 :     return false;
    1181             :   }
    1182           0 :   self->SetM43(arg0);
    1183           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1184             : 
    1185           0 :   return true;
    1186             : }
    1187             : 
    1188             : static const JSJitInfo m43_getterinfo = {
    1189             :   { (JSJitGetterOp)get_m43 },
    1190             :   { prototypes::id::DOMMatrix },
    1191             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1192             :   JSJitInfo::Getter,
    1193             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1194             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1195             :   true,  /* isInfallible. False in setters. */
    1196             :   false,  /* isMovable.  Not relevant for setters. */
    1197             :   false, /* isEliminatable.  Not relevant for setters. */
    1198             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1199             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1200             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1201             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1202             : };
    1203             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1204             : static_assert(0 < 1, "There is no slot for us");
    1205             : static const JSJitInfo m43_setterinfo = {
    1206             :   { (JSJitGetterOp)set_m43 },
    1207             :   { prototypes::id::DOMMatrix },
    1208             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1209             :   JSJitInfo::Setter,
    1210             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1211             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1212             :   false,  /* isInfallible. False in setters. */
    1213             :   false,  /* isMovable.  Not relevant for setters. */
    1214             :   false, /* isEliminatable.  Not relevant for setters. */
    1215             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1216             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1217             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1218             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1219             : };
    1220             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1221             : static_assert(0 < 1, "There is no slot for us");
    1222             : 
    1223             : static bool
    1224           0 : get_m44(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitGetterCallArgs args)
    1225             : {
    1226           0 :   double result(self->M44());
    1227           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1228           0 :   args.rval().set(JS_NumberValue(double(result)));
    1229           0 :   return true;
    1230             : }
    1231             : 
    1232             : static bool
    1233           0 : set_m44(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, JSJitSetterCallArgs args)
    1234             : {
    1235             :   double arg0;
    1236           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1237           0 :     return false;
    1238             :   }
    1239           0 :   self->SetM44(arg0);
    1240           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1241             : 
    1242           0 :   return true;
    1243             : }
    1244             : 
    1245             : static const JSJitInfo m44_getterinfo = {
    1246             :   { (JSJitGetterOp)get_m44 },
    1247             :   { prototypes::id::DOMMatrix },
    1248             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1249             :   JSJitInfo::Getter,
    1250             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1251             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1252             :   true,  /* isInfallible. False in setters. */
    1253             :   false,  /* isMovable.  Not relevant for setters. */
    1254             :   false, /* isEliminatable.  Not relevant for setters. */
    1255             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1256             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1257             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1258             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1259             : };
    1260             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1261             : static_assert(0 < 1, "There is no slot for us");
    1262             : static const JSJitInfo m44_setterinfo = {
    1263             :   { (JSJitGetterOp)set_m44 },
    1264             :   { prototypes::id::DOMMatrix },
    1265             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1266             :   JSJitInfo::Setter,
    1267             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1268             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1269             :   false,  /* isInfallible. False in setters. */
    1270             :   false,  /* isMovable.  Not relevant for setters. */
    1271             :   false, /* isEliminatable.  Not relevant for setters. */
    1272             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1273             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1274             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1275             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1276             : };
    1277             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1278             : static_assert(0 < 1, "There is no slot for us");
    1279             : 
    1280             : static bool
    1281           0 : multiplySelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1282             : {
    1283           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1284           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.multiplySelf");
    1285             :   }
    1286           0 :   NonNull<mozilla::dom::DOMMatrix> arg0;
    1287           0 :   if (args[0].isObject()) {
    1288             :     {
    1289           0 :       nsresult rv = UnwrapObject<prototypes::id::DOMMatrix, mozilla::dom::DOMMatrix>(args[0], arg0);
    1290           0 :       if (NS_FAILED(rv)) {
    1291           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of DOMMatrix.multiplySelf", "DOMMatrix");
    1292           0 :         return false;
    1293             :       }
    1294             :     }
    1295             :   } else {
    1296           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of DOMMatrix.multiplySelf");
    1297           0 :     return false;
    1298             :   }
    1299           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->MultiplySelf(NonNullHelper(arg0))));
    1300           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1301           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1302           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1303           0 :     return false;
    1304             :   }
    1305           0 :   return true;
    1306             : }
    1307             : 
    1308             : static const JSJitInfo multiplySelf_methodinfo = {
    1309             :   { (JSJitGetterOp)multiplySelf },
    1310             :   { prototypes::id::DOMMatrix },
    1311             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1312             :   JSJitInfo::Method,
    1313             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1314             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1315             :   false,  /* isInfallible. False in setters. */
    1316             :   false,  /* isMovable.  Not relevant for setters. */
    1317             :   false, /* isEliminatable.  Not relevant for setters. */
    1318             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1319             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1320             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1321             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1322             : };
    1323             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1324             : static_assert(0 < 1, "There is no slot for us");
    1325             : 
    1326             : static bool
    1327           0 : preMultiplySelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1328             : {
    1329           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1330           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.preMultiplySelf");
    1331             :   }
    1332           0 :   NonNull<mozilla::dom::DOMMatrix> arg0;
    1333           0 :   if (args[0].isObject()) {
    1334             :     {
    1335           0 :       nsresult rv = UnwrapObject<prototypes::id::DOMMatrix, mozilla::dom::DOMMatrix>(args[0], arg0);
    1336           0 :       if (NS_FAILED(rv)) {
    1337           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of DOMMatrix.preMultiplySelf", "DOMMatrix");
    1338           0 :         return false;
    1339             :       }
    1340             :     }
    1341             :   } else {
    1342           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of DOMMatrix.preMultiplySelf");
    1343           0 :     return false;
    1344             :   }
    1345           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->PreMultiplySelf(NonNullHelper(arg0))));
    1346           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1347           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1348           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1349           0 :     return false;
    1350             :   }
    1351           0 :   return true;
    1352             : }
    1353             : 
    1354             : static const JSJitInfo preMultiplySelf_methodinfo = {
    1355             :   { (JSJitGetterOp)preMultiplySelf },
    1356             :   { prototypes::id::DOMMatrix },
    1357             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1358             :   JSJitInfo::Method,
    1359             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1360             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1361             :   false,  /* isInfallible. False in setters. */
    1362             :   false,  /* isMovable.  Not relevant for setters. */
    1363             :   false, /* isEliminatable.  Not relevant for setters. */
    1364             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1365             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1366             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1367             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1368             : };
    1369             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1370             : static_assert(0 < 1, "There is no slot for us");
    1371             : 
    1372             : static bool
    1373           0 : translateSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1374             : {
    1375           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    1376           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.translateSelf");
    1377             :   }
    1378             :   double arg0;
    1379           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1380           0 :     return false;
    1381             :   }
    1382             :   double arg1;
    1383           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    1384           0 :     return false;
    1385             :   }
    1386             :   double arg2;
    1387           0 :   if (args.hasDefined(2)) {
    1388           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    1389           0 :       return false;
    1390             :     }
    1391             :   } else {
    1392           0 :     arg2 = 0.0;
    1393             :   }
    1394           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->TranslateSelf(arg0, arg1, arg2)));
    1395           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1396           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1397           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1398           0 :     return false;
    1399             :   }
    1400           0 :   return true;
    1401             : }
    1402             : 
    1403             : static const JSJitInfo translateSelf_methodinfo = {
    1404             :   { (JSJitGetterOp)translateSelf },
    1405             :   { prototypes::id::DOMMatrix },
    1406             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1407             :   JSJitInfo::Method,
    1408             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1409             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1410             :   false,  /* isInfallible. False in setters. */
    1411             :   false,  /* isMovable.  Not relevant for setters. */
    1412             :   false, /* isEliminatable.  Not relevant for setters. */
    1413             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1414             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1415             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1416             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1417             : };
    1418             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1419             : static_assert(0 < 1, "There is no slot for us");
    1420             : 
    1421             : static bool
    1422           0 : scaleSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1423             : {
    1424           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1425           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.scaleSelf");
    1426             :   }
    1427             :   double arg0;
    1428           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1429           0 :     return false;
    1430             :   }
    1431             :   double arg1;
    1432           0 :   if (args.hasDefined(1)) {
    1433           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    1434           0 :       return false;
    1435             :     }
    1436             :   } else {
    1437           0 :     arg1 = 0.0;
    1438             :   }
    1439             :   double arg2;
    1440           0 :   if (args.hasDefined(2)) {
    1441           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    1442           0 :       return false;
    1443             :     }
    1444             :   } else {
    1445           0 :     arg2 = 0.0;
    1446             :   }
    1447           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->ScaleSelf(arg0, arg1, arg2)));
    1448           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1449           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1450           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1451           0 :     return false;
    1452             :   }
    1453           0 :   return true;
    1454             : }
    1455             : 
    1456             : static const JSJitInfo scaleSelf_methodinfo = {
    1457             :   { (JSJitGetterOp)scaleSelf },
    1458             :   { prototypes::id::DOMMatrix },
    1459             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1460             :   JSJitInfo::Method,
    1461             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1462             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1463             :   false,  /* isInfallible. False in setters. */
    1464             :   false,  /* isMovable.  Not relevant for setters. */
    1465             :   false, /* isEliminatable.  Not relevant for setters. */
    1466             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1467             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1468             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1469             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1470             : };
    1471             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1472             : static_assert(0 < 1, "There is no slot for us");
    1473             : 
    1474             : static bool
    1475           0 : scale3dSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1476             : {
    1477           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1478           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.scale3dSelf");
    1479             :   }
    1480             :   double arg0;
    1481           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1482           0 :     return false;
    1483             :   }
    1484             :   double arg1;
    1485           0 :   if (args.hasDefined(1)) {
    1486           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    1487           0 :       return false;
    1488             :     }
    1489             :   } else {
    1490           0 :     arg1 = 0.0;
    1491             :   }
    1492             :   double arg2;
    1493           0 :   if (args.hasDefined(2)) {
    1494           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    1495           0 :       return false;
    1496             :     }
    1497             :   } else {
    1498           0 :     arg2 = 0.0;
    1499             :   }
    1500             :   double arg3;
    1501           0 :   if (args.hasDefined(3)) {
    1502           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[3], &arg3)) {
    1503           0 :       return false;
    1504             :     }
    1505             :   } else {
    1506           0 :     arg3 = 0.0;
    1507             :   }
    1508           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->Scale3dSelf(arg0, arg1, arg2, arg3)));
    1509           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1510           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1511           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1512           0 :     return false;
    1513             :   }
    1514           0 :   return true;
    1515             : }
    1516             : 
    1517             : static const JSJitInfo scale3dSelf_methodinfo = {
    1518             :   { (JSJitGetterOp)scale3dSelf },
    1519             :   { prototypes::id::DOMMatrix },
    1520             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1521             :   JSJitInfo::Method,
    1522             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1523             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1524             :   false,  /* isInfallible. False in setters. */
    1525             :   false,  /* isMovable.  Not relevant for setters. */
    1526             :   false, /* isEliminatable.  Not relevant for setters. */
    1527             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1528             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1529             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1530             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1531             : };
    1532             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1533             : static_assert(0 < 1, "There is no slot for us");
    1534             : 
    1535             : static bool
    1536           0 : scaleNonUniformSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1537             : {
    1538           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1539           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.scaleNonUniformSelf");
    1540             :   }
    1541             :   double arg0;
    1542           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1543           0 :     return false;
    1544             :   }
    1545             :   double arg1;
    1546           0 :   if (args.hasDefined(1)) {
    1547           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    1548           0 :       return false;
    1549             :     }
    1550             :   } else {
    1551           0 :     arg1 = 1.0;
    1552             :   }
    1553             :   double arg2;
    1554           0 :   if (args.hasDefined(2)) {
    1555           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    1556           0 :       return false;
    1557             :     }
    1558             :   } else {
    1559           0 :     arg2 = 1.0;
    1560             :   }
    1561             :   double arg3;
    1562           0 :   if (args.hasDefined(3)) {
    1563           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[3], &arg3)) {
    1564           0 :       return false;
    1565             :     }
    1566             :   } else {
    1567           0 :     arg3 = 0.0;
    1568             :   }
    1569             :   double arg4;
    1570           0 :   if (args.hasDefined(4)) {
    1571           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[4], &arg4)) {
    1572           0 :       return false;
    1573             :     }
    1574             :   } else {
    1575           0 :     arg4 = 0.0;
    1576             :   }
    1577             :   double arg5;
    1578           0 :   if (args.hasDefined(5)) {
    1579           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[5], &arg5)) {
    1580           0 :       return false;
    1581             :     }
    1582             :   } else {
    1583           0 :     arg5 = 0.0;
    1584             :   }
    1585           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->ScaleNonUniformSelf(arg0, arg1, arg2, arg3, arg4, arg5)));
    1586           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1587           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1588           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1589           0 :     return false;
    1590             :   }
    1591           0 :   return true;
    1592             : }
    1593             : 
    1594             : static const JSJitInfo scaleNonUniformSelf_methodinfo = {
    1595             :   { (JSJitGetterOp)scaleNonUniformSelf },
    1596             :   { prototypes::id::DOMMatrix },
    1597             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1598             :   JSJitInfo::Method,
    1599             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1600             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1601             :   false,  /* isInfallible. False in setters. */
    1602             :   false,  /* isMovable.  Not relevant for setters. */
    1603             :   false, /* isEliminatable.  Not relevant for setters. */
    1604             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1605             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1606             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1607             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1608             : };
    1609             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1610             : static_assert(0 < 1, "There is no slot for us");
    1611             : 
    1612             : static bool
    1613           0 : rotateSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1614             : {
    1615           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1616           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.rotateSelf");
    1617             :   }
    1618             :   double arg0;
    1619           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1620           0 :     return false;
    1621             :   }
    1622             :   double arg1;
    1623           0 :   if (args.hasDefined(1)) {
    1624           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    1625           0 :       return false;
    1626             :     }
    1627             :   } else {
    1628           0 :     arg1 = 0.0;
    1629             :   }
    1630             :   double arg2;
    1631           0 :   if (args.hasDefined(2)) {
    1632           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    1633           0 :       return false;
    1634             :     }
    1635             :   } else {
    1636           0 :     arg2 = 0.0;
    1637             :   }
    1638           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->RotateSelf(arg0, arg1, arg2)));
    1639           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1640           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1641           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1642           0 :     return false;
    1643             :   }
    1644           0 :   return true;
    1645             : }
    1646             : 
    1647             : static const JSJitInfo rotateSelf_methodinfo = {
    1648             :   { (JSJitGetterOp)rotateSelf },
    1649             :   { prototypes::id::DOMMatrix },
    1650             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1651             :   JSJitInfo::Method,
    1652             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1653             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1654             :   false,  /* isInfallible. False in setters. */
    1655             :   false,  /* isMovable.  Not relevant for setters. */
    1656             :   false, /* isEliminatable.  Not relevant for setters. */
    1657             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1658             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1659             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1660             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1661             : };
    1662             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1663             : static_assert(0 < 1, "There is no slot for us");
    1664             : 
    1665             : static bool
    1666           0 : rotateFromVectorSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1667             : {
    1668           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    1669           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.rotateFromVectorSelf");
    1670             :   }
    1671             :   double arg0;
    1672           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1673           0 :     return false;
    1674             :   }
    1675             :   double arg1;
    1676           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    1677           0 :     return false;
    1678             :   }
    1679           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->RotateFromVectorSelf(arg0, arg1)));
    1680           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1681           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1682           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1683           0 :     return false;
    1684             :   }
    1685           0 :   return true;
    1686             : }
    1687             : 
    1688             : static const JSJitInfo rotateFromVectorSelf_methodinfo = {
    1689             :   { (JSJitGetterOp)rotateFromVectorSelf },
    1690             :   { prototypes::id::DOMMatrix },
    1691             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1692             :   JSJitInfo::Method,
    1693             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1694             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1695             :   false,  /* isInfallible. False in setters. */
    1696             :   false,  /* isMovable.  Not relevant for setters. */
    1697             :   false, /* isEliminatable.  Not relevant for setters. */
    1698             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1699             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1700             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1701             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1702             : };
    1703             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1704             : static_assert(0 < 1, "There is no slot for us");
    1705             : 
    1706             : static bool
    1707           0 : rotateAxisAngleSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1708             : {
    1709           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    1710           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.rotateAxisAngleSelf");
    1711             :   }
    1712             :   double arg0;
    1713           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1714           0 :     return false;
    1715             :   }
    1716             :   double arg1;
    1717           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    1718           0 :     return false;
    1719             :   }
    1720             :   double arg2;
    1721           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    1722           0 :     return false;
    1723             :   }
    1724             :   double arg3;
    1725           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[3], &arg3)) {
    1726           0 :     return false;
    1727             :   }
    1728           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->RotateAxisAngleSelf(arg0, arg1, arg2, arg3)));
    1729           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1730           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1731           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1732           0 :     return false;
    1733             :   }
    1734           0 :   return true;
    1735             : }
    1736             : 
    1737             : static const JSJitInfo rotateAxisAngleSelf_methodinfo = {
    1738             :   { (JSJitGetterOp)rotateAxisAngleSelf },
    1739             :   { prototypes::id::DOMMatrix },
    1740             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1741             :   JSJitInfo::Method,
    1742             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1743             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1744             :   false,  /* isInfallible. False in setters. */
    1745             :   false,  /* isMovable.  Not relevant for setters. */
    1746             :   false, /* isEliminatable.  Not relevant for setters. */
    1747             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1748             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1749             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1750             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1751             : };
    1752             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1753             : static_assert(0 < 1, "There is no slot for us");
    1754             : 
    1755             : static bool
    1756           0 : skewXSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1757             : {
    1758           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1759           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.skewXSelf");
    1760             :   }
    1761             :   double arg0;
    1762           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1763           0 :     return false;
    1764             :   }
    1765           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->SkewXSelf(arg0)));
    1766           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1767           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1768           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1769           0 :     return false;
    1770             :   }
    1771           0 :   return true;
    1772             : }
    1773             : 
    1774             : static const JSJitInfo skewXSelf_methodinfo = {
    1775             :   { (JSJitGetterOp)skewXSelf },
    1776             :   { prototypes::id::DOMMatrix },
    1777             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1778             :   JSJitInfo::Method,
    1779             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1780             :   JSVAL_TYPE_OBJECT,  /* 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 : skewYSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1794             : {
    1795           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1796           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.skewYSelf");
    1797             :   }
    1798             :   double arg0;
    1799           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    1800           0 :     return false;
    1801             :   }
    1802           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->SkewYSelf(arg0)));
    1803           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1804           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1805           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1806           0 :     return false;
    1807             :   }
    1808           0 :   return true;
    1809             : }
    1810             : 
    1811             : static const JSJitInfo skewYSelf_methodinfo = {
    1812             :   { (JSJitGetterOp)skewYSelf },
    1813             :   { prototypes::id::DOMMatrix },
    1814             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1815             :   JSJitInfo::Method,
    1816             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1817             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1818             :   false,  /* isInfallible. False in setters. */
    1819             :   false,  /* isMovable.  Not relevant for setters. */
    1820             :   false, /* isEliminatable.  Not relevant for setters. */
    1821             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1822             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1823             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1824             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1825             : };
    1826             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1827             : static_assert(0 < 1, "There is no slot for us");
    1828             : 
    1829             : static bool
    1830           0 : invertSelf(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1831             : {
    1832           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->InvertSelf()));
    1833           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1834           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1835           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1836           0 :     return false;
    1837             :   }
    1838           0 :   return true;
    1839             : }
    1840             : 
    1841             : static const JSJitInfo invertSelf_methodinfo = {
    1842             :   { (JSJitGetterOp)invertSelf },
    1843             :   { prototypes::id::DOMMatrix },
    1844             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1845             :   JSJitInfo::Method,
    1846             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1847             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1848             :   false,  /* isInfallible. False in setters. */
    1849             :   false,  /* isMovable.  Not relevant for setters. */
    1850             :   false, /* isEliminatable.  Not relevant for setters. */
    1851             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1852             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1853             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1854             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1855             : };
    1856             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1857             : static_assert(0 < 1, "There is no slot for us");
    1858             : 
    1859             : static bool
    1860           0 : setMatrixValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrix* self, const JSJitMethodCallArgs& args)
    1861             : {
    1862           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    1863           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix.setMatrixValue");
    1864             :   }
    1865           0 :   binding_detail::FakeString arg0;
    1866           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1867           0 :     return false;
    1868             :   }
    1869           0 :   binding_detail::FastErrorResult rv;
    1870           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->SetMatrixValue(NonNullHelper(Constify(arg0)), rv)));
    1871           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1872           0 :     return false;
    1873             :   }
    1874           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1875           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1876           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1877           0 :     return false;
    1878             :   }
    1879           0 :   return true;
    1880             : }
    1881             : 
    1882             : static const JSJitInfo setMatrixValue_methodinfo = {
    1883             :   { (JSJitGetterOp)setMatrixValue },
    1884             :   { prototypes::id::DOMMatrix },
    1885             :   { PrototypeTraits<prototypes::id::DOMMatrix>::Depth },
    1886             :   JSJitInfo::Method,
    1887             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1888             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1889             :   false,  /* isInfallible. False in setters. */
    1890             :   false,  /* isMovable.  Not relevant for setters. */
    1891             :   false, /* isEliminatable.  Not relevant for setters. */
    1892             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1893             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1894             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1895             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1896             : };
    1897             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1898             : static_assert(0 < 1, "There is no slot for us");
    1899             : 
    1900             : static bool
    1901           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
    1902             : {
    1903           0 :   mozilla::dom::DOMMatrix* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::DOMMatrix>(obj);
    1904             :   // We don't want to preserve if we don't have a wrapper, and we
    1905             :   // obviously can't preserve if we're not initialized.
    1906           0 :   if (self && self->GetWrapperPreserveColor()) {
    1907           0 :     PreserveWrapper(self);
    1908             :   }
    1909           0 :   return true;
    1910             : }
    1911             : 
    1912             : static void
    1913           0 : _finalize(js::FreeOp* fop, JSObject* obj)
    1914             : {
    1915           0 :   mozilla::dom::DOMMatrix* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::DOMMatrix>(obj);
    1916           0 :   if (self) {
    1917           0 :     ClearWrapper(self, self, obj);
    1918           0 :     AddForDeferredFinalization<mozilla::dom::DOMMatrix>(self);
    1919             :   }
    1920           0 : }
    1921             : 
    1922             : static void
    1923           0 : _objectMoved(JSObject* obj, const JSObject* old)
    1924             : {
    1925           0 :   mozilla::dom::DOMMatrix* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::DOMMatrix>(obj);
    1926           0 :   if (self) {
    1927           0 :     UpdateWrapper(self, self, obj, old);
    1928             :   }
    1929           0 : }
    1930             : 
    1931             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    1932             : #if defined(__clang__)
    1933             : #pragma clang diagnostic push
    1934             : #pragma clang diagnostic ignored "-Wmissing-braces"
    1935             : #endif
    1936             : static const JSFunctionSpec sMethods_specs[] = {
    1937             :   JS_FNSPEC("multiplySelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&multiplySelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1938             :   JS_FNSPEC("preMultiplySelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&preMultiplySelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1939             :   JS_FNSPEC("translateSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&translateSelf_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
    1940             :   JS_FNSPEC("scaleSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&scaleSelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1941             :   JS_FNSPEC("scale3dSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&scale3dSelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1942             :   JS_FNSPEC("scaleNonUniformSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&scaleNonUniformSelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1943             :   JS_FNSPEC("rotateSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rotateSelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1944             :   JS_FNSPEC("rotateFromVectorSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rotateFromVectorSelf_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
    1945             :   JS_FNSPEC("rotateAxisAngleSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rotateAxisAngleSelf_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
    1946             :   JS_FNSPEC("skewXSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&skewXSelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1947             :   JS_FNSPEC("skewYSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&skewYSelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1948             :   JS_FNSPEC("invertSelf", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&invertSelf_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    1949             :   JS_FNSPEC("setMatrixValue", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setMatrixValue_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    1950             :   JS_FS_END
    1951             : };
    1952             : #if defined(__clang__)
    1953             : #pragma clang diagnostic pop
    1954             : #endif
    1955             : 
    1956             : 
    1957             : // Can't be const because the pref-enabled boolean needs to be writable
    1958             : static Prefable<const JSFunctionSpec> sMethods[] = {
    1959             :   { nullptr, &sMethods_specs[0] },
    1960             :   { nullptr, nullptr }
    1961             : };
    1962             : 
    1963             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    1964             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    1965             : static_assert(13 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    1966             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    1967             : 
    1968             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    1969             : #if defined(__clang__)
    1970             : #pragma clang diagnostic push
    1971             : #pragma clang diagnostic ignored "-Wmissing-braces"
    1972             : #endif
    1973             : static const JSPropertySpec sAttributes_specs[] = {
    1974             :   { "a", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &a_getterinfo, GenericBindingSetter, &a_setterinfo },
    1975             :   { "b", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &b_getterinfo, GenericBindingSetter, &b_setterinfo },
    1976             :   { "c", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &c_getterinfo, GenericBindingSetter, &c_setterinfo },
    1977             :   { "d", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &d_getterinfo, GenericBindingSetter, &d_setterinfo },
    1978             :   { "e", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &e_getterinfo, GenericBindingSetter, &e_setterinfo },
    1979             :   { "f", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &f_getterinfo, GenericBindingSetter, &f_setterinfo },
    1980             :   { "m11", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m11_getterinfo, GenericBindingSetter, &m11_setterinfo },
    1981             :   { "m12", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m12_getterinfo, GenericBindingSetter, &m12_setterinfo },
    1982             :   { "m13", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m13_getterinfo, GenericBindingSetter, &m13_setterinfo },
    1983             :   { "m14", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m14_getterinfo, GenericBindingSetter, &m14_setterinfo },
    1984             :   { "m21", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m21_getterinfo, GenericBindingSetter, &m21_setterinfo },
    1985             :   { "m22", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m22_getterinfo, GenericBindingSetter, &m22_setterinfo },
    1986             :   { "m23", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m23_getterinfo, GenericBindingSetter, &m23_setterinfo },
    1987             :   { "m24", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m24_getterinfo, GenericBindingSetter, &m24_setterinfo },
    1988             :   { "m31", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m31_getterinfo, GenericBindingSetter, &m31_setterinfo },
    1989             :   { "m32", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m32_getterinfo, GenericBindingSetter, &m32_setterinfo },
    1990             :   { "m33", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m33_getterinfo, GenericBindingSetter, &m33_setterinfo },
    1991             :   { "m34", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m34_getterinfo, GenericBindingSetter, &m34_setterinfo },
    1992             :   { "m41", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m41_getterinfo, GenericBindingSetter, &m41_setterinfo },
    1993             :   { "m42", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m42_getterinfo, GenericBindingSetter, &m42_setterinfo },
    1994             :   { "m43", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m43_getterinfo, GenericBindingSetter, &m43_setterinfo },
    1995             :   { "m44", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m44_getterinfo, GenericBindingSetter, &m44_setterinfo },
    1996             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    1997             : };
    1998             : #if defined(__clang__)
    1999             : #pragma clang diagnostic pop
    2000             : #endif
    2001             : 
    2002             : 
    2003             : // Can't be const because the pref-enabled boolean needs to be writable
    2004             : static Prefable<const JSPropertySpec> sAttributes[] = {
    2005             :   { nullptr, &sAttributes_specs[0] },
    2006             :   { nullptr, nullptr }
    2007             : };
    2008             : 
    2009             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    2010             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    2011             : static_assert(22 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    2012             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    2013             : 
    2014             : 
    2015             : static uint16_t sNativeProperties_sortedPropertyIndices[35];
    2016             : static PropertyInfo sNativeProperties_propertyInfos[35];
    2017             : 
    2018             : static const NativePropertiesN<2> sNativeProperties = {
    2019             :   false, 0,
    2020             :   false, 0,
    2021             :   true,  0 /* sMethods */,
    2022             :   true,  1 /* sAttributes */,
    2023             :   false, 0,
    2024             :   false, 0,
    2025             :   false, 0,
    2026             :   -1,
    2027             :   35,
    2028             :   sNativeProperties_sortedPropertyIndices,
    2029             :   {
    2030             :     { sMethods, &sNativeProperties_propertyInfos[0] },
    2031             :     { sAttributes, &sNativeProperties_propertyInfos[13] }
    2032             :   }
    2033             : };
    2034             : static_assert(35 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
    2035             :     "We have a property info count that is oversized");
    2036             : 
    2037             : static bool
    2038           0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
    2039             : {
    2040           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
    2041           0 :   JS::Rooted<JSObject*> obj(cx, &args.callee());
    2042           0 :   if (!args.isConstructing()) {
    2043             :     // XXXbz wish I could get the name from the callee instead of
    2044             :     // Adding more relocations
    2045           0 :     return ThrowConstructorWithoutNew(cx, "DOMMatrix");
    2046             :   }
    2047             : 
    2048           0 :   GlobalObject global(cx, obj);
    2049           0 :   if (global.Failed()) {
    2050           0 :     return false;
    2051             :   }
    2052             : 
    2053           0 :   JS::Rooted<JSObject*> desiredProto(cx);
    2054           0 :   if (!GetDesiredProto(cx, args, &desiredProto)) {
    2055           0 :     return false;
    2056             :   }
    2057             : 
    2058           0 :   unsigned argcount = std::min(args.length(), 1u);
    2059           0 :   switch (argcount) {
    2060             :     case 0: {
    2061           0 :       bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
    2062           0 :       Maybe<JSAutoCompartment> ac;
    2063           0 :       if (objIsXray) {
    2064           0 :         obj = js::CheckedUnwrap(obj);
    2065           0 :         if (!obj) {
    2066           0 :           return false;
    2067             :         }
    2068           0 :         ac.emplace(cx, obj);
    2069           0 :         if (!JS_WrapObject(cx, &desiredProto)) {
    2070           0 :           return false;
    2071             :         }
    2072             :       }
    2073           0 :       binding_detail::FastErrorResult rv;
    2074           0 :       auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(mozilla::dom::DOMMatrix::Constructor(global, rv)));
    2075           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2076           0 :         return false;
    2077             :       }
    2078           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2079             :       static_assert(!IsPointer<decltype(result)>::value,
    2080             :                     "NewObject implies that we need to keep the object alive with a strong reference.");
    2081           0 :       if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
    2082           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2083           0 :         return false;
    2084             :       }
    2085           0 :       return true;
    2086             :       break;
    2087             :     }
    2088             :     case 1: {
    2089           0 :       if (args[0].isObject()) {
    2090             :         do {
    2091           0 :           NonNull<mozilla::dom::DOMMatrixReadOnly> arg0;
    2092             :           {
    2093           0 :             nsresult rv = UnwrapObject<prototypes::id::DOMMatrixReadOnly, mozilla::dom::DOMMatrixReadOnly>(args[0], arg0);
    2094           0 :             if (NS_FAILED(rv)) {
    2095           0 :               break;
    2096             :             }
    2097             :           }
    2098           0 :           bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
    2099           0 :           Maybe<JSAutoCompartment> ac;
    2100           0 :           if (objIsXray) {
    2101           0 :             obj = js::CheckedUnwrap(obj);
    2102           0 :             if (!obj) {
    2103           0 :               return false;
    2104             :             }
    2105           0 :             ac.emplace(cx, obj);
    2106           0 :             if (!JS_WrapObject(cx, &desiredProto)) {
    2107           0 :               return false;
    2108             :             }
    2109             :           }
    2110           0 :           binding_detail::FastErrorResult rv;
    2111           0 :           auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(mozilla::dom::DOMMatrix::Constructor(global, NonNullHelper(arg0), rv)));
    2112           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2113           0 :             return false;
    2114             :           }
    2115           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2116             :           static_assert(!IsPointer<decltype(result)>::value,
    2117             :                         "NewObject implies that we need to keep the object alive with a strong reference.");
    2118           0 :           if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
    2119           0 :             MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2120           0 :             return false;
    2121             :           }
    2122           0 :           return true;
    2123             :         } while (0);
    2124             :         do {
    2125           0 :           RootedTypedArray<Float32Array> arg0(cx);
    2126           0 :           if (!arg0.Init(&args[0].toObject())) {
    2127           0 :             break;
    2128             :           }
    2129           0 :           bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
    2130           0 :           Maybe<JSAutoCompartment> ac;
    2131           0 :           if (objIsXray) {
    2132           0 :             obj = js::CheckedUnwrap(obj);
    2133           0 :             if (!obj) {
    2134           0 :               return false;
    2135             :             }
    2136           0 :             ac.emplace(cx, obj);
    2137           0 :             if (!JS_WrapObject(cx, &desiredProto)) {
    2138           0 :               return false;
    2139             :             }
    2140           0 :             if (!arg0.WrapIntoNewCompartment(cx)) {
    2141           0 :               return false;
    2142             :             }
    2143             :           }
    2144           0 :           binding_detail::FastErrorResult rv;
    2145           0 :           auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(mozilla::dom::DOMMatrix::Constructor(global, Constify(arg0), rv)));
    2146           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2147           0 :             return false;
    2148             :           }
    2149           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2150             :           static_assert(!IsPointer<decltype(result)>::value,
    2151             :                         "NewObject implies that we need to keep the object alive with a strong reference.");
    2152           0 :           if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
    2153           0 :             MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2154           0 :             return false;
    2155             :           }
    2156           0 :           return true;
    2157             :         } while (0);
    2158             :         do {
    2159           0 :           RootedTypedArray<Float64Array> arg0(cx);
    2160           0 :           if (!arg0.Init(&args[0].toObject())) {
    2161           0 :             break;
    2162             :           }
    2163           0 :           bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
    2164           0 :           Maybe<JSAutoCompartment> ac;
    2165           0 :           if (objIsXray) {
    2166           0 :             obj = js::CheckedUnwrap(obj);
    2167           0 :             if (!obj) {
    2168           0 :               return false;
    2169             :             }
    2170           0 :             ac.emplace(cx, obj);
    2171           0 :             if (!JS_WrapObject(cx, &desiredProto)) {
    2172           0 :               return false;
    2173             :             }
    2174           0 :             if (!arg0.WrapIntoNewCompartment(cx)) {
    2175           0 :               return false;
    2176             :             }
    2177             :           }
    2178           0 :           binding_detail::FastErrorResult rv;
    2179           0 :           auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(mozilla::dom::DOMMatrix::Constructor(global, Constify(arg0), rv)));
    2180           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2181           0 :             return false;
    2182             :           }
    2183           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2184             :           static_assert(!IsPointer<decltype(result)>::value,
    2185             :                         "NewObject implies that we need to keep the object alive with a strong reference.");
    2186           0 :           if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
    2187           0 :             MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2188           0 :             return false;
    2189             :           }
    2190           0 :           return true;
    2191             :         } while (0);
    2192             :         do {
    2193           0 :           binding_detail::AutoSequence<double> arg0;
    2194           0 :           JS::ForOfIterator iter(cx);
    2195           0 :           if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
    2196           0 :             return false;
    2197             :           }
    2198           0 :           if (!iter.valueIsIterable()) {
    2199           0 :             break;
    2200             :           }
    2201           0 :           binding_detail::AutoSequence<double> &arr = arg0;
    2202           0 :           JS::Rooted<JS::Value> temp(cx);
    2203             :           while (true) {
    2204             :             bool done;
    2205           0 :             if (!iter.next(&temp, &done)) {
    2206           0 :               return false;
    2207             :             }
    2208           0 :             if (done) {
    2209           0 :               break;
    2210             :             }
    2211           0 :             double* slotPtr = arr.AppendElement(mozilla::fallible);
    2212           0 :             if (!slotPtr) {
    2213           0 :               JS_ReportOutOfMemory(cx);
    2214           0 :               return false;
    2215             :             }
    2216           0 :             double& slot = *slotPtr;
    2217           0 :             if (!ValueToPrimitive<double, eDefault>(cx, temp, &slot)) {
    2218           0 :               return false;
    2219             :             }
    2220           0 :           }
    2221           0 :           bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
    2222           0 :           Maybe<JSAutoCompartment> ac;
    2223           0 :           if (objIsXray) {
    2224           0 :             obj = js::CheckedUnwrap(obj);
    2225           0 :             if (!obj) {
    2226           0 :               return false;
    2227             :             }
    2228           0 :             ac.emplace(cx, obj);
    2229           0 :             if (!JS_WrapObject(cx, &desiredProto)) {
    2230           0 :               return false;
    2231             :             }
    2232             :           }
    2233           0 :           binding_detail::FastErrorResult rv;
    2234           0 :           auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(mozilla::dom::DOMMatrix::Constructor(global, Constify(arg0), rv)));
    2235           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2236           0 :             return false;
    2237             :           }
    2238           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2239             :           static_assert(!IsPointer<decltype(result)>::value,
    2240             :                         "NewObject implies that we need to keep the object alive with a strong reference.");
    2241           0 :           if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
    2242           0 :             MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2243           0 :             return false;
    2244             :           }
    2245           0 :           return true;
    2246             :         } while (0);
    2247             :       }
    2248           0 :       bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
    2249           0 :       binding_detail::FakeString arg0;
    2250           0 :       if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2251           0 :         return false;
    2252             :       }
    2253           0 :       Maybe<JSAutoCompartment> ac;
    2254           0 :       if (objIsXray) {
    2255           0 :         obj = js::CheckedUnwrap(obj);
    2256           0 :         if (!obj) {
    2257           0 :           return false;
    2258             :         }
    2259           0 :         ac.emplace(cx, obj);
    2260           0 :         if (!JS_WrapObject(cx, &desiredProto)) {
    2261           0 :           return false;
    2262             :         }
    2263             :       }
    2264           0 :       binding_detail::FastErrorResult rv;
    2265           0 :       auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(mozilla::dom::DOMMatrix::Constructor(global, NonNullHelper(Constify(arg0)), rv)));
    2266           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2267           0 :         return false;
    2268             :       }
    2269           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2270             :       static_assert(!IsPointer<decltype(result)>::value,
    2271             :                     "NewObject implies that we need to keep the object alive with a strong reference.");
    2272           0 :       if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
    2273           0 :         MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2274           0 :         return false;
    2275             :       }
    2276           0 :       return true;
    2277             :       break;
    2278             :     }
    2279             :     default: {
    2280           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrix");
    2281             :       break;
    2282             :     }
    2283             :   }
    2284             :   MOZ_CRASH("We have an always-returning default case");
    2285             :   return false;
    2286             : }
    2287             : 
    2288             : static const js::ClassOps sInterfaceObjectClassOps = {
    2289             :     nullptr,               /* addProperty */
    2290             :     nullptr,               /* delProperty */
    2291             :     nullptr,               /* getProperty */
    2292             :     nullptr,               /* setProperty */
    2293             :     nullptr,               /* enumerate */
    2294             :     nullptr,               /* newEnumerate */
    2295             :     nullptr,               /* resolve */
    2296             :     nullptr,               /* mayResolve */
    2297             :     nullptr,               /* finalize */
    2298             :     _constructor, /* call */
    2299             :     nullptr,               /* hasInstance */
    2300             :     _constructor, /* construct */
    2301             :     nullptr,               /* trace */
    2302             : };
    2303             : 
    2304             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
    2305             :   {
    2306             :     "Function",
    2307             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
    2308             :     &sInterfaceObjectClassOps,
    2309             :     JS_NULL_CLASS_SPEC,
    2310             :     JS_NULL_CLASS_EXT,
    2311             :     &sInterfaceObjectClassObjectOps
    2312             :   },
    2313             :   eInterface,
    2314             :   true,
    2315             :   prototypes::id::DOMMatrix,
    2316             :   PrototypeTraits<prototypes::id::DOMMatrix>::Depth,
    2317             :   sNativePropertyHooks,
    2318             :   "function DOMMatrix() {\n    [native code]\n}",
    2319             :   DOMMatrixReadOnlyBinding::GetConstructorObject
    2320             : };
    2321             : 
    2322             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
    2323             :   {
    2324             :     "DOMMatrixPrototype",
    2325             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
    2326             :     JS_NULL_CLASS_OPS,
    2327             :     JS_NULL_CLASS_SPEC,
    2328             :     JS_NULL_CLASS_EXT,
    2329             :     JS_NULL_OBJECT_OPS
    2330             :   },
    2331             :   eInterfacePrototype,
    2332             :   false,
    2333             :   prototypes::id::DOMMatrix,
    2334             :   PrototypeTraits<prototypes::id::DOMMatrix>::Depth,
    2335             :   sNativePropertyHooks,
    2336             :   "[object DOMMatrixPrototype]",
    2337             :   DOMMatrixReadOnlyBinding::GetProtoObject
    2338             : };
    2339             : 
    2340             : bool
    2341           0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
    2342             : {
    2343             :   static bool sPrefValue;
    2344             :   static bool sPrefCacheSetUp = false;
    2345           0 :   if (!sPrefCacheSetUp) {
    2346           0 :     sPrefCacheSetUp = true;
    2347           0 :     Preferences::AddBoolVarCache(&sPrefValue, "layout.css.DOMMatrix.enabled");
    2348             :   }
    2349             : 
    2350           0 :   return sPrefValue;
    2351             : }
    2352             : 
    2353             : JSObject*
    2354           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
    2355             : {
    2356           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
    2357             : }
    2358             : 
    2359             : static const js::ClassOps sClassOps = {
    2360             :   _addProperty, /* addProperty */
    2361             :   nullptr,               /* delProperty */
    2362             :   nullptr,               /* getProperty */
    2363             :   nullptr,               /* setProperty */
    2364             :   nullptr,               /* enumerate */
    2365             :   nullptr, /* newEnumerate */
    2366             :   nullptr, /* resolve */
    2367             :   nullptr, /* mayResolve */
    2368             :   _finalize, /* finalize */
    2369             :   nullptr, /* call */
    2370             :   nullptr,               /* hasInstance */
    2371             :   nullptr,               /* construct */
    2372             :   nullptr, /* trace */
    2373             : };
    2374             : 
    2375             : static const js::ClassExtension sClassExtension = {
    2376             :   nullptr, /* weakmapKeyDelegateOp */
    2377             :   _objectMoved /* objectMovedOp */
    2378             : };
    2379             : 
    2380             : static const DOMJSClass sClass = {
    2381             :   { "DOMMatrix",
    2382             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
    2383             :     &sClassOps,
    2384             :     JS_NULL_CLASS_SPEC,
    2385             :     &sClassExtension,
    2386             :     JS_NULL_OBJECT_OPS
    2387             :   },
    2388             :   { prototypes::id::DOMMatrixReadOnly, prototypes::id::DOMMatrix, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
    2389             :   IsBaseOf<nsISupports, mozilla::dom::DOMMatrix >::value,
    2390             :   sNativePropertyHooks,
    2391             :   FindAssociatedGlobalForNative<mozilla::dom::DOMMatrix>::Get,
    2392             :   GetProtoObjectHandle,
    2393             :   GetCCParticipant<mozilla::dom::DOMMatrix>::Get()
    2394             : };
    2395             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
    2396             :               "Must have the right minimal number of reserved slots.");
    2397             : static_assert(1 >= 1,
    2398             :               "Must have enough reserved slots.");
    2399             : 
    2400             : const JSClass*
    2401           0 : GetJSClass()
    2402             : {
    2403           0 :   return sClass.ToJSClass();
    2404             : }
    2405             : 
    2406             : bool
    2407           0 : Wrap(JSContext* aCx, mozilla::dom::DOMMatrix* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
    2408             : {
    2409             :   MOZ_ASSERT(static_cast<mozilla::dom::DOMMatrix*>(aObject) ==
    2410             :              reinterpret_cast<mozilla::dom::DOMMatrix*>(aObject),
    2411             :              "Multiple inheritance for mozilla::dom::DOMMatrix is broken.");
    2412             :   MOZ_ASSERT(static_cast<mozilla::dom::DOMMatrixReadOnly*>(aObject) ==
    2413             :              reinterpret_cast<mozilla::dom::DOMMatrixReadOnly*>(aObject),
    2414             :              "Multiple inheritance for mozilla::dom::DOMMatrixReadOnly is broken.");
    2415           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
    2416           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
    2417           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
    2418             :              "You should probably not be using Wrap() directly; use "
    2419             :              "GetOrCreateDOMReflector instead");
    2420             : 
    2421           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
    2422             :              "nsISupports must be on our primary inheritance chain");
    2423             : 
    2424           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
    2425           0 :   if (!global) {
    2426           0 :     return false;
    2427             :   }
    2428           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
    2429           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
    2430             : 
    2431             :   // That might have ended up wrapping us already, due to the wonders
    2432             :   // of XBL.  Check for that, and bail out as needed.
    2433           0 :   aReflector.set(aCache->GetWrapper());
    2434           0 :   if (aReflector) {
    2435             : #ifdef DEBUG
    2436           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
    2437             : #endif // DEBUG
    2438           0 :     return true;
    2439             :   }
    2440             : 
    2441           0 :   JSAutoCompartment ac(aCx, global);
    2442           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
    2443           0 :   if (!canonicalProto) {
    2444           0 :     return false;
    2445             :   }
    2446           0 :   JS::Rooted<JSObject*> proto(aCx);
    2447           0 :   if (aGivenProto) {
    2448           0 :     proto = aGivenProto;
    2449             :     // Unfortunately, while aGivenProto was in the compartment of aCx
    2450             :     // coming in, we changed compartments to that of "parent" so may need
    2451             :     // to wrap the proto here.
    2452           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
    2453           0 :       if (!JS_WrapObject(aCx, &proto)) {
    2454           0 :         return false;
    2455             :       }
    2456             :     }
    2457             :   } else {
    2458           0 :     proto = canonicalProto;
    2459             :   }
    2460             : 
    2461           0 :   BindingJSObjectCreator<mozilla::dom::DOMMatrix> creator(aCx);
    2462           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
    2463           0 :   if (!aReflector) {
    2464           0 :     return false;
    2465             :   }
    2466             : 
    2467           0 :   aCache->SetWrapper(aReflector);
    2468           0 :   creator.InitializationSucceeded();
    2469             : 
    2470           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
    2471             :              aCache->GetWrapperPreserveColor() == aReflector);
    2472             :   // If proto != canonicalProto, we have to preserve our wrapper;
    2473             :   // otherwise we won't be able to properly recreate it later, since
    2474             :   // we won't know what proto to use.  Note that we don't check
    2475             :   // aGivenProto here, since it's entirely possible (and even
    2476             :   // somewhat common) to have a non-null aGivenProto which is the
    2477             :   // same as canonicalProto.
    2478           0 :   if (proto != canonicalProto) {
    2479           0 :     PreserveWrapper(aObject);
    2480             :   }
    2481             : 
    2482           0 :   return true;
    2483             : }
    2484             : 
    2485             : const NativePropertyHooks sNativePropertyHooks[] = { {
    2486             :   nullptr,
    2487             :   nullptr,
    2488             :   nullptr,
    2489             :   { sNativeProperties.Upcast(), nullptr },
    2490             :   prototypes::id::DOMMatrix,
    2491             :   constructors::id::DOMMatrix,
    2492             :   DOMMatrixReadOnlyBinding::sNativePropertyHooks,
    2493             :   &DefaultXrayExpandoObjectClass
    2494             : } };
    2495             : 
    2496             : void
    2497           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
    2498             : {
    2499           0 :   JS::Handle<JSObject*> parentProto(DOMMatrixReadOnlyBinding::GetProtoObjectHandle(aCx));
    2500           0 :   if (!parentProto) {
    2501           0 :     return;
    2502             :   }
    2503             : 
    2504           0 :   JS::Handle<JSObject*> constructorProto(DOMMatrixReadOnlyBinding::GetConstructorObjectHandle(aCx));
    2505           0 :   if (!constructorProto) {
    2506           0 :     return;
    2507             :   }
    2508             : 
    2509             :   static bool sIdsInited = false;
    2510           0 :   if (!sIdsInited && NS_IsMainThread()) {
    2511           0 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
    2512           0 :       return;
    2513             :     }
    2514           0 :     sIdsInited = true;
    2515             :   }
    2516             : 
    2517           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::DOMMatrix);
    2518           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::DOMMatrix);
    2519           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
    2520             :                               &sPrototypeClass.mBase, protoCache,
    2521             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
    2522             :                               interfaceCache,
    2523             :                               sNativeProperties.Upcast(),
    2524             :                               nullptr,
    2525             :                               "DOMMatrix", aDefineOnGlobal,
    2526             :                               nullptr,
    2527           0 :                               false);
    2528             : }
    2529             : 
    2530             : JS::Handle<JSObject*>
    2531           0 : GetProtoObjectHandle(JSContext* aCx)
    2532             : {
    2533             :   /* Get the interface prototype object for this class.  This will create the
    2534             :      object as needed. */
    2535           0 :   bool aDefineOnGlobal = true;
    2536             : 
    2537             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    2538           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    2539           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    2540           0 :     return nullptr;
    2541             :   }
    2542             : 
    2543             :   /* Check to see whether the interface objects are already installed */
    2544           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    2545           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::DOMMatrix)) {
    2546           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    2547           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    2548             :   }
    2549             : 
    2550             :   /*
    2551             :    * The object might _still_ be null, but that's OK.
    2552             :    *
    2553             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    2554             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    2555             :    * changed after they have been set.
    2556             :    *
    2557             :    * Calling address() avoids the read read barrier that does gray
    2558             :    * unmarking, but it's not possible for the object to be gray here.
    2559             :    */
    2560             : 
    2561           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::DOMMatrix);
    2562           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    2563           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    2564             : }
    2565             : 
    2566             : JSObject*
    2567           0 : GetProtoObject(JSContext* aCx)
    2568             : {
    2569           0 :   return GetProtoObjectHandle(aCx);
    2570             : }
    2571             : 
    2572             : JS::Handle<JSObject*>
    2573           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
    2574             : {
    2575             :   /* Get the interface object for this class.  This will create the object as
    2576             :      needed. */
    2577             : 
    2578             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    2579           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    2580           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    2581           0 :     return nullptr;
    2582             :   }
    2583             : 
    2584             :   /* Check to see whether the interface objects are already installed */
    2585           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    2586           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::DOMMatrix)) {
    2587           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    2588           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    2589             :   }
    2590             : 
    2591             :   /*
    2592             :    * The object might _still_ be null, but that's OK.
    2593             :    *
    2594             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    2595             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    2596             :    * changed after they have been set.
    2597             :    *
    2598             :    * Calling address() avoids the read read barrier that does gray
    2599             :    * unmarking, but it's not possible for the object to be gray here.
    2600             :    */
    2601             : 
    2602           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::DOMMatrix);
    2603           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    2604           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    2605             : }
    2606             : 
    2607             : JSObject*
    2608           0 : GetConstructorObject(JSContext* aCx)
    2609             : {
    2610           0 :   return GetConstructorObjectHandle(aCx);
    2611             : }
    2612             : 
    2613             : } // namespace DOMMatrixBinding
    2614             : 
    2615             : 
    2616             : 
    2617             : namespace DOMMatrixReadOnlyBinding {
    2618             : 
    2619             : static bool
    2620           0 : get_a(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2621             : {
    2622           0 :   double result(self->A());
    2623           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2624           0 :   args.rval().set(JS_NumberValue(double(result)));
    2625           0 :   return true;
    2626             : }
    2627             : 
    2628             : static const JSJitInfo a_getterinfo = {
    2629             :   { (JSJitGetterOp)get_a },
    2630             :   { prototypes::id::DOMMatrixReadOnly },
    2631             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2632             :   JSJitInfo::Getter,
    2633             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2634             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2635             :   true,  /* isInfallible. False in setters. */
    2636             :   false,  /* isMovable.  Not relevant for setters. */
    2637             :   false, /* isEliminatable.  Not relevant for setters. */
    2638             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2639             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2640             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2641             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2642             : };
    2643             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2644             : static_assert(0 < 1, "There is no slot for us");
    2645             : 
    2646             : static bool
    2647           0 : get_b(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2648             : {
    2649           0 :   double result(self->B());
    2650           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2651           0 :   args.rval().set(JS_NumberValue(double(result)));
    2652           0 :   return true;
    2653             : }
    2654             : 
    2655             : static const JSJitInfo b_getterinfo = {
    2656             :   { (JSJitGetterOp)get_b },
    2657             :   { prototypes::id::DOMMatrixReadOnly },
    2658             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2659             :   JSJitInfo::Getter,
    2660             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2661             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2662             :   true,  /* isInfallible. False in setters. */
    2663             :   false,  /* isMovable.  Not relevant for setters. */
    2664             :   false, /* isEliminatable.  Not relevant for setters. */
    2665             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2666             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2667             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2668             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2669             : };
    2670             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2671             : static_assert(0 < 1, "There is no slot for us");
    2672             : 
    2673             : static bool
    2674           0 : get_c(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2675             : {
    2676           0 :   double result(self->C());
    2677           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2678           0 :   args.rval().set(JS_NumberValue(double(result)));
    2679           0 :   return true;
    2680             : }
    2681             : 
    2682             : static const JSJitInfo c_getterinfo = {
    2683             :   { (JSJitGetterOp)get_c },
    2684             :   { prototypes::id::DOMMatrixReadOnly },
    2685             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2686             :   JSJitInfo::Getter,
    2687             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2688             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2689             :   true,  /* 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 : get_d(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2702             : {
    2703           0 :   double result(self->D());
    2704           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2705           0 :   args.rval().set(JS_NumberValue(double(result)));
    2706           0 :   return true;
    2707             : }
    2708             : 
    2709             : static const JSJitInfo d_getterinfo = {
    2710             :   { (JSJitGetterOp)get_d },
    2711             :   { prototypes::id::DOMMatrixReadOnly },
    2712             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2713             :   JSJitInfo::Getter,
    2714             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2715             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2716             :   true,  /* isInfallible. False in setters. */
    2717             :   false,  /* isMovable.  Not relevant for setters. */
    2718             :   false, /* isEliminatable.  Not relevant for setters. */
    2719             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2720             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2721             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2722             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2723             : };
    2724             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2725             : static_assert(0 < 1, "There is no slot for us");
    2726             : 
    2727             : static bool
    2728           0 : get_e(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2729             : {
    2730           0 :   double result(self->E());
    2731           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2732           0 :   args.rval().set(JS_NumberValue(double(result)));
    2733           0 :   return true;
    2734             : }
    2735             : 
    2736             : static const JSJitInfo e_getterinfo = {
    2737             :   { (JSJitGetterOp)get_e },
    2738             :   { prototypes::id::DOMMatrixReadOnly },
    2739             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2740             :   JSJitInfo::Getter,
    2741             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2742             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2743             :   true,  /* isInfallible. False in setters. */
    2744             :   false,  /* isMovable.  Not relevant for setters. */
    2745             :   false, /* isEliminatable.  Not relevant for setters. */
    2746             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2747             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2748             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2749             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2750             : };
    2751             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2752             : static_assert(0 < 1, "There is no slot for us");
    2753             : 
    2754             : static bool
    2755           0 : get_f(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2756             : {
    2757           0 :   double result(self->F());
    2758           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2759           0 :   args.rval().set(JS_NumberValue(double(result)));
    2760           0 :   return true;
    2761             : }
    2762             : 
    2763             : static const JSJitInfo f_getterinfo = {
    2764             :   { (JSJitGetterOp)get_f },
    2765             :   { prototypes::id::DOMMatrixReadOnly },
    2766             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2767             :   JSJitInfo::Getter,
    2768             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2769             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2770             :   true,  /* isInfallible. False in setters. */
    2771             :   false,  /* isMovable.  Not relevant for setters. */
    2772             :   false, /* isEliminatable.  Not relevant for setters. */
    2773             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2774             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2775             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2776             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2777             : };
    2778             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2779             : static_assert(0 < 1, "There is no slot for us");
    2780             : 
    2781             : static bool
    2782           0 : get_m11(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2783             : {
    2784           0 :   double result(self->M11());
    2785           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2786           0 :   args.rval().set(JS_NumberValue(double(result)));
    2787           0 :   return true;
    2788             : }
    2789             : 
    2790             : static const JSJitInfo m11_getterinfo = {
    2791             :   { (JSJitGetterOp)get_m11 },
    2792             :   { prototypes::id::DOMMatrixReadOnly },
    2793             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2794             :   JSJitInfo::Getter,
    2795             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2796             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2797             :   true,  /* isInfallible. False in setters. */
    2798             :   false,  /* isMovable.  Not relevant for setters. */
    2799             :   false, /* isEliminatable.  Not relevant for setters. */
    2800             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2801             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2802             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2803             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2804             : };
    2805             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2806             : static_assert(0 < 1, "There is no slot for us");
    2807             : 
    2808             : static bool
    2809           0 : get_m12(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2810             : {
    2811           0 :   double result(self->M12());
    2812           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2813           0 :   args.rval().set(JS_NumberValue(double(result)));
    2814           0 :   return true;
    2815             : }
    2816             : 
    2817             : static const JSJitInfo m12_getterinfo = {
    2818             :   { (JSJitGetterOp)get_m12 },
    2819             :   { prototypes::id::DOMMatrixReadOnly },
    2820             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2821             :   JSJitInfo::Getter,
    2822             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2823             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2824             :   true,  /* isInfallible. False in setters. */
    2825             :   false,  /* isMovable.  Not relevant for setters. */
    2826             :   false, /* isEliminatable.  Not relevant for setters. */
    2827             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2828             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2829             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2830             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2831             : };
    2832             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2833             : static_assert(0 < 1, "There is no slot for us");
    2834             : 
    2835             : static bool
    2836           0 : get_m13(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2837             : {
    2838           0 :   double result(self->M13());
    2839           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2840           0 :   args.rval().set(JS_NumberValue(double(result)));
    2841           0 :   return true;
    2842             : }
    2843             : 
    2844             : static const JSJitInfo m13_getterinfo = {
    2845             :   { (JSJitGetterOp)get_m13 },
    2846             :   { prototypes::id::DOMMatrixReadOnly },
    2847             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2848             :   JSJitInfo::Getter,
    2849             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2850             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2851             :   true,  /* isInfallible. False in setters. */
    2852             :   false,  /* isMovable.  Not relevant for setters. */
    2853             :   false, /* isEliminatable.  Not relevant for setters. */
    2854             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2855             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2856             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2857             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2858             : };
    2859             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2860             : static_assert(0 < 1, "There is no slot for us");
    2861             : 
    2862             : static bool
    2863           0 : get_m14(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2864             : {
    2865           0 :   double result(self->M14());
    2866           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2867           0 :   args.rval().set(JS_NumberValue(double(result)));
    2868           0 :   return true;
    2869             : }
    2870             : 
    2871             : static const JSJitInfo m14_getterinfo = {
    2872             :   { (JSJitGetterOp)get_m14 },
    2873             :   { prototypes::id::DOMMatrixReadOnly },
    2874             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2875             :   JSJitInfo::Getter,
    2876             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2877             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2878             :   true,  /* isInfallible. False in setters. */
    2879             :   false,  /* isMovable.  Not relevant for setters. */
    2880             :   false, /* isEliminatable.  Not relevant for setters. */
    2881             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2882             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2883             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2884             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2885             : };
    2886             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2887             : static_assert(0 < 1, "There is no slot for us");
    2888             : 
    2889             : static bool
    2890           0 : get_m21(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2891             : {
    2892           0 :   double result(self->M21());
    2893           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2894           0 :   args.rval().set(JS_NumberValue(double(result)));
    2895           0 :   return true;
    2896             : }
    2897             : 
    2898             : static const JSJitInfo m21_getterinfo = {
    2899             :   { (JSJitGetterOp)get_m21 },
    2900             :   { prototypes::id::DOMMatrixReadOnly },
    2901             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2902             :   JSJitInfo::Getter,
    2903             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2904             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2905             :   true,  /* isInfallible. False in setters. */
    2906             :   false,  /* isMovable.  Not relevant for setters. */
    2907             :   false, /* isEliminatable.  Not relevant for setters. */
    2908             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2909             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2910             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2911             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2912             : };
    2913             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2914             : static_assert(0 < 1, "There is no slot for us");
    2915             : 
    2916             : static bool
    2917           0 : get_m22(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2918             : {
    2919           0 :   double result(self->M22());
    2920           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2921           0 :   args.rval().set(JS_NumberValue(double(result)));
    2922           0 :   return true;
    2923             : }
    2924             : 
    2925             : static const JSJitInfo m22_getterinfo = {
    2926             :   { (JSJitGetterOp)get_m22 },
    2927             :   { prototypes::id::DOMMatrixReadOnly },
    2928             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2929             :   JSJitInfo::Getter,
    2930             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2931             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2932             :   true,  /* isInfallible. False in setters. */
    2933             :   false,  /* isMovable.  Not relevant for setters. */
    2934             :   false, /* isEliminatable.  Not relevant for setters. */
    2935             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2936             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2937             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2938             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2939             : };
    2940             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2941             : static_assert(0 < 1, "There is no slot for us");
    2942             : 
    2943             : static bool
    2944           0 : get_m23(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2945             : {
    2946           0 :   double result(self->M23());
    2947           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2948           0 :   args.rval().set(JS_NumberValue(double(result)));
    2949           0 :   return true;
    2950             : }
    2951             : 
    2952             : static const JSJitInfo m23_getterinfo = {
    2953             :   { (JSJitGetterOp)get_m23 },
    2954             :   { prototypes::id::DOMMatrixReadOnly },
    2955             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2956             :   JSJitInfo::Getter,
    2957             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2958             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2959             :   true,  /* isInfallible. False in setters. */
    2960             :   false,  /* isMovable.  Not relevant for setters. */
    2961             :   false, /* isEliminatable.  Not relevant for setters. */
    2962             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2963             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2964             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2965             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2966             : };
    2967             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2968             : static_assert(0 < 1, "There is no slot for us");
    2969             : 
    2970             : static bool
    2971           0 : get_m24(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2972             : {
    2973           0 :   double result(self->M24());
    2974           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2975           0 :   args.rval().set(JS_NumberValue(double(result)));
    2976           0 :   return true;
    2977             : }
    2978             : 
    2979             : static const JSJitInfo m24_getterinfo = {
    2980             :   { (JSJitGetterOp)get_m24 },
    2981             :   { prototypes::id::DOMMatrixReadOnly },
    2982             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    2983             :   JSJitInfo::Getter,
    2984             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2985             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2986             :   true,  /* isInfallible. False in setters. */
    2987             :   false,  /* isMovable.  Not relevant for setters. */
    2988             :   false, /* isEliminatable.  Not relevant for setters. */
    2989             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2990             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2991             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2992             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2993             : };
    2994             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2995             : static_assert(0 < 1, "There is no slot for us");
    2996             : 
    2997             : static bool
    2998           0 : get_m31(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    2999             : {
    3000           0 :   double result(self->M31());
    3001           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3002           0 :   args.rval().set(JS_NumberValue(double(result)));
    3003           0 :   return true;
    3004             : }
    3005             : 
    3006             : static const JSJitInfo m31_getterinfo = {
    3007             :   { (JSJitGetterOp)get_m31 },
    3008             :   { prototypes::id::DOMMatrixReadOnly },
    3009             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3010             :   JSJitInfo::Getter,
    3011             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3012             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3013             :   true,  /* isInfallible. False in setters. */
    3014             :   false,  /* isMovable.  Not relevant for setters. */
    3015             :   false, /* isEliminatable.  Not relevant for setters. */
    3016             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3017             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3018             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3019             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3020             : };
    3021             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3022             : static_assert(0 < 1, "There is no slot for us");
    3023             : 
    3024             : static bool
    3025           0 : get_m32(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3026             : {
    3027           0 :   double result(self->M32());
    3028           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3029           0 :   args.rval().set(JS_NumberValue(double(result)));
    3030           0 :   return true;
    3031             : }
    3032             : 
    3033             : static const JSJitInfo m32_getterinfo = {
    3034             :   { (JSJitGetterOp)get_m32 },
    3035             :   { prototypes::id::DOMMatrixReadOnly },
    3036             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3037             :   JSJitInfo::Getter,
    3038             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3039             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3040             :   true,  /* isInfallible. False in setters. */
    3041             :   false,  /* isMovable.  Not relevant for setters. */
    3042             :   false, /* isEliminatable.  Not relevant for setters. */
    3043             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3044             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3045             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3046             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3047             : };
    3048             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3049             : static_assert(0 < 1, "There is no slot for us");
    3050             : 
    3051             : static bool
    3052           0 : get_m33(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3053             : {
    3054           0 :   double result(self->M33());
    3055           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3056           0 :   args.rval().set(JS_NumberValue(double(result)));
    3057           0 :   return true;
    3058             : }
    3059             : 
    3060             : static const JSJitInfo m33_getterinfo = {
    3061             :   { (JSJitGetterOp)get_m33 },
    3062             :   { prototypes::id::DOMMatrixReadOnly },
    3063             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3064             :   JSJitInfo::Getter,
    3065             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3066             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3067             :   true,  /* isInfallible. False in setters. */
    3068             :   false,  /* isMovable.  Not relevant for setters. */
    3069             :   false, /* isEliminatable.  Not relevant for setters. */
    3070             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3071             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3072             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3073             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3074             : };
    3075             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3076             : static_assert(0 < 1, "There is no slot for us");
    3077             : 
    3078             : static bool
    3079           0 : get_m34(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3080             : {
    3081           0 :   double result(self->M34());
    3082           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3083           0 :   args.rval().set(JS_NumberValue(double(result)));
    3084           0 :   return true;
    3085             : }
    3086             : 
    3087             : static const JSJitInfo m34_getterinfo = {
    3088             :   { (JSJitGetterOp)get_m34 },
    3089             :   { prototypes::id::DOMMatrixReadOnly },
    3090             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3091             :   JSJitInfo::Getter,
    3092             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3093             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3094             :   true,  /* isInfallible. False in setters. */
    3095             :   false,  /* isMovable.  Not relevant for setters. */
    3096             :   false, /* isEliminatable.  Not relevant for setters. */
    3097             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3098             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3099             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3100             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3101             : };
    3102             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3103             : static_assert(0 < 1, "There is no slot for us");
    3104             : 
    3105             : static bool
    3106           0 : get_m41(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3107             : {
    3108           0 :   double result(self->M41());
    3109           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3110           0 :   args.rval().set(JS_NumberValue(double(result)));
    3111           0 :   return true;
    3112             : }
    3113             : 
    3114             : static const JSJitInfo m41_getterinfo = {
    3115             :   { (JSJitGetterOp)get_m41 },
    3116             :   { prototypes::id::DOMMatrixReadOnly },
    3117             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3118             :   JSJitInfo::Getter,
    3119             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3120             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3121             :   true,  /* isInfallible. False in setters. */
    3122             :   false,  /* isMovable.  Not relevant for setters. */
    3123             :   false, /* isEliminatable.  Not relevant for setters. */
    3124             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3125             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3126             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3127             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3128             : };
    3129             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3130             : static_assert(0 < 1, "There is no slot for us");
    3131             : 
    3132             : static bool
    3133           0 : get_m42(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3134             : {
    3135           0 :   double result(self->M42());
    3136           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3137           0 :   args.rval().set(JS_NumberValue(double(result)));
    3138           0 :   return true;
    3139             : }
    3140             : 
    3141             : static const JSJitInfo m42_getterinfo = {
    3142             :   { (JSJitGetterOp)get_m42 },
    3143             :   { prototypes::id::DOMMatrixReadOnly },
    3144             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3145             :   JSJitInfo::Getter,
    3146             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3147             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3148             :   true,  /* isInfallible. False in setters. */
    3149             :   false,  /* isMovable.  Not relevant for setters. */
    3150             :   false, /* isEliminatable.  Not relevant for setters. */
    3151             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3152             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3153             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3154             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3155             : };
    3156             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3157             : static_assert(0 < 1, "There is no slot for us");
    3158             : 
    3159             : static bool
    3160           0 : get_m43(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3161             : {
    3162           0 :   double result(self->M43());
    3163           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3164           0 :   args.rval().set(JS_NumberValue(double(result)));
    3165           0 :   return true;
    3166             : }
    3167             : 
    3168             : static const JSJitInfo m43_getterinfo = {
    3169             :   { (JSJitGetterOp)get_m43 },
    3170             :   { prototypes::id::DOMMatrixReadOnly },
    3171             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3172             :   JSJitInfo::Getter,
    3173             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3174             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3175             :   true,  /* isInfallible. False in setters. */
    3176             :   false,  /* isMovable.  Not relevant for setters. */
    3177             :   false, /* isEliminatable.  Not relevant for setters. */
    3178             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3179             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3180             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3181             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3182             : };
    3183             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3184             : static_assert(0 < 1, "There is no slot for us");
    3185             : 
    3186             : static bool
    3187           0 : get_m44(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3188             : {
    3189           0 :   double result(self->M44());
    3190           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3191           0 :   args.rval().set(JS_NumberValue(double(result)));
    3192           0 :   return true;
    3193             : }
    3194             : 
    3195             : static const JSJitInfo m44_getterinfo = {
    3196             :   { (JSJitGetterOp)get_m44 },
    3197             :   { prototypes::id::DOMMatrixReadOnly },
    3198             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3199             :   JSJitInfo::Getter,
    3200             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3201             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    3202             :   true,  /* isInfallible. False in setters. */
    3203             :   false,  /* isMovable.  Not relevant for setters. */
    3204             :   false, /* isEliminatable.  Not relevant for setters. */
    3205             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3206             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3207             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3208             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3209             : };
    3210             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3211             : static_assert(0 < 1, "There is no slot for us");
    3212             : 
    3213             : static bool
    3214           0 : translate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3215             : {
    3216           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3217           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.translate");
    3218             :   }
    3219             :   double arg0;
    3220           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3221           0 :     return false;
    3222             :   }
    3223             :   double arg1;
    3224           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3225           0 :     return false;
    3226             :   }
    3227             :   double arg2;
    3228           0 :   if (args.hasDefined(2)) {
    3229           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    3230           0 :       return false;
    3231             :     }
    3232             :   } else {
    3233           0 :     arg2 = 0.0;
    3234             :   }
    3235           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->Translate(arg0, arg1, arg2)));
    3236           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3237           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3238           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3239           0 :     return false;
    3240             :   }
    3241           0 :   return true;
    3242             : }
    3243             : 
    3244             : static const JSJitInfo translate_methodinfo = {
    3245             :   { (JSJitGetterOp)translate },
    3246             :   { prototypes::id::DOMMatrixReadOnly },
    3247             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3248             :   JSJitInfo::Method,
    3249             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3250             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3251             :   false,  /* isInfallible. False in setters. */
    3252             :   false,  /* isMovable.  Not relevant for setters. */
    3253             :   false, /* isEliminatable.  Not relevant for setters. */
    3254             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3255             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3256             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3257             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3258             : };
    3259             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3260             : static_assert(0 < 1, "There is no slot for us");
    3261             : 
    3262             : static bool
    3263           0 : scale(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3264             : {
    3265           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3266           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.scale");
    3267             :   }
    3268             :   double arg0;
    3269           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3270           0 :     return false;
    3271             :   }
    3272             :   double arg1;
    3273           0 :   if (args.hasDefined(1)) {
    3274           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3275           0 :       return false;
    3276             :     }
    3277             :   } else {
    3278           0 :     arg1 = 0.0;
    3279             :   }
    3280             :   double arg2;
    3281           0 :   if (args.hasDefined(2)) {
    3282           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    3283           0 :       return false;
    3284             :     }
    3285             :   } else {
    3286           0 :     arg2 = 0.0;
    3287             :   }
    3288           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->Scale(arg0, arg1, arg2)));
    3289           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3290           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3291           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3292           0 :     return false;
    3293             :   }
    3294           0 :   return true;
    3295             : }
    3296             : 
    3297             : static const JSJitInfo scale_methodinfo = {
    3298             :   { (JSJitGetterOp)scale },
    3299             :   { prototypes::id::DOMMatrixReadOnly },
    3300             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3301             :   JSJitInfo::Method,
    3302             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3303             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3304             :   false,  /* isInfallible. False in setters. */
    3305             :   false,  /* isMovable.  Not relevant for setters. */
    3306             :   false, /* isEliminatable.  Not relevant for setters. */
    3307             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3308             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3309             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3310             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3311             : };
    3312             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3313             : static_assert(0 < 1, "There is no slot for us");
    3314             : 
    3315             : static bool
    3316           0 : scale3d(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3317             : {
    3318           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3319           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.scale3d");
    3320             :   }
    3321             :   double arg0;
    3322           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3323           0 :     return false;
    3324             :   }
    3325             :   double arg1;
    3326           0 :   if (args.hasDefined(1)) {
    3327           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3328           0 :       return false;
    3329             :     }
    3330             :   } else {
    3331           0 :     arg1 = 0.0;
    3332             :   }
    3333             :   double arg2;
    3334           0 :   if (args.hasDefined(2)) {
    3335           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    3336           0 :       return false;
    3337             :     }
    3338             :   } else {
    3339           0 :     arg2 = 0.0;
    3340             :   }
    3341             :   double arg3;
    3342           0 :   if (args.hasDefined(3)) {
    3343           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[3], &arg3)) {
    3344           0 :       return false;
    3345             :     }
    3346             :   } else {
    3347           0 :     arg3 = 0.0;
    3348             :   }
    3349           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->Scale3d(arg0, arg1, arg2, arg3)));
    3350           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3351           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3352           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3353           0 :     return false;
    3354             :   }
    3355           0 :   return true;
    3356             : }
    3357             : 
    3358             : static const JSJitInfo scale3d_methodinfo = {
    3359             :   { (JSJitGetterOp)scale3d },
    3360             :   { prototypes::id::DOMMatrixReadOnly },
    3361             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3362             :   JSJitInfo::Method,
    3363             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3364             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3365             :   false,  /* isInfallible. False in setters. */
    3366             :   false,  /* isMovable.  Not relevant for setters. */
    3367             :   false, /* isEliminatable.  Not relevant for setters. */
    3368             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3369             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3370             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3371             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3372             : };
    3373             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3374             : static_assert(0 < 1, "There is no slot for us");
    3375             : 
    3376             : static bool
    3377           0 : scaleNonUniform(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3378             : {
    3379           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3380           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.scaleNonUniform");
    3381             :   }
    3382             :   double arg0;
    3383           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3384           0 :     return false;
    3385             :   }
    3386             :   double arg1;
    3387           0 :   if (args.hasDefined(1)) {
    3388           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3389           0 :       return false;
    3390             :     }
    3391             :   } else {
    3392           0 :     arg1 = 1.0;
    3393             :   }
    3394             :   double arg2;
    3395           0 :   if (args.hasDefined(2)) {
    3396           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    3397           0 :       return false;
    3398             :     }
    3399             :   } else {
    3400           0 :     arg2 = 1.0;
    3401             :   }
    3402             :   double arg3;
    3403           0 :   if (args.hasDefined(3)) {
    3404           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[3], &arg3)) {
    3405           0 :       return false;
    3406             :     }
    3407             :   } else {
    3408           0 :     arg3 = 0.0;
    3409             :   }
    3410             :   double arg4;
    3411           0 :   if (args.hasDefined(4)) {
    3412           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[4], &arg4)) {
    3413           0 :       return false;
    3414             :     }
    3415             :   } else {
    3416           0 :     arg4 = 0.0;
    3417             :   }
    3418             :   double arg5;
    3419           0 :   if (args.hasDefined(5)) {
    3420           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[5], &arg5)) {
    3421           0 :       return false;
    3422             :     }
    3423             :   } else {
    3424           0 :     arg5 = 0.0;
    3425             :   }
    3426           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->ScaleNonUniform(arg0, arg1, arg2, arg3, arg4, arg5)));
    3427           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3428           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3429           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3430           0 :     return false;
    3431             :   }
    3432           0 :   return true;
    3433             : }
    3434             : 
    3435             : static const JSJitInfo scaleNonUniform_methodinfo = {
    3436             :   { (JSJitGetterOp)scaleNonUniform },
    3437             :   { prototypes::id::DOMMatrixReadOnly },
    3438             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3439             :   JSJitInfo::Method,
    3440             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3441             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3442             :   false,  /* isInfallible. False in setters. */
    3443             :   false,  /* isMovable.  Not relevant for setters. */
    3444             :   false, /* isEliminatable.  Not relevant for setters. */
    3445             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3446             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3447             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3448             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3449             : };
    3450             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3451             : static_assert(0 < 1, "There is no slot for us");
    3452             : 
    3453             : static bool
    3454           0 : rotate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3455             : {
    3456           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3457           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.rotate");
    3458             :   }
    3459             :   double arg0;
    3460           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3461           0 :     return false;
    3462             :   }
    3463             :   double arg1;
    3464           0 :   if (args.hasDefined(1)) {
    3465           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3466           0 :       return false;
    3467             :     }
    3468             :   } else {
    3469           0 :     arg1 = 0.0;
    3470             :   }
    3471             :   double arg2;
    3472           0 :   if (args.hasDefined(2)) {
    3473           0 :     if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    3474           0 :       return false;
    3475             :     }
    3476             :   } else {
    3477           0 :     arg2 = 0.0;
    3478             :   }
    3479           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->Rotate(arg0, arg1, arg2)));
    3480           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3481           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3482           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3483           0 :     return false;
    3484             :   }
    3485           0 :   return true;
    3486             : }
    3487             : 
    3488             : static const JSJitInfo rotate_methodinfo = {
    3489             :   { (JSJitGetterOp)rotate },
    3490             :   { prototypes::id::DOMMatrixReadOnly },
    3491             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3492             :   JSJitInfo::Method,
    3493             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3494             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3495             :   false,  /* isInfallible. False in setters. */
    3496             :   false,  /* isMovable.  Not relevant for setters. */
    3497             :   false, /* isEliminatable.  Not relevant for setters. */
    3498             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3499             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3500             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3501             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3502             : };
    3503             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3504             : static_assert(0 < 1, "There is no slot for us");
    3505             : 
    3506             : static bool
    3507           0 : rotateFromVector(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3508             : {
    3509           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3510           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.rotateFromVector");
    3511             :   }
    3512             :   double arg0;
    3513           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3514           0 :     return false;
    3515             :   }
    3516             :   double arg1;
    3517           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3518           0 :     return false;
    3519             :   }
    3520           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->RotateFromVector(arg0, arg1)));
    3521           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3522           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3523           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3524           0 :     return false;
    3525             :   }
    3526           0 :   return true;
    3527             : }
    3528             : 
    3529             : static const JSJitInfo rotateFromVector_methodinfo = {
    3530             :   { (JSJitGetterOp)rotateFromVector },
    3531             :   { prototypes::id::DOMMatrixReadOnly },
    3532             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3533             :   JSJitInfo::Method,
    3534             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3535             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3536             :   false,  /* isInfallible. False in setters. */
    3537             :   false,  /* isMovable.  Not relevant for setters. */
    3538             :   false, /* isEliminatable.  Not relevant for setters. */
    3539             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3540             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3541             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3542             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3543             : };
    3544             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3545             : static_assert(0 < 1, "There is no slot for us");
    3546             : 
    3547             : static bool
    3548           0 : rotateAxisAngle(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3549             : {
    3550           0 :   if (MOZ_UNLIKELY(args.length() < 4)) {
    3551           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.rotateAxisAngle");
    3552             :   }
    3553             :   double arg0;
    3554           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3555           0 :     return false;
    3556             :   }
    3557             :   double arg1;
    3558           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
    3559           0 :     return false;
    3560             :   }
    3561             :   double arg2;
    3562           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
    3563           0 :     return false;
    3564             :   }
    3565             :   double arg3;
    3566           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[3], &arg3)) {
    3567           0 :     return false;
    3568             :   }
    3569           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->RotateAxisAngle(arg0, arg1, arg2, arg3)));
    3570           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3571           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3572           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3573           0 :     return false;
    3574             :   }
    3575           0 :   return true;
    3576             : }
    3577             : 
    3578             : static const JSJitInfo rotateAxisAngle_methodinfo = {
    3579             :   { (JSJitGetterOp)rotateAxisAngle },
    3580             :   { prototypes::id::DOMMatrixReadOnly },
    3581             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3582             :   JSJitInfo::Method,
    3583             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3584             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3585             :   false,  /* isInfallible. False in setters. */
    3586             :   false,  /* isMovable.  Not relevant for setters. */
    3587             :   false, /* isEliminatable.  Not relevant for setters. */
    3588             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3589             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3590             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3591             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3592             : };
    3593             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3594             : static_assert(0 < 1, "There is no slot for us");
    3595             : 
    3596             : static bool
    3597           0 : skewX(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3598             : {
    3599           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3600           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.skewX");
    3601             :   }
    3602             :   double arg0;
    3603           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3604           0 :     return false;
    3605             :   }
    3606           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->SkewX(arg0)));
    3607           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3608           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3609           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3610           0 :     return false;
    3611             :   }
    3612           0 :   return true;
    3613             : }
    3614             : 
    3615             : static const JSJitInfo skewX_methodinfo = {
    3616             :   { (JSJitGetterOp)skewX },
    3617             :   { prototypes::id::DOMMatrixReadOnly },
    3618             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3619             :   JSJitInfo::Method,
    3620             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3621             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3622             :   false,  /* isInfallible. False in setters. */
    3623             :   false,  /* isMovable.  Not relevant for setters. */
    3624             :   false, /* isEliminatable.  Not relevant for setters. */
    3625             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3626             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3627             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3628             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3629             : };
    3630             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3631             : static_assert(0 < 1, "There is no slot for us");
    3632             : 
    3633             : static bool
    3634           0 : skewY(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3635             : {
    3636           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3637           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.skewY");
    3638             :   }
    3639             :   double arg0;
    3640           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    3641           0 :     return false;
    3642             :   }
    3643           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->SkewY(arg0)));
    3644           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3645           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3646           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3647           0 :     return false;
    3648             :   }
    3649           0 :   return true;
    3650             : }
    3651             : 
    3652             : static const JSJitInfo skewY_methodinfo = {
    3653             :   { (JSJitGetterOp)skewY },
    3654             :   { prototypes::id::DOMMatrixReadOnly },
    3655             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3656             :   JSJitInfo::Method,
    3657             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3658             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3659             :   false,  /* isInfallible. False in setters. */
    3660             :   false,  /* isMovable.  Not relevant for setters. */
    3661             :   false, /* isEliminatable.  Not relevant for setters. */
    3662             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3663             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3664             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3665             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3666             : };
    3667             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3668             : static_assert(0 < 1, "There is no slot for us");
    3669             : 
    3670             : static bool
    3671           0 : multiply(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3672             : {
    3673           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3674           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "DOMMatrixReadOnly.multiply");
    3675             :   }
    3676           0 :   NonNull<mozilla::dom::DOMMatrix> arg0;
    3677           0 :   if (args[0].isObject()) {
    3678             :     {
    3679           0 :       nsresult rv = UnwrapObject<prototypes::id::DOMMatrix, mozilla::dom::DOMMatrix>(args[0], arg0);
    3680           0 :       if (NS_FAILED(rv)) {
    3681           0 :         ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of DOMMatrixReadOnly.multiply", "DOMMatrix");
    3682           0 :         return false;
    3683             :       }
    3684             :     }
    3685             :   } else {
    3686           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of DOMMatrixReadOnly.multiply");
    3687           0 :     return false;
    3688             :   }
    3689           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->Multiply(NonNullHelper(arg0))));
    3690           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3691           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3692           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3693           0 :     return false;
    3694             :   }
    3695           0 :   return true;
    3696             : }
    3697             : 
    3698             : static const JSJitInfo multiply_methodinfo = {
    3699             :   { (JSJitGetterOp)multiply },
    3700             :   { prototypes::id::DOMMatrixReadOnly },
    3701             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3702             :   JSJitInfo::Method,
    3703             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3704             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3705             :   false,  /* isInfallible. False in setters. */
    3706             :   false,  /* isMovable.  Not relevant for setters. */
    3707             :   false, /* isEliminatable.  Not relevant for setters. */
    3708             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3709             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3710             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3711             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3712             : };
    3713             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3714             : static_assert(0 < 1, "There is no slot for us");
    3715             : 
    3716             : static bool
    3717           0 : flipX(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3718             : {
    3719           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->FlipX()));
    3720           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3721           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3722           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3723           0 :     return false;
    3724             :   }
    3725           0 :   return true;
    3726             : }
    3727             : 
    3728             : static const JSJitInfo flipX_methodinfo = {
    3729             :   { (JSJitGetterOp)flipX },
    3730             :   { prototypes::id::DOMMatrixReadOnly },
    3731             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3732             :   JSJitInfo::Method,
    3733             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3734             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3735             :   false,  /* isInfallible. False in setters. */
    3736             :   false,  /* isMovable.  Not relevant for setters. */
    3737             :   false, /* isEliminatable.  Not relevant for setters. */
    3738             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3739             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3740             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3741             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3742             : };
    3743             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3744             : static_assert(0 < 1, "There is no slot for us");
    3745             : 
    3746             : static bool
    3747           0 : flipY(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3748             : {
    3749           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->FlipY()));
    3750           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3751           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3752           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3753           0 :     return false;
    3754             :   }
    3755           0 :   return true;
    3756             : }
    3757             : 
    3758             : static const JSJitInfo flipY_methodinfo = {
    3759             :   { (JSJitGetterOp)flipY },
    3760             :   { prototypes::id::DOMMatrixReadOnly },
    3761             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3762             :   JSJitInfo::Method,
    3763             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3764             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3765             :   false,  /* isInfallible. False in setters. */
    3766             :   false,  /* isMovable.  Not relevant for setters. */
    3767             :   false, /* isEliminatable.  Not relevant for setters. */
    3768             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3769             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3770             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3771             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3772             : };
    3773             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3774             : static_assert(0 < 1, "There is no slot for us");
    3775             : 
    3776             : static bool
    3777           0 : inverse(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3778             : {
    3779           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMMatrix>(self->Inverse()));
    3780           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3781           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3782           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3783           0 :     return false;
    3784             :   }
    3785           0 :   return true;
    3786             : }
    3787             : 
    3788             : static const JSJitInfo inverse_methodinfo = {
    3789             :   { (JSJitGetterOp)inverse },
    3790             :   { prototypes::id::DOMMatrixReadOnly },
    3791             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3792             :   JSJitInfo::Method,
    3793             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3794             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3795             :   false,  /* isInfallible. False in setters. */
    3796             :   false,  /* isMovable.  Not relevant for setters. */
    3797             :   false, /* isEliminatable.  Not relevant for setters. */
    3798             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3799             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3800             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3801             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3802             : };
    3803             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3804             : static_assert(0 < 1, "There is no slot for us");
    3805             : 
    3806             : static bool
    3807           0 : get_is2D(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3808             : {
    3809           0 :   bool result(self->Is2D());
    3810           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3811           0 :   args.rval().setBoolean(result);
    3812           0 :   return true;
    3813             : }
    3814             : 
    3815             : static const JSJitInfo is2D_getterinfo = {
    3816             :   { (JSJitGetterOp)get_is2D },
    3817             :   { prototypes::id::DOMMatrixReadOnly },
    3818             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3819             :   JSJitInfo::Getter,
    3820             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3821             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    3822             :   true,  /* isInfallible. False in setters. */
    3823             :   false,  /* isMovable.  Not relevant for setters. */
    3824             :   false, /* isEliminatable.  Not relevant for setters. */
    3825             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3826             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3827             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3828             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3829             : };
    3830             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3831             : static_assert(0 < 1, "There is no slot for us");
    3832             : 
    3833             : static bool
    3834           0 : get_identity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, JSJitGetterCallArgs args)
    3835             : {
    3836           0 :   bool result(self->Identity());
    3837           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3838           0 :   args.rval().setBoolean(result);
    3839           0 :   return true;
    3840             : }
    3841             : 
    3842             : static const JSJitInfo identity_getterinfo = {
    3843             :   { (JSJitGetterOp)get_identity },
    3844             :   { prototypes::id::DOMMatrixReadOnly },
    3845             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3846             :   JSJitInfo::Getter,
    3847             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3848             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    3849             :   true,  /* isInfallible. False in setters. */
    3850             :   false,  /* isMovable.  Not relevant for setters. */
    3851             :   false, /* isEliminatable.  Not relevant for setters. */
    3852             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3853             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3854             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3855             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3856             : };
    3857             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3858             : static_assert(0 < 1, "There is no slot for us");
    3859             : 
    3860             : static bool
    3861           0 : transformPoint(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3862             : {
    3863           0 :   binding_detail::FastDOMPointInit arg0;
    3864           0 :   if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of DOMMatrixReadOnly.transformPoint", false)) {
    3865           0 :     return false;
    3866             :   }
    3867           0 :   auto result(StrongOrRawPtr<mozilla::dom::DOMPoint>(self->TransformPoint(Constify(arg0))));
    3868           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3869           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3870           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3871           0 :     return false;
    3872             :   }
    3873           0 :   return true;
    3874             : }
    3875             : 
    3876             : static const JSJitInfo transformPoint_methodinfo = {
    3877             :   { (JSJitGetterOp)transformPoint },
    3878             :   { prototypes::id::DOMMatrixReadOnly },
    3879             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3880             :   JSJitInfo::Method,
    3881             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3882             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3883             :   false,  /* isInfallible. False in setters. */
    3884             :   false,  /* isMovable.  Not relevant for setters. */
    3885             :   false, /* isEliminatable.  Not relevant for setters. */
    3886             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3887             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3888             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3889             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3890             : };
    3891             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3892             : static_assert(0 < 1, "There is no slot for us");
    3893             : 
    3894             : static bool
    3895           0 : toFloat32Array(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3896             : {
    3897           0 :   binding_detail::FastErrorResult rv;
    3898           0 :   JS::Rooted<JSObject*> result(cx);
    3899           0 :   self->ToFloat32Array(cx, &result, rv);
    3900           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3901           0 :     return false;
    3902             :   }
    3903           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3904           0 :   JS::ExposeObjectToActiveJS(result);
    3905           0 :   args.rval().setObject(*result);
    3906           0 :   if (!MaybeWrapNonDOMObjectValue(cx, args.rval())) {
    3907           0 :     return false;
    3908             :   }
    3909           0 :   return true;
    3910             : }
    3911             : 
    3912             : static const JSJitInfo toFloat32Array_methodinfo = {
    3913             :   { (JSJitGetterOp)toFloat32Array },
    3914             :   { prototypes::id::DOMMatrixReadOnly },
    3915             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3916             :   JSJitInfo::Method,
    3917             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3918             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3919             :   false,  /* isInfallible. False in setters. */
    3920             :   false,  /* isMovable.  Not relevant for setters. */
    3921             :   false, /* isEliminatable.  Not relevant for setters. */
    3922             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3923             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3924             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3925             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3926             : };
    3927             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3928             : static_assert(0 < 1, "There is no slot for us");
    3929             : 
    3930             : static bool
    3931           0 : toFloat64Array(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3932             : {
    3933           0 :   binding_detail::FastErrorResult rv;
    3934           0 :   JS::Rooted<JSObject*> result(cx);
    3935           0 :   self->ToFloat64Array(cx, &result, rv);
    3936           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3937           0 :     return false;
    3938             :   }
    3939           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3940           0 :   JS::ExposeObjectToActiveJS(result);
    3941           0 :   args.rval().setObject(*result);
    3942           0 :   if (!MaybeWrapNonDOMObjectValue(cx, args.rval())) {
    3943           0 :     return false;
    3944             :   }
    3945           0 :   return true;
    3946             : }
    3947             : 
    3948             : static const JSJitInfo toFloat64Array_methodinfo = {
    3949             :   { (JSJitGetterOp)toFloat64Array },
    3950             :   { prototypes::id::DOMMatrixReadOnly },
    3951             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3952             :   JSJitInfo::Method,
    3953             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3954             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3955             :   false,  /* isInfallible. False in setters. */
    3956             :   false,  /* isMovable.  Not relevant for setters. */
    3957             :   false, /* isEliminatable.  Not relevant for setters. */
    3958             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3959             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3960             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3961             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3962             : };
    3963             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3964             : static_assert(0 < 1, "There is no slot for us");
    3965             : 
    3966             : static bool
    3967           0 : __stringifier(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::DOMMatrixReadOnly* self, const JSJitMethodCallArgs& args)
    3968             : {
    3969           0 :   DOMString result;
    3970           0 :   self->Stringify(result);
    3971           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3972           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    3973           0 :     return false;
    3974             :   }
    3975           0 :   return true;
    3976             : }
    3977             : 
    3978             : static const JSJitInfo __stringifier_methodinfo = {
    3979             :   { (JSJitGetterOp)__stringifier },
    3980             :   { prototypes::id::DOMMatrixReadOnly },
    3981             :   { PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth },
    3982             :   JSJitInfo::Method,
    3983             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3984             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    3985             :   false,  /* isInfallible. False in setters. */
    3986             :   false,  /* isMovable.  Not relevant for setters. */
    3987             :   false, /* isEliminatable.  Not relevant for setters. */
    3988             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3989             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3990             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3991             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3992             : };
    3993             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3994             : static_assert(0 < 1, "There is no slot for us");
    3995             : 
    3996             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    3997             : #if defined(__clang__)
    3998             : #pragma clang diagnostic push
    3999             : #pragma clang diagnostic ignored "-Wmissing-braces"
    4000             : #endif
    4001             : static const JSFunctionSpec sMethods_specs[] = {
    4002             :   JS_FNSPEC("translate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&translate_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
    4003             :   JS_FNSPEC("scale", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&scale_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    4004             :   JS_FNSPEC("scale3d", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&scale3d_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    4005             :   JS_FNSPEC("scaleNonUniform", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&scaleNonUniform_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    4006             :   JS_FNSPEC("rotate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rotate_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    4007             :   JS_FNSPEC("rotateFromVector", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rotateFromVector_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
    4008             :   JS_FNSPEC("rotateAxisAngle", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rotateAxisAngle_methodinfo), 4, JSPROP_ENUMERATE, nullptr),
    4009             :   JS_FNSPEC("skewX", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&skewX_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    4010             :   JS_FNSPEC("skewY", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&skewY_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    4011             :   JS_FNSPEC("multiply", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&multiply_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    4012             :   JS_FNSPEC("flipX", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&flipX_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    4013             :   JS_FNSPEC("flipY", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&flipY_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    4014             :   JS_FNSPEC("inverse", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&inverse_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    4015             :   JS_FNSPEC("transformPoint", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&transformPoint_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    4016             :   JS_FNSPEC("toFloat32Array", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&toFloat32Array_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    4017             :   JS_FNSPEC("toFloat64Array", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&toFloat64Array_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    4018             :   JS_FNSPEC("toString", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&__stringifier_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    4019             :   JS_FS_END
    4020             : };
    4021             : #if defined(__clang__)
    4022             : #pragma clang diagnostic pop
    4023             : #endif
    4024             : 
    4025             : 
    4026             : // Can't be const because the pref-enabled boolean needs to be writable
    4027             : static Prefable<const JSFunctionSpec> sMethods[] = {
    4028             :   { nullptr, &sMethods_specs[0] },
    4029             :   { nullptr, nullptr }
    4030             : };
    4031             : 
    4032             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    4033             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    4034             : static_assert(17 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    4035             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    4036             : 
    4037             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    4038             : #if defined(__clang__)
    4039             : #pragma clang diagnostic push
    4040             : #pragma clang diagnostic ignored "-Wmissing-braces"
    4041             : #endif
    4042             : static const JSPropertySpec sAttributes_specs[] = {
    4043             :   { "a", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &a_getterinfo, nullptr, nullptr },
    4044             :   { "b", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &b_getterinfo, nullptr, nullptr },
    4045             :   { "c", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &c_getterinfo, nullptr, nullptr },
    4046             :   { "d", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &d_getterinfo, nullptr, nullptr },
    4047             :   { "e", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &e_getterinfo, nullptr, nullptr },
    4048             :   { "f", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &f_getterinfo, nullptr, nullptr },
    4049             :   { "m11", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m11_getterinfo, nullptr, nullptr },
    4050             :   { "m12", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m12_getterinfo, nullptr, nullptr },
    4051             :   { "m13", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m13_getterinfo, nullptr, nullptr },
    4052             :   { "m14", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m14_getterinfo, nullptr, nullptr },
    4053             :   { "m21", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m21_getterinfo, nullptr, nullptr },
    4054             :   { "m22", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m22_getterinfo, nullptr, nullptr },
    4055             :   { "m23", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m23_getterinfo, nullptr, nullptr },
    4056             :   { "m24", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m24_getterinfo, nullptr, nullptr },
    4057             :   { "m31", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m31_getterinfo, nullptr, nullptr },
    4058             :   { "m32", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m32_getterinfo, nullptr, nullptr },
    4059             :   { "m33", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m33_getterinfo, nullptr, nullptr },
    4060             :   { "m34", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m34_getterinfo, nullptr, nullptr },
    4061             :   { "m41", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m41_getterinfo, nullptr, nullptr },
    4062             :   { "m42", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m42_getterinfo, nullptr, nullptr },
    4063             :   { "m43", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m43_getterinfo, nullptr, nullptr },
    4064             :   { "m44", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &m44_getterinfo, nullptr, nullptr },
    4065             :   { "is2D", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &is2D_getterinfo, nullptr, nullptr },
    4066             :   { "identity", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &identity_getterinfo, nullptr, nullptr },
    4067             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    4068             : };
    4069             : #if defined(__clang__)
    4070             : #pragma clang diagnostic pop
    4071             : #endif
    4072             : 
    4073             : 
    4074             : // Can't be const because the pref-enabled boolean needs to be writable
    4075             : static Prefable<const JSPropertySpec> sAttributes[] = {
    4076             :   { nullptr, &sAttributes_specs[0] },
    4077             :   { nullptr, nullptr }
    4078             : };
    4079             : 
    4080             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    4081             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    4082             : static_assert(24 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    4083             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    4084             : 
    4085             : 
    4086             : static uint16_t sNativeProperties_sortedPropertyIndices[41];
    4087             : static PropertyInfo sNativeProperties_propertyInfos[41];
    4088             : 
    4089             : static const NativePropertiesN<2> sNativeProperties = {
    4090             :   false, 0,
    4091             :   false, 0,
    4092             :   true,  0 /* sMethods */,
    4093             :   true,  1 /* sAttributes */,
    4094             :   false, 0,
    4095             :   false, 0,
    4096             :   false, 0,
    4097             :   -1,
    4098             :   41,
    4099             :   sNativeProperties_sortedPropertyIndices,
    4100             :   {
    4101             :     { sMethods, &sNativeProperties_propertyInfos[0] },
    4102             :     { sAttributes, &sNativeProperties_propertyInfos[17] }
    4103             :   }
    4104             : };
    4105             : static_assert(41 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
    4106             :     "We have a property info count that is oversized");
    4107             : 
    4108             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
    4109             :   {
    4110             :     "Function",
    4111             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
    4112             :     &sBoringInterfaceObjectClassClassOps,
    4113             :     JS_NULL_CLASS_SPEC,
    4114             :     JS_NULL_CLASS_EXT,
    4115             :     &sInterfaceObjectClassObjectOps
    4116             :   },
    4117             :   eInterface,
    4118             :   true,
    4119             :   prototypes::id::DOMMatrixReadOnly,
    4120             :   PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth,
    4121             :   sNativePropertyHooks,
    4122             :   "function DOMMatrixReadOnly() {\n    [native code]\n}",
    4123             :   JS::GetRealmFunctionPrototype
    4124             : };
    4125             : 
    4126             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
    4127             :   {
    4128             :     "DOMMatrixReadOnlyPrototype",
    4129             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
    4130             :     JS_NULL_CLASS_OPS,
    4131             :     JS_NULL_CLASS_SPEC,
    4132             :     JS_NULL_CLASS_EXT,
    4133             :     JS_NULL_OBJECT_OPS
    4134             :   },
    4135             :   eInterfacePrototype,
    4136             :   false,
    4137             :   prototypes::id::DOMMatrixReadOnly,
    4138             :   PrototypeTraits<prototypes::id::DOMMatrixReadOnly>::Depth,
    4139             :   sNativePropertyHooks,
    4140             :   "[object DOMMatrixReadOnlyPrototype]",
    4141             :   JS::GetRealmObjectPrototype
    4142             : };
    4143             : 
    4144             : bool
    4145           0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
    4146             : {
    4147             :   static bool sPrefValue;
    4148             :   static bool sPrefCacheSetUp = false;
    4149           0 :   if (!sPrefCacheSetUp) {
    4150           0 :     sPrefCacheSetUp = true;
    4151           0 :     Preferences::AddBoolVarCache(&sPrefValue, "layout.css.DOMMatrix.enabled");
    4152             :   }
    4153             : 
    4154           0 :   return sPrefValue;
    4155             : }
    4156             : 
    4157             : JSObject*
    4158           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
    4159             : {
    4160           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
    4161             : }
    4162             : 
    4163             : const NativePropertyHooks sNativePropertyHooks[] = { {
    4164             :   nullptr,
    4165             :   nullptr,
    4166             :   nullptr,
    4167             :   { sNativeProperties.Upcast(), nullptr },
    4168             :   prototypes::id::DOMMatrixReadOnly,
    4169             :   constructors::id::DOMMatrixReadOnly,
    4170             :   nullptr,
    4171             :   &DefaultXrayExpandoObjectClass
    4172             : } };
    4173             : 
    4174             : void
    4175           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
    4176             : {
    4177           0 :   JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
    4178           0 :   if (!parentProto) {
    4179           0 :     return;
    4180             :   }
    4181             : 
    4182           0 :   JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
    4183           0 :   if (!constructorProto) {
    4184           0 :     return;
    4185             :   }
    4186             : 
    4187             :   static bool sIdsInited = false;
    4188           0 :   if (!sIdsInited && NS_IsMainThread()) {
    4189           0 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
    4190           0 :       return;
    4191             :     }
    4192           0 :     sIdsInited = true;
    4193             :   }
    4194             : 
    4195           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::DOMMatrixReadOnly);
    4196           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::DOMMatrixReadOnly);
    4197           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
    4198             :                               &sPrototypeClass.mBase, protoCache,
    4199             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
    4200             :                               interfaceCache,
    4201             :                               sNativeProperties.Upcast(),
    4202             :                               nullptr,
    4203             :                               "DOMMatrixReadOnly", aDefineOnGlobal,
    4204             :                               nullptr,
    4205           0 :                               false);
    4206             : }
    4207             : 
    4208             : JS::Handle<JSObject*>
    4209           0 : GetProtoObjectHandle(JSContext* aCx)
    4210             : {
    4211             :   /* Get the interface prototype object for this class.  This will create the
    4212             :      object as needed. */
    4213           0 :   bool aDefineOnGlobal = true;
    4214             : 
    4215             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    4216           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    4217           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    4218           0 :     return nullptr;
    4219             :   }
    4220             : 
    4221             :   /* Check to see whether the interface objects are already installed */
    4222           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    4223           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::DOMMatrixReadOnly)) {
    4224           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    4225           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    4226             :   }
    4227             : 
    4228             :   /*
    4229             :    * The object might _still_ be null, but that's OK.
    4230             :    *
    4231             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    4232             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    4233             :    * changed after they have been set.
    4234             :    *
    4235             :    * Calling address() avoids the read read barrier that does gray
    4236             :    * unmarking, but it's not possible for the object to be gray here.
    4237             :    */
    4238             : 
    4239           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::DOMMatrixReadOnly);
    4240           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    4241           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    4242             : }
    4243             : 
    4244             : JSObject*
    4245           0 : GetProtoObject(JSContext* aCx)
    4246             : {
    4247           0 :   return GetProtoObjectHandle(aCx);
    4248             : }
    4249             : 
    4250             : JS::Handle<JSObject*>
    4251           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
    4252             : {
    4253             :   /* Get the interface object for this class.  This will create the object as
    4254             :      needed. */
    4255             : 
    4256             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    4257           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    4258           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    4259           0 :     return nullptr;
    4260             :   }
    4261             : 
    4262             :   /* Check to see whether the interface objects are already installed */
    4263           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    4264           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::DOMMatrixReadOnly)) {
    4265           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    4266           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    4267             :   }
    4268             : 
    4269             :   /*
    4270             :    * The object might _still_ be null, but that's OK.
    4271             :    *
    4272             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    4273             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    4274             :    * changed after they have been set.
    4275             :    *
    4276             :    * Calling address() avoids the read read barrier that does gray
    4277             :    * unmarking, but it's not possible for the object to be gray here.
    4278             :    */
    4279             : 
    4280           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::DOMMatrixReadOnly);
    4281           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    4282           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    4283             : }
    4284             : 
    4285             : JSObject*
    4286           0 : GetConstructorObject(JSContext* aCx)
    4287             : {
    4288           0 :   return GetConstructorObjectHandle(aCx);
    4289             : }
    4290             : 
    4291             : } // namespace DOMMatrixReadOnlyBinding
    4292             : 
    4293             : 
    4294             : 
    4295             : } // namespace dom
    4296             : } // namespace mozilla

Generated by: LCOV version 1.13