Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM WebKitCSSMatrix.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "DOMMatrixBinding.h"
4 : #include "WebKitCSSMatrixBinding.h"
5 : #include "WrapperFactory.h"
6 : #include "mozilla/OwningNonNull.h"
7 : #include "mozilla/dom/BindingUtils.h"
8 : #include "mozilla/dom/DOMJSClass.h"
9 : #include "mozilla/dom/NonRefcountedDOMObject.h"
10 : #include "mozilla/dom/PrimitiveConversions.h"
11 : #include "mozilla/dom/WebKitCSSMatrix.h"
12 : #include "mozilla/dom/XrayExpandoClass.h"
13 :
14 : namespace mozilla {
15 : namespace dom {
16 :
17 : namespace WebKitCSSMatrixBinding {
18 :
19 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<DOMMatrixBinding::NativeType>::value,
20 : "Can't inherit from an interface with a different ownership model.");
21 :
22 : static bool
23 0 : setMatrixValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
24 : {
25 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
26 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebKitCSSMatrix.setMatrixValue");
27 : }
28 0 : binding_detail::FakeString arg0;
29 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
30 0 : return false;
31 : }
32 0 : binding_detail::FastErrorResult rv;
33 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->SetMatrixValue(NonNullHelper(Constify(arg0)), rv)));
34 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
35 0 : return false;
36 : }
37 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
38 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
39 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
40 0 : return false;
41 : }
42 0 : return true;
43 : }
44 :
45 : static const JSJitInfo setMatrixValue_methodinfo = {
46 : { (JSJitGetterOp)setMatrixValue },
47 : { prototypes::id::WebKitCSSMatrix },
48 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
49 : JSJitInfo::Method,
50 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
51 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
52 : false, /* isInfallible. False in setters. */
53 : false, /* isMovable. Not relevant for setters. */
54 : false, /* isEliminatable. Not relevant for setters. */
55 : false, /* isAlwaysInSlot. Only relevant for getters. */
56 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
57 : false, /* isTypedMethod. Only relevant for methods. */
58 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
59 : };
60 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
61 : static_assert(0 < 1, "There is no slot for us");
62 :
63 : static bool
64 0 : multiply(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
65 : {
66 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
67 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebKitCSSMatrix.multiply");
68 : }
69 0 : NonNull<mozilla::dom::WebKitCSSMatrix> arg0;
70 0 : if (args[0].isObject()) {
71 : {
72 0 : nsresult rv = UnwrapObject<prototypes::id::WebKitCSSMatrix, mozilla::dom::WebKitCSSMatrix>(args[0], arg0);
73 0 : if (NS_FAILED(rv)) {
74 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of WebKitCSSMatrix.multiply", "WebKitCSSMatrix");
75 0 : return false;
76 : }
77 : }
78 : } else {
79 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of WebKitCSSMatrix.multiply");
80 0 : return false;
81 : }
82 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->Multiply(NonNullHelper(arg0))));
83 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
84 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
85 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
86 0 : return false;
87 : }
88 0 : return true;
89 : }
90 :
91 : static const JSJitInfo multiply_methodinfo = {
92 : { (JSJitGetterOp)multiply },
93 : { prototypes::id::WebKitCSSMatrix },
94 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
95 : JSJitInfo::Method,
96 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
97 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
98 : false, /* isInfallible. False in setters. */
99 : false, /* isMovable. Not relevant for setters. */
100 : false, /* isEliminatable. Not relevant for setters. */
101 : false, /* isAlwaysInSlot. Only relevant for getters. */
102 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
103 : false, /* isTypedMethod. Only relevant for methods. */
104 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
105 : };
106 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
107 : static_assert(0 < 1, "There is no slot for us");
108 :
109 : static bool
110 0 : inverse(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
111 : {
112 0 : binding_detail::FastErrorResult rv;
113 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->Inverse(rv)));
114 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
115 0 : return false;
116 : }
117 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
118 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
119 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
120 0 : return false;
121 : }
122 0 : return true;
123 : }
124 :
125 : static const JSJitInfo inverse_methodinfo = {
126 : { (JSJitGetterOp)inverse },
127 : { prototypes::id::WebKitCSSMatrix },
128 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
129 : JSJitInfo::Method,
130 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
131 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
132 : false, /* isInfallible. False in setters. */
133 : false, /* isMovable. Not relevant for setters. */
134 : false, /* isEliminatable. Not relevant for setters. */
135 : false, /* isAlwaysInSlot. Only relevant for getters. */
136 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
137 : false, /* isTypedMethod. Only relevant for methods. */
138 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
139 : };
140 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
141 : static_assert(0 < 1, "There is no slot for us");
142 :
143 : static bool
144 0 : translate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
145 : {
146 : double arg0;
147 0 : if (args.hasDefined(0)) {
148 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
149 0 : return false;
150 : }
151 : } else {
152 0 : arg0 = 0.0;
153 : }
154 : double arg1;
155 0 : if (args.hasDefined(1)) {
156 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
157 0 : return false;
158 : }
159 : } else {
160 0 : arg1 = 0.0;
161 : }
162 : double arg2;
163 0 : if (args.hasDefined(2)) {
164 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
165 0 : return false;
166 : }
167 : } else {
168 0 : arg2 = 0.0;
169 : }
170 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->Translate(arg0, arg1, arg2)));
171 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
172 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
173 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
174 0 : return false;
175 : }
176 0 : return true;
177 : }
178 :
179 : static const JSJitInfo translate_methodinfo = {
180 : { (JSJitGetterOp)translate },
181 : { prototypes::id::WebKitCSSMatrix },
182 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
183 : JSJitInfo::Method,
184 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
185 : JSVAL_TYPE_OBJECT, /* 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 : scale(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
199 : {
200 : double arg0;
201 0 : if (args.hasDefined(0)) {
202 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
203 0 : return false;
204 : }
205 : } else {
206 0 : arg0 = 1.0;
207 : }
208 0 : Optional<double> arg1;
209 0 : if (args.hasDefined(1)) {
210 0 : arg1.Construct();
211 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1.Value())) {
212 0 : return false;
213 : }
214 : }
215 : double arg2;
216 0 : if (args.hasDefined(2)) {
217 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
218 0 : return false;
219 : }
220 : } else {
221 0 : arg2 = 1.0;
222 : }
223 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->Scale(arg0, Constify(arg1), arg2)));
224 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
225 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
226 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
227 0 : return false;
228 : }
229 0 : return true;
230 : }
231 :
232 : static const JSJitInfo scale_methodinfo = {
233 : { (JSJitGetterOp)scale },
234 : { prototypes::id::WebKitCSSMatrix },
235 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
236 : JSJitInfo::Method,
237 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
238 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
239 : false, /* isInfallible. False in setters. */
240 : false, /* isMovable. Not relevant for setters. */
241 : false, /* isEliminatable. Not relevant for setters. */
242 : false, /* isAlwaysInSlot. Only relevant for getters. */
243 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
244 : false, /* isTypedMethod. Only relevant for methods. */
245 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
246 : };
247 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
248 : static_assert(0 < 1, "There is no slot for us");
249 :
250 : static bool
251 0 : rotate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
252 : {
253 : double arg0;
254 0 : if (args.hasDefined(0)) {
255 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
256 0 : return false;
257 : }
258 : } else {
259 0 : arg0 = 0.0;
260 : }
261 0 : Optional<double> arg1;
262 0 : if (args.hasDefined(1)) {
263 0 : arg1.Construct();
264 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1.Value())) {
265 0 : return false;
266 : }
267 : }
268 0 : Optional<double> arg2;
269 0 : if (args.hasDefined(2)) {
270 0 : arg2.Construct();
271 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2.Value())) {
272 0 : return false;
273 : }
274 : }
275 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->Rotate(arg0, Constify(arg1), Constify(arg2))));
276 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
277 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
278 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
279 0 : return false;
280 : }
281 0 : return true;
282 : }
283 :
284 : static const JSJitInfo rotate_methodinfo = {
285 : { (JSJitGetterOp)rotate },
286 : { prototypes::id::WebKitCSSMatrix },
287 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
288 : JSJitInfo::Method,
289 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
290 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
291 : false, /* isInfallible. False in setters. */
292 : false, /* isMovable. Not relevant for setters. */
293 : false, /* isEliminatable. Not relevant for setters. */
294 : false, /* isAlwaysInSlot. Only relevant for getters. */
295 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
296 : false, /* isTypedMethod. Only relevant for methods. */
297 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
298 : };
299 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
300 : static_assert(0 < 1, "There is no slot for us");
301 :
302 : static bool
303 0 : rotateAxisAngle(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
304 : {
305 : double arg0;
306 0 : if (args.hasDefined(0)) {
307 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
308 0 : return false;
309 : }
310 : } else {
311 0 : arg0 = 0.0;
312 : }
313 : double arg1;
314 0 : if (args.hasDefined(1)) {
315 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[1], &arg1)) {
316 0 : return false;
317 : }
318 : } else {
319 0 : arg1 = 0.0;
320 : }
321 : double arg2;
322 0 : if (args.hasDefined(2)) {
323 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[2], &arg2)) {
324 0 : return false;
325 : }
326 : } else {
327 0 : arg2 = 0.0;
328 : }
329 : double arg3;
330 0 : if (args.hasDefined(3)) {
331 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[3], &arg3)) {
332 0 : return false;
333 : }
334 : } else {
335 0 : arg3 = 0.0;
336 : }
337 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->RotateAxisAngle(arg0, arg1, arg2, arg3)));
338 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
339 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
340 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
341 0 : return false;
342 : }
343 0 : return true;
344 : }
345 :
346 : static const JSJitInfo rotateAxisAngle_methodinfo = {
347 : { (JSJitGetterOp)rotateAxisAngle },
348 : { prototypes::id::WebKitCSSMatrix },
349 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
350 : JSJitInfo::Method,
351 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
352 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
353 : false, /* isInfallible. False in setters. */
354 : false, /* isMovable. Not relevant for setters. */
355 : false, /* isEliminatable. Not relevant for setters. */
356 : false, /* isAlwaysInSlot. Only relevant for getters. */
357 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
358 : false, /* isTypedMethod. Only relevant for methods. */
359 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
360 : };
361 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
362 : static_assert(0 < 1, "There is no slot for us");
363 :
364 : static bool
365 0 : skewX(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
366 : {
367 : double arg0;
368 0 : if (args.hasDefined(0)) {
369 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
370 0 : return false;
371 : }
372 : } else {
373 0 : arg0 = 0.0;
374 : }
375 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->SkewX(arg0)));
376 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
377 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
378 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
379 0 : return false;
380 : }
381 0 : return true;
382 : }
383 :
384 : static const JSJitInfo skewX_methodinfo = {
385 : { (JSJitGetterOp)skewX },
386 : { prototypes::id::WebKitCSSMatrix },
387 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
388 : JSJitInfo::Method,
389 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
390 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
391 : false, /* isInfallible. False in setters. */
392 : false, /* isMovable. Not relevant for setters. */
393 : false, /* isEliminatable. Not relevant for setters. */
394 : false, /* isAlwaysInSlot. Only relevant for getters. */
395 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
396 : false, /* isTypedMethod. Only relevant for methods. */
397 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
398 : };
399 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
400 : static_assert(0 < 1, "There is no slot for us");
401 :
402 : static bool
403 0 : skewY(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::WebKitCSSMatrix* self, const JSJitMethodCallArgs& args)
404 : {
405 : double arg0;
406 0 : if (args.hasDefined(0)) {
407 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
408 0 : return false;
409 : }
410 : } else {
411 0 : arg0 = 0.0;
412 : }
413 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(self->SkewY(arg0)));
414 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
415 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
416 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
417 0 : return false;
418 : }
419 0 : return true;
420 : }
421 :
422 : static const JSJitInfo skewY_methodinfo = {
423 : { (JSJitGetterOp)skewY },
424 : { prototypes::id::WebKitCSSMatrix },
425 : { PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth },
426 : JSJitInfo::Method,
427 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
428 : JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */
429 : false, /* isInfallible. False in setters. */
430 : false, /* isMovable. Not relevant for setters. */
431 : false, /* isEliminatable. Not relevant for setters. */
432 : false, /* isAlwaysInSlot. Only relevant for getters. */
433 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
434 : false, /* isTypedMethod. Only relevant for methods. */
435 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
436 : };
437 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
438 : static_assert(0 < 1, "There is no slot for us");
439 :
440 : static bool
441 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
442 : {
443 0 : mozilla::dom::WebKitCSSMatrix* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::WebKitCSSMatrix>(obj);
444 : // We don't want to preserve if we don't have a wrapper, and we
445 : // obviously can't preserve if we're not initialized.
446 0 : if (self && self->GetWrapperPreserveColor()) {
447 0 : PreserveWrapper(self);
448 : }
449 0 : return true;
450 : }
451 :
452 : static void
453 0 : _finalize(js::FreeOp* fop, JSObject* obj)
454 : {
455 0 : mozilla::dom::WebKitCSSMatrix* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::WebKitCSSMatrix>(obj);
456 0 : if (self) {
457 0 : ClearWrapper(self, self, obj);
458 0 : AddForDeferredFinalization<mozilla::dom::WebKitCSSMatrix>(self);
459 : }
460 0 : }
461 :
462 : static void
463 0 : _objectMoved(JSObject* obj, const JSObject* old)
464 : {
465 0 : mozilla::dom::WebKitCSSMatrix* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::WebKitCSSMatrix>(obj);
466 0 : if (self) {
467 0 : UpdateWrapper(self, self, obj, old);
468 : }
469 0 : }
470 :
471 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
472 : #if defined(__clang__)
473 : #pragma clang diagnostic push
474 : #pragma clang diagnostic ignored "-Wmissing-braces"
475 : #endif
476 : static const JSFunctionSpec sMethods_specs[] = {
477 : JS_FNSPEC("setMatrixValue", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setMatrixValue_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
478 : JS_FNSPEC("multiply", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&multiply_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
479 : JS_FNSPEC("inverse", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&inverse_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
480 : JS_FNSPEC("translate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&translate_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
481 : JS_FNSPEC("scale", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&scale_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
482 : JS_FNSPEC("rotate", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rotate_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
483 : JS_FNSPEC("rotateAxisAngle", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&rotateAxisAngle_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
484 : JS_FNSPEC("skewX", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&skewX_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
485 : JS_FNSPEC("skewY", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&skewY_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
486 : JS_FS_END
487 : };
488 : #if defined(__clang__)
489 : #pragma clang diagnostic pop
490 : #endif
491 :
492 :
493 : // Can't be const because the pref-enabled boolean needs to be writable
494 : static Prefable<const JSFunctionSpec> sMethods[] = {
495 : { nullptr, &sMethods_specs[0] },
496 : { nullptr, nullptr }
497 : };
498 :
499 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
500 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
501 : static_assert(9 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
502 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
503 :
504 :
505 : static uint16_t sNativeProperties_sortedPropertyIndices[9];
506 : static PropertyInfo sNativeProperties_propertyInfos[9];
507 :
508 : static const NativePropertiesN<1> sNativeProperties = {
509 : false, 0,
510 : false, 0,
511 : true, 0 /* sMethods */,
512 : false, 0,
513 : false, 0,
514 : false, 0,
515 : false, 0,
516 : -1,
517 : 9,
518 : sNativeProperties_sortedPropertyIndices,
519 : {
520 : { sMethods, &sNativeProperties_propertyInfos[0] }
521 : }
522 : };
523 : static_assert(9 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
524 : "We have a property info count that is oversized");
525 :
526 : static bool
527 0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
528 : {
529 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
530 0 : JS::Rooted<JSObject*> obj(cx, &args.callee());
531 0 : if (!args.isConstructing()) {
532 : // XXXbz wish I could get the name from the callee instead of
533 : // Adding more relocations
534 0 : return ThrowConstructorWithoutNew(cx, "WebKitCSSMatrix");
535 : }
536 :
537 0 : GlobalObject global(cx, obj);
538 0 : if (global.Failed()) {
539 0 : return false;
540 : }
541 :
542 0 : JS::Rooted<JSObject*> desiredProto(cx);
543 0 : if (!GetDesiredProto(cx, args, &desiredProto)) {
544 0 : return false;
545 : }
546 :
547 0 : unsigned argcount = std::min(args.length(), 1u);
548 0 : switch (argcount) {
549 : case 0: {
550 0 : bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
551 0 : Maybe<JSAutoCompartment> ac;
552 0 : if (objIsXray) {
553 0 : obj = js::CheckedUnwrap(obj);
554 0 : if (!obj) {
555 0 : return false;
556 : }
557 0 : ac.emplace(cx, obj);
558 0 : if (!JS_WrapObject(cx, &desiredProto)) {
559 0 : return false;
560 : }
561 : }
562 0 : binding_detail::FastErrorResult rv;
563 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(mozilla::dom::WebKitCSSMatrix::Constructor(global, rv)));
564 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
565 0 : return false;
566 : }
567 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
568 : static_assert(!IsPointer<decltype(result)>::value,
569 : "NewObject implies that we need to keep the object alive with a strong reference.");
570 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
571 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
572 0 : return false;
573 : }
574 0 : return true;
575 : break;
576 : }
577 : case 1: {
578 0 : if (args[0].isObject()) {
579 : do {
580 0 : NonNull<mozilla::dom::WebKitCSSMatrix> arg0;
581 : {
582 0 : nsresult rv = UnwrapObject<prototypes::id::WebKitCSSMatrix, mozilla::dom::WebKitCSSMatrix>(args[0], arg0);
583 0 : if (NS_FAILED(rv)) {
584 0 : break;
585 : }
586 : }
587 0 : bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
588 0 : Maybe<JSAutoCompartment> ac;
589 0 : if (objIsXray) {
590 0 : obj = js::CheckedUnwrap(obj);
591 0 : if (!obj) {
592 0 : return false;
593 : }
594 0 : ac.emplace(cx, obj);
595 0 : if (!JS_WrapObject(cx, &desiredProto)) {
596 0 : return false;
597 : }
598 : }
599 0 : binding_detail::FastErrorResult rv;
600 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(mozilla::dom::WebKitCSSMatrix::Constructor(global, NonNullHelper(arg0), rv)));
601 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
602 0 : return false;
603 : }
604 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
605 : static_assert(!IsPointer<decltype(result)>::value,
606 : "NewObject implies that we need to keep the object alive with a strong reference.");
607 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
608 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
609 0 : return false;
610 : }
611 0 : return true;
612 : } while (0);
613 : }
614 0 : bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
615 0 : binding_detail::FakeString arg0;
616 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
617 0 : return false;
618 : }
619 0 : Maybe<JSAutoCompartment> ac;
620 0 : if (objIsXray) {
621 0 : obj = js::CheckedUnwrap(obj);
622 0 : if (!obj) {
623 0 : return false;
624 : }
625 0 : ac.emplace(cx, obj);
626 0 : if (!JS_WrapObject(cx, &desiredProto)) {
627 0 : return false;
628 : }
629 : }
630 0 : binding_detail::FastErrorResult rv;
631 0 : auto result(StrongOrRawPtr<mozilla::dom::WebKitCSSMatrix>(mozilla::dom::WebKitCSSMatrix::Constructor(global, NonNullHelper(Constify(arg0)), rv)));
632 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
633 0 : return false;
634 : }
635 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
636 : static_assert(!IsPointer<decltype(result)>::value,
637 : "NewObject implies that we need to keep the object alive with a strong reference.");
638 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
639 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
640 0 : return false;
641 : }
642 0 : return true;
643 : break;
644 : }
645 : default: {
646 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "WebKitCSSMatrix");
647 : break;
648 : }
649 : }
650 : MOZ_CRASH("We have an always-returning default case");
651 : return false;
652 : }
653 :
654 : static const js::ClassOps sInterfaceObjectClassOps = {
655 : nullptr, /* addProperty */
656 : nullptr, /* delProperty */
657 : nullptr, /* getProperty */
658 : nullptr, /* setProperty */
659 : nullptr, /* enumerate */
660 : nullptr, /* newEnumerate */
661 : nullptr, /* resolve */
662 : nullptr, /* mayResolve */
663 : nullptr, /* finalize */
664 : _constructor, /* call */
665 : nullptr, /* hasInstance */
666 : _constructor, /* construct */
667 : nullptr, /* trace */
668 : };
669 :
670 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
671 : {
672 : "Function",
673 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
674 : &sInterfaceObjectClassOps,
675 : JS_NULL_CLASS_SPEC,
676 : JS_NULL_CLASS_EXT,
677 : &sInterfaceObjectClassObjectOps
678 : },
679 : eInterface,
680 : true,
681 : prototypes::id::WebKitCSSMatrix,
682 : PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth,
683 : sNativePropertyHooks,
684 : "function WebKitCSSMatrix() {\n [native code]\n}",
685 : DOMMatrixBinding::GetConstructorObject
686 : };
687 :
688 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
689 : {
690 : "WebKitCSSMatrixPrototype",
691 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
692 : JS_NULL_CLASS_OPS,
693 : JS_NULL_CLASS_SPEC,
694 : JS_NULL_CLASS_EXT,
695 : JS_NULL_OBJECT_OPS
696 : },
697 : eInterfacePrototype,
698 : false,
699 : prototypes::id::WebKitCSSMatrix,
700 : PrototypeTraits<prototypes::id::WebKitCSSMatrix>::Depth,
701 : sNativePropertyHooks,
702 : "[object WebKitCSSMatrixPrototype]",
703 : DOMMatrixBinding::GetProtoObject
704 : };
705 :
706 : bool
707 0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
708 : {
709 0 : return mozilla::dom::WebKitCSSMatrix::FeatureEnabled(aCx, aObj);
710 : }
711 :
712 : JSObject*
713 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
714 : {
715 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
716 : }
717 :
718 : static const js::ClassOps sClassOps = {
719 : _addProperty, /* addProperty */
720 : nullptr, /* delProperty */
721 : nullptr, /* getProperty */
722 : nullptr, /* setProperty */
723 : nullptr, /* enumerate */
724 : nullptr, /* newEnumerate */
725 : nullptr, /* resolve */
726 : nullptr, /* mayResolve */
727 : _finalize, /* finalize */
728 : nullptr, /* call */
729 : nullptr, /* hasInstance */
730 : nullptr, /* construct */
731 : nullptr, /* trace */
732 : };
733 :
734 : static const js::ClassExtension sClassExtension = {
735 : nullptr, /* weakmapKeyDelegateOp */
736 : _objectMoved /* objectMovedOp */
737 : };
738 :
739 : static const DOMJSClass sClass = {
740 : { "WebKitCSSMatrix",
741 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
742 : &sClassOps,
743 : JS_NULL_CLASS_SPEC,
744 : &sClassExtension,
745 : JS_NULL_OBJECT_OPS
746 : },
747 : { prototypes::id::DOMMatrixReadOnly, prototypes::id::DOMMatrix, prototypes::id::WebKitCSSMatrix, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
748 : IsBaseOf<nsISupports, mozilla::dom::WebKitCSSMatrix >::value,
749 : sNativePropertyHooks,
750 : FindAssociatedGlobalForNative<mozilla::dom::WebKitCSSMatrix>::Get,
751 : GetProtoObjectHandle,
752 : GetCCParticipant<mozilla::dom::WebKitCSSMatrix>::Get()
753 : };
754 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
755 : "Must have the right minimal number of reserved slots.");
756 : static_assert(1 >= 1,
757 : "Must have enough reserved slots.");
758 :
759 : const JSClass*
760 0 : GetJSClass()
761 : {
762 0 : return sClass.ToJSClass();
763 : }
764 :
765 : bool
766 0 : Wrap(JSContext* aCx, mozilla::dom::WebKitCSSMatrix* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
767 : {
768 : MOZ_ASSERT(static_cast<mozilla::dom::WebKitCSSMatrix*>(aObject) ==
769 : reinterpret_cast<mozilla::dom::WebKitCSSMatrix*>(aObject),
770 : "Multiple inheritance for mozilla::dom::WebKitCSSMatrix is broken.");
771 : MOZ_ASSERT(static_cast<mozilla::dom::DOMMatrix*>(aObject) ==
772 : reinterpret_cast<mozilla::dom::DOMMatrix*>(aObject),
773 : "Multiple inheritance for mozilla::dom::DOMMatrix is broken.");
774 : MOZ_ASSERT(static_cast<mozilla::dom::DOMMatrixReadOnly*>(aObject) ==
775 : reinterpret_cast<mozilla::dom::DOMMatrixReadOnly*>(aObject),
776 : "Multiple inheritance for mozilla::dom::DOMMatrixReadOnly is broken.");
777 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
778 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
779 0 : MOZ_ASSERT(!aCache->GetWrapper(),
780 : "You should probably not be using Wrap() directly; use "
781 : "GetOrCreateDOMReflector instead");
782 :
783 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
784 : "nsISupports must be on our primary inheritance chain");
785 :
786 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
787 0 : if (!global) {
788 0 : return false;
789 : }
790 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
791 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
792 :
793 : // That might have ended up wrapping us already, due to the wonders
794 : // of XBL. Check for that, and bail out as needed.
795 0 : aReflector.set(aCache->GetWrapper());
796 0 : if (aReflector) {
797 : #ifdef DEBUG
798 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
799 : #endif // DEBUG
800 0 : return true;
801 : }
802 :
803 0 : JSAutoCompartment ac(aCx, global);
804 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
805 0 : if (!canonicalProto) {
806 0 : return false;
807 : }
808 0 : JS::Rooted<JSObject*> proto(aCx);
809 0 : if (aGivenProto) {
810 0 : proto = aGivenProto;
811 : // Unfortunately, while aGivenProto was in the compartment of aCx
812 : // coming in, we changed compartments to that of "parent" so may need
813 : // to wrap the proto here.
814 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
815 0 : if (!JS_WrapObject(aCx, &proto)) {
816 0 : return false;
817 : }
818 : }
819 : } else {
820 0 : proto = canonicalProto;
821 : }
822 :
823 0 : BindingJSObjectCreator<mozilla::dom::WebKitCSSMatrix> creator(aCx);
824 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
825 0 : if (!aReflector) {
826 0 : return false;
827 : }
828 :
829 0 : aCache->SetWrapper(aReflector);
830 0 : creator.InitializationSucceeded();
831 :
832 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
833 : aCache->GetWrapperPreserveColor() == aReflector);
834 : // If proto != canonicalProto, we have to preserve our wrapper;
835 : // otherwise we won't be able to properly recreate it later, since
836 : // we won't know what proto to use. Note that we don't check
837 : // aGivenProto here, since it's entirely possible (and even
838 : // somewhat common) to have a non-null aGivenProto which is the
839 : // same as canonicalProto.
840 0 : if (proto != canonicalProto) {
841 0 : PreserveWrapper(aObject);
842 : }
843 :
844 0 : return true;
845 : }
846 :
847 : const NativePropertyHooks sNativePropertyHooks[] = { {
848 : nullptr,
849 : nullptr,
850 : nullptr,
851 : { sNativeProperties.Upcast(), nullptr },
852 : prototypes::id::WebKitCSSMatrix,
853 : constructors::id::WebKitCSSMatrix,
854 : DOMMatrixBinding::sNativePropertyHooks,
855 : &DefaultXrayExpandoObjectClass
856 : } };
857 :
858 : void
859 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
860 : {
861 0 : JS::Handle<JSObject*> parentProto(DOMMatrixBinding::GetProtoObjectHandle(aCx));
862 0 : if (!parentProto) {
863 0 : return;
864 : }
865 :
866 0 : JS::Handle<JSObject*> constructorProto(DOMMatrixBinding::GetConstructorObjectHandle(aCx));
867 0 : if (!constructorProto) {
868 0 : return;
869 : }
870 :
871 : static bool sIdsInited = false;
872 0 : if (!sIdsInited && NS_IsMainThread()) {
873 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
874 0 : return;
875 : }
876 0 : sIdsInited = true;
877 : }
878 :
879 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::WebKitCSSMatrix);
880 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::WebKitCSSMatrix);
881 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
882 : &sPrototypeClass.mBase, protoCache,
883 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
884 : interfaceCache,
885 : sNativeProperties.Upcast(),
886 : nullptr,
887 : "WebKitCSSMatrix", aDefineOnGlobal,
888 : nullptr,
889 0 : false);
890 : }
891 :
892 : JS::Handle<JSObject*>
893 0 : GetProtoObjectHandle(JSContext* aCx)
894 : {
895 : /* Get the interface prototype object for this class. This will create the
896 : object as needed. */
897 0 : bool aDefineOnGlobal = true;
898 :
899 : /* Make sure our global is sane. Hopefully we can remove this sometime */
900 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
901 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
902 0 : return nullptr;
903 : }
904 :
905 : /* Check to see whether the interface objects are already installed */
906 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
907 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::WebKitCSSMatrix)) {
908 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
909 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
910 : }
911 :
912 : /*
913 : * The object might _still_ be null, but that's OK.
914 : *
915 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
916 : * traced by TraceProtoAndIfaceCache() and its contents are never
917 : * changed after they have been set.
918 : *
919 : * Calling address() avoids the read read barrier that does gray
920 : * unmarking, but it's not possible for the object to be gray here.
921 : */
922 :
923 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::WebKitCSSMatrix);
924 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
925 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
926 : }
927 :
928 : JS::Handle<JSObject*>
929 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
930 : {
931 : /* Get the interface object for this class. This will create the object as
932 : needed. */
933 :
934 : /* Make sure our global is sane. Hopefully we can remove this sometime */
935 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
936 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
937 0 : return nullptr;
938 : }
939 :
940 : /* Check to see whether the interface objects are already installed */
941 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
942 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::WebKitCSSMatrix)) {
943 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
944 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
945 : }
946 :
947 : /*
948 : * The object might _still_ be null, but that's OK.
949 : *
950 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
951 : * traced by TraceProtoAndIfaceCache() and its contents are never
952 : * changed after they have been set.
953 : *
954 : * Calling address() avoids the read read barrier that does gray
955 : * unmarking, but it's not possible for the object to be gray here.
956 : */
957 :
958 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::WebKitCSSMatrix);
959 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
960 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
961 : }
962 :
963 : JSObject*
964 0 : GetConstructorObject(JSContext* aCx)
965 : {
966 0 : return GetConstructorObjectHandle(aCx);
967 : }
968 :
969 : } // namespace WebKitCSSMatrixBinding
970 :
971 :
972 :
973 : } // namespace dom
974 : } // namespace mozilla
|