File: | var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h |
Warning: | line 1099, column 5 Dereference of undefined pointer value (loaded from field 'stackTop') |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* THIS FILE IS AUTOGENERATED FROM TestExampleGen.webidl BY Codegen.py - DO NOT EDIT */ | |||
2 | ||||
3 | #include <type_traits> | |||
4 | #include "CustomEventBinding.h" | |||
5 | #include "EventBinding.h" | |||
6 | #include "EventHandlerBinding.h" | |||
7 | #include "MainThreadUtils.h" | |||
8 | #include "TestBindingHeader.h" | |||
9 | #include "TestCodeGenBinding.h" | |||
10 | #include "TestDictionaryBinding.h" | |||
11 | #include "TestExampleGenBinding.h" | |||
12 | #include "TestExampleInterface-example.h" | |||
13 | #include "TestExampleProxyInterface-example.h" | |||
14 | #include "TestExampleThrowingConstructorInterface-example.h" | |||
15 | #include "TestExampleWorkerInterface-example.h" | |||
16 | #include "WrapperFactory.h" | |||
17 | #include "XrayWrapper.h" | |||
18 | #include "js/Array.h" | |||
19 | #include "js/CallAndConstruct.h" | |||
20 | #include "js/Exception.h" | |||
21 | #include "js/ForOfIterator.h" | |||
22 | #include "js/MapAndSet.h" | |||
23 | #include "js/Object.h" | |||
24 | #include "js/PropertyAndElement.h" | |||
25 | #include "js/PropertyDescriptor.h" | |||
26 | #include "js/experimental/JitInfo.h" | |||
27 | #include "js/shadow/Object.h" | |||
28 | #include "jsfriendapi.h" | |||
29 | #include "mozilla/Atomics.h" | |||
30 | #include "mozilla/BasePrincipal.h" | |||
31 | #include "mozilla/FloatingPoint.h" | |||
32 | #include "mozilla/OriginTrials.h" | |||
33 | #include "mozilla/OwningNonNull.h" | |||
34 | #include "mozilla/ProfilerLabels.h" | |||
35 | #include "mozilla/dom/BindingCallContext.h" | |||
36 | #include "mozilla/dom/BindingUtils.h" | |||
37 | #include "mozilla/dom/CanvasGradient.h" | |||
38 | #include "mozilla/dom/CanvasPattern.h" | |||
39 | #include "mozilla/dom/CustomElementRegistry.h" | |||
40 | #include "mozilla/dom/DOMJSClass.h" | |||
41 | #include "mozilla/dom/DOMJSProxyHandler.h" | |||
42 | #include "mozilla/dom/DocGroup.h" | |||
43 | #include "mozilla/dom/Document.h" | |||
44 | #include "mozilla/dom/Element.h" | |||
45 | #include "mozilla/dom/ImageData.h" | |||
46 | #include "mozilla/dom/NonRefcountedDOMObject.h" | |||
47 | #include "mozilla/dom/Nullable.h" | |||
48 | #include "mozilla/dom/ObservableArrayProxyHandler.h" | |||
49 | #include "mozilla/dom/PrimitiveConversions.h" | |||
50 | #include "mozilla/dom/Promise.h" | |||
51 | #include "mozilla/dom/ProxyHandlerUtils.h" | |||
52 | #include "mozilla/dom/Record.h" | |||
53 | #include "mozilla/dom/RootedDictionary.h" | |||
54 | #include "mozilla/dom/ToJSValue.h" | |||
55 | #include "mozilla/dom/TypedArray.h" | |||
56 | #include "mozilla/dom/UnionTypes.h" | |||
57 | #include "mozilla/dom/WebIDLPrefs.h" | |||
58 | #include "mozilla/dom/XrayExpandoClass.h" | |||
59 | #include "nsContentUtils.h" | |||
60 | #include "nsIContent.h" | |||
61 | #include "nsJSPrincipals.h" | |||
62 | #include "nsJSUtils.h" | |||
63 | ||||
64 | namespace mozilla::dom { | |||
65 | ||||
66 | namespace binding_detail {}; // Just to make sure it's known as a namespace | |||
67 | using namespace mozilla::dom::binding_detail; | |||
68 | ||||
69 | ||||
70 | namespace TestExampleInterface_Binding { | |||
71 | ||||
72 | static bool | |||
73 | _Example(JSContext* cx_, unsigned argc, JS::Value* vp) | |||
74 | { | |||
75 | BindingCallContext cx(cx_, "Example constructor"); | |||
76 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject78( cx, "Example", "constructor" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
77 | "Example", "constructor", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject78( cx, "Example", "constructor" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
78 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject78( cx, "Example", "constructor" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
79 | ||||
80 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
81 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
82 | if (!args.isConstructing()) { | |||
83 | return ThrowConstructorWithoutNew(cx, "Example"); | |||
84 | } | |||
85 | ||||
86 | JS::Rooted<JSObject*> desiredProto(cx); | |||
87 | if (!GetDesiredProto(cx, args, | |||
88 | prototypes::id::TestExampleInterface, | |||
89 | CreateInterfaceObjects, | |||
90 | &desiredProto)) { | |||
91 | return false; | |||
92 | } | |||
93 | ||||
94 | unsigned argcount = std::min(args.length(), 1u); | |||
95 | switch (argcount) { | |||
96 | case 0: { | |||
97 | GlobalObject global(cx, obj); | |||
98 | if (global.Failed()) { | |||
99 | return false; | |||
100 | } | |||
101 | ||||
102 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
103 | Maybe<JSAutoRealm> ar; | |||
104 | if (objIsXray) { | |||
105 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
106 | // we know Xrays have no dynamic unwrap behavior. | |||
107 | obj = js::CheckedUnwrapStatic(obj); | |||
108 | if (!obj) { | |||
109 | return false; | |||
110 | } | |||
111 | ar.emplace(cx, obj); | |||
112 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
113 | return false; | |||
114 | } | |||
115 | } | |||
116 | FastErrorResult rv; | |||
117 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Example(global, rv))); | |||
118 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "Example constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "Example constructor" )), 0))) { | |||
119 | return false; | |||
120 | } | |||
121 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 121); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 121; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
122 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
123 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
124 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
125 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 125); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 125; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
126 | return false; | |||
127 | } | |||
128 | return true; | |||
129 | break; | |||
130 | } | |||
131 | case 1: { | |||
132 | GlobalObject global(cx, obj); | |||
133 | if (global.Failed()) { | |||
134 | return false; | |||
135 | } | |||
136 | ||||
137 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
138 | binding_detail::FakeString<char16_t> arg0; | |||
139 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
140 | return false; | |||
141 | } | |||
142 | Maybe<JSAutoRealm> ar; | |||
143 | if (objIsXray) { | |||
144 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
145 | // we know Xrays have no dynamic unwrap behavior. | |||
146 | obj = js::CheckedUnwrapStatic(obj); | |||
147 | if (!obj) { | |||
148 | return false; | |||
149 | } | |||
150 | ar.emplace(cx, obj); | |||
151 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
152 | return false; | |||
153 | } | |||
154 | } | |||
155 | FastErrorResult rv; | |||
156 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Example(global, NonNullHelper(Constify(arg0)), rv))); | |||
157 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "Example constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "Example constructor" )), 0))) { | |||
158 | return false; | |||
159 | } | |||
160 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 160); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 160; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
161 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
162 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
163 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
164 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 164); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 164; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
165 | return false; | |||
166 | } | |||
167 | return true; | |||
168 | break; | |||
169 | } | |||
170 | default: { | |||
171 | // Using nsPrintfCString here would require including that | |||
172 | // header. Let's not worry about it. | |||
173 | nsAutoCString argCountStr; | |||
174 | argCountStr.AppendPrintf("%u", args.length()); | |||
175 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
176 | } | |||
177 | } | |||
178 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 178); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 178; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
179 | return false; | |||
180 | } | |||
181 | ||||
182 | static bool | |||
183 | _Example2(JSContext* cx_, unsigned argc, JS::Value* vp) | |||
184 | { | |||
185 | BindingCallContext cx(cx_, "Example2 constructor"); | |||
186 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject188( cx, "Example2", "constructor" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
187 | "Example2", "constructor", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject188( cx, "Example2", "constructor" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
188 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject188( cx, "Example2", "constructor" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
189 | ||||
190 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
191 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
192 | if (!args.isConstructing()) { | |||
193 | return ThrowConstructorWithoutNew(cx, "Example2"); | |||
194 | } | |||
195 | ||||
196 | JS::Rooted<JSObject*> desiredProto(cx); | |||
197 | if (!GetDesiredProto(cx, args, | |||
198 | prototypes::id::TestExampleInterface, | |||
199 | CreateInterfaceObjects, | |||
200 | &desiredProto)) { | |||
201 | return false; | |||
202 | } | |||
203 | ||||
204 | unsigned argcount = std::min(args.length(), 8u); | |||
205 | switch (argcount) { | |||
206 | case 1: { | |||
207 | GlobalObject global(cx, obj); | |||
208 | if (global.Failed()) { | |||
209 | return false; | |||
210 | } | |||
211 | ||||
212 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
213 | LongOrStringAnyRecord arg0; | |||
214 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
215 | return false; | |||
216 | } | |||
217 | Maybe<JSAutoRealm> ar; | |||
218 | if (objIsXray) { | |||
219 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
220 | // we know Xrays have no dynamic unwrap behavior. | |||
221 | obj = js::CheckedUnwrapStatic(obj); | |||
222 | if (!obj) { | |||
223 | return false; | |||
224 | } | |||
225 | ar.emplace(cx, obj); | |||
226 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
227 | return false; | |||
228 | } | |||
229 | if (arg0.IsStringAnyRecord()) { | |||
230 | for (auto& mapEntry0 : arg0.GetAsStringAnyRecord().Entries()) { | |||
231 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&mapEntry0.mValue))) { | |||
232 | return false; | |||
233 | } | |||
234 | } | |||
235 | } | |||
236 | } | |||
237 | FastErrorResult rv; | |||
238 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Example2(global, Constify(arg0), rv))); | |||
239 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "Example2 constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "Example2 constructor" )), 0))) { | |||
240 | return false; | |||
241 | } | |||
242 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 242); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 242; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
243 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
244 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
245 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
246 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 246); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 246; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
247 | return false; | |||
248 | } | |||
249 | return true; | |||
250 | break; | |||
251 | } | |||
252 | case 5: { | |||
253 | [[fallthrough]]; | |||
254 | } | |||
255 | case 6: { | |||
256 | [[fallthrough]]; | |||
257 | } | |||
258 | case 7: { | |||
259 | [[fallthrough]]; | |||
260 | } | |||
261 | case 8: { | |||
262 | GlobalObject global(cx, obj); | |||
263 | if (global.Failed()) { | |||
264 | return false; | |||
265 | } | |||
266 | ||||
267 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
268 | RootedDictionary<binding_detail::FastDictForConstructor> arg0(cx); | |||
269 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
270 | return false; | |||
271 | } | |||
272 | JS::Rooted<JS::Value> arg1(cx); | |||
273 | arg1 = args[1]; | |||
274 | JS::Rooted<JSObject*> arg2(cx); | |||
275 | if (args[2].isObject()) { | |||
276 | arg2 = &args[2].toObject(); | |||
277 | } else { | |||
278 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 3"); | |||
279 | return false; | |||
280 | } | |||
281 | JS::Rooted<JSObject*> arg3(cx); | |||
282 | if (args[3].isObject()) { | |||
283 | arg3 = &args[3].toObject(); | |||
284 | } else if (args[3].isNullOrUndefined()) { | |||
285 | arg3 = nullptr; | |||
286 | } else { | |||
287 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 4"); | |||
288 | return false; | |||
289 | } | |||
290 | binding_detail::AutoSequence<Dict> arg4; | |||
291 | SequenceRooter<Dict> arg4_holder(cx, &arg4); | |||
292 | if (args[4].isObject()) { | |||
293 | JS::ForOfIterator iter(cx); | |||
294 | if (!iter.init(args[4], JS::ForOfIterator::AllowNonIterable)) { | |||
295 | return false; | |||
296 | } | |||
297 | if (!iter.valueIsIterable()) { | |||
298 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 5", "sequence"); | |||
299 | return false; | |||
300 | } | |||
301 | binding_detail::AutoSequence<Dict> &arr = arg4; | |||
302 | JS::Rooted<JS::Value> temp(cx); | |||
303 | while (true) { | |||
304 | bool done; | |||
305 | if (!iter.next(&temp, &done)) { | |||
306 | return false; | |||
307 | } | |||
308 | if (done) { | |||
309 | break; | |||
310 | } | |||
311 | Dict* slotPtr = arr.AppendElement(mozilla::fallible); | |||
312 | if (!slotPtr) { | |||
313 | JS_ReportOutOfMemory(cx); | |||
314 | return false; | |||
315 | } | |||
316 | Dict& slot = *slotPtr; | |||
317 | if (!slot.Init(cx, temp, "Element of argument 5", false)) { | |||
318 | return false; | |||
319 | } | |||
320 | } | |||
321 | } else { | |||
322 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 5", "sequence"); | |||
323 | return false; | |||
324 | } | |||
325 | JS::Rooted<JS::Value> arg5(cx); | |||
326 | if (args.hasDefined(5)) { | |||
327 | arg5 = args[5]; | |||
328 | } else { | |||
329 | arg5 = JS::UndefinedValue(); | |||
330 | } | |||
331 | Optional<JS::Handle<JSObject*>> arg6; | |||
332 | if (args.hasDefined(6)) { | |||
333 | arg6.Construct(cx); | |||
334 | if (args[6].isObject()) { | |||
335 | arg6.Value() = &args[6].toObject(); | |||
336 | } else { | |||
337 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 7"); | |||
338 | return false; | |||
339 | } | |||
340 | } | |||
341 | Optional<JS::Handle<JSObject*>> arg7; | |||
342 | if (args.hasDefined(7)) { | |||
343 | arg7.Construct(cx); | |||
344 | if (args[7].isObject()) { | |||
345 | arg7.Value() = &args[7].toObject(); | |||
346 | } else if (args[7].isNullOrUndefined()) { | |||
347 | arg7.Value() = nullptr; | |||
348 | } else { | |||
349 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 8"); | |||
350 | return false; | |||
351 | } | |||
352 | } | |||
353 | Maybe<JSAutoRealm> ar; | |||
354 | if (objIsXray) { | |||
355 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
356 | // we know Xrays have no dynamic unwrap behavior. | |||
357 | obj = js::CheckedUnwrapStatic(obj); | |||
358 | if (!obj) { | |||
359 | return false; | |||
360 | } | |||
361 | ar.emplace(cx, obj); | |||
362 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
363 | return false; | |||
364 | } | |||
365 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mAny1))) { | |||
366 | return false; | |||
367 | } | |||
368 | if (arg0.mDict.WasPassed()) { | |||
369 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mAnotherAny))) { | |||
370 | return false; | |||
371 | } | |||
372 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mAnotherObj))) { | |||
373 | return false; | |||
374 | } | |||
375 | if (arg0.mDict.Value().mArrayBuffer.WasPassed()) { | |||
376 | if (!arg0.mDict.Value().mArrayBuffer.Value().WrapIntoNewCompartment(cx)) { | |||
377 | return false; | |||
378 | } | |||
379 | } | |||
380 | if (arg0.mDict.Value().mCustomEventInit.WasPassed()) { | |||
381 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mCustomEventInit.Value().mDetail))) { | |||
382 | return false; | |||
383 | } | |||
384 | } | |||
385 | if (arg0.mDict.Value().mDictionaryTypedef.WasPassed()) { | |||
386 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mDictionaryTypedef.Value().mDetail))) { | |||
387 | return false; | |||
388 | } | |||
389 | } | |||
390 | if (arg0.mDict.Value().mEventInitOrLong2.WasPassed()) { | |||
391 | if (arg0.mDict.Value().mEventInitOrLong2.Value().IsCustomEventInit()) { | |||
392 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mEventInitOrLong2.Value().GetAsCustomEventInit().mDetail))) { | |||
393 | return false; | |||
394 | } | |||
395 | } | |||
396 | } | |||
397 | if (arg0.mDict.Value().mEventInitOrLongWithDefaultValue2.IsCustomEventInit()) { | |||
398 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mEventInitOrLongWithDefaultValue2.GetAsCustomEventInit().mDetail))) { | |||
399 | return false; | |||
400 | } | |||
401 | } | |||
402 | if (arg0.mDict.Value().mEventInitOrLongWithDefaultValue4.IsCustomEventInit()) { | |||
403 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mEventInitOrLongWithDefaultValue4.GetAsCustomEventInit().mDetail))) { | |||
404 | return false; | |||
405 | } | |||
406 | } | |||
407 | if (!arg0.mDict.Value().mFloat64Array.IsNull()) { | |||
408 | if (!arg0.mDict.Value().mFloat64Array.Value().WrapIntoNewCompartment(cx)) { | |||
409 | return false; | |||
410 | } | |||
411 | } | |||
412 | if (arg0.mDict.Value().mNullableArrayBuffer.WasPassed()) { | |||
413 | if (!arg0.mDict.Value().mNullableArrayBuffer.Value().IsNull()) { | |||
414 | if (!arg0.mDict.Value().mNullableArrayBuffer.Value().Value().WrapIntoNewCompartment(cx)) { | |||
415 | return false; | |||
416 | } | |||
417 | } | |||
418 | } | |||
419 | if (arg0.mDict.Value().mNullableEventInitOrLong2.WasPassed()) { | |||
420 | if (!arg0.mDict.Value().mNullableEventInitOrLong2.Value().IsNull()) { | |||
421 | if (arg0.mDict.Value().mNullableEventInitOrLong2.Value().Value().IsCustomEventInit()) { | |||
422 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mNullableEventInitOrLong2.Value().Value().GetAsCustomEventInit().mDetail))) { | |||
423 | return false; | |||
424 | } | |||
425 | } | |||
426 | } | |||
427 | } | |||
428 | if (!arg0.mDict.Value().mNullableEventInitOrLongWithDefaultValue2.IsNull()) { | |||
429 | if (arg0.mDict.Value().mNullableEventInitOrLongWithDefaultValue2.Value().IsCustomEventInit()) { | |||
430 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mNullableEventInitOrLongWithDefaultValue2.Value().GetAsCustomEventInit().mDetail))) { | |||
431 | return false; | |||
432 | } | |||
433 | } | |||
434 | } | |||
435 | if (!arg0.mDict.Value().mNullableEventInitOrLongWithDefaultValue4.IsNull()) { | |||
436 | if (arg0.mDict.Value().mNullableEventInitOrLongWithDefaultValue4.Value().IsCustomEventInit()) { | |||
437 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mNullableEventInitOrLongWithDefaultValue4.Value().GetAsCustomEventInit().mDetail))) { | |||
438 | return false; | |||
439 | } | |||
440 | } | |||
441 | } | |||
442 | if (arg0.mDict.Value().mNullableObjectSequenceOrLong.WasPassed()) { | |||
443 | if (!arg0.mDict.Value().mNullableObjectSequenceOrLong.Value().IsNull()) { | |||
444 | if (arg0.mDict.Value().mNullableObjectSequenceOrLong.Value().Value().IsObjectSequence()) { | |||
445 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict.Value().mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence().Length(); ++indexName0) { | |||
446 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence()[indexName0]))) { | |||
447 | return false; | |||
448 | } | |||
449 | } | |||
450 | } | |||
451 | } | |||
452 | } | |||
453 | if (!arg0.mDict.Value().mNullableObjectSequenceOrLongWithDefaultValue1.IsNull()) { | |||
454 | if (arg0.mDict.Value().mNullableObjectSequenceOrLongWithDefaultValue1.Value().IsObjectSequence()) { | |||
455 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict.Value().mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence().Length(); ++indexName0) { | |||
456 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence()[indexName0]))) { | |||
457 | return false; | |||
458 | } | |||
459 | } | |||
460 | } | |||
461 | } | |||
462 | if (!arg0.mDict.Value().mNullableObjectSequenceOrLongWithDefaultValue2.IsNull()) { | |||
463 | if (arg0.mDict.Value().mNullableObjectSequenceOrLongWithDefaultValue2.Value().IsObjectSequence()) { | |||
464 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict.Value().mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence().Length(); ++indexName0) { | |||
465 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence()[indexName0]))) { | |||
466 | return false; | |||
467 | } | |||
468 | } | |||
469 | } | |||
470 | } | |||
471 | if (arg0.mDict.Value().mObjectOrLong.WasPassed()) { | |||
472 | if (arg0.mDict.Value().mObjectOrLong.Value().IsObject()) { | |||
473 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mObjectOrLong.Value().GetAsObject()))) { | |||
474 | return false; | |||
475 | } | |||
476 | } | |||
477 | } | |||
478 | if (arg0.mDict.Value().mObjectSequenceOrLong.WasPassed()) { | |||
479 | if (arg0.mDict.Value().mObjectSequenceOrLong.Value().IsObjectSequence()) { | |||
480 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict.Value().mObjectSequenceOrLong.Value().GetAsObjectSequence().Length(); ++indexName0) { | |||
481 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mObjectSequenceOrLong.Value().GetAsObjectSequence()[indexName0]))) { | |||
482 | return false; | |||
483 | } | |||
484 | } | |||
485 | } | |||
486 | } | |||
487 | if (arg0.mDict.Value().mObjectSequenceOrLongWithDefaultValue1.IsObjectSequence()) { | |||
488 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict.Value().mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence().Length(); ++indexName0) { | |||
489 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence()[indexName0]))) { | |||
490 | return false; | |||
491 | } | |||
492 | } | |||
493 | } | |||
494 | if (arg0.mDict.Value().mObjectSequenceOrLongWithDefaultValue2.IsObjectSequence()) { | |||
495 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict.Value().mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence().Length(); ++indexName0) { | |||
496 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence()[indexName0]))) { | |||
497 | return false; | |||
498 | } | |||
499 | } | |||
500 | } | |||
501 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mRequiredObject))) { | |||
502 | return false; | |||
503 | } | |||
504 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mSomeAny))) { | |||
505 | return false; | |||
506 | } | |||
507 | if (arg0.mDict.Value().mSomeObj.WasPassed()) { | |||
508 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict.Value().mSomeObj.Value()))) { | |||
509 | return false; | |||
510 | } | |||
511 | } | |||
512 | if (arg0.mDict.Value().mUint8Array.WasPassed()) { | |||
513 | if (!arg0.mDict.Value().mUint8Array.Value().WrapIntoNewCompartment(cx)) { | |||
514 | return false; | |||
515 | } | |||
516 | } | |||
517 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict.Value().mParentAny))) { | |||
518 | return false; | |||
519 | } | |||
520 | } | |||
521 | if (arg0.mDict2.WasPassed()) { | |||
522 | if (arg0.mDict2.Value().mMemberDict.WasPassed()) { | |||
523 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mAnotherAny))) { | |||
524 | return false; | |||
525 | } | |||
526 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mAnotherObj))) { | |||
527 | return false; | |||
528 | } | |||
529 | if (arg0.mDict2.Value().mMemberDict.Value().mArrayBuffer.WasPassed()) { | |||
530 | if (!arg0.mDict2.Value().mMemberDict.Value().mArrayBuffer.Value().WrapIntoNewCompartment(cx)) { | |||
531 | return false; | |||
532 | } | |||
533 | } | |||
534 | if (arg0.mDict2.Value().mMemberDict.Value().mCustomEventInit.WasPassed()) { | |||
535 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mCustomEventInit.Value().mDetail))) { | |||
536 | return false; | |||
537 | } | |||
538 | } | |||
539 | if (arg0.mDict2.Value().mMemberDict.Value().mDictionaryTypedef.WasPassed()) { | |||
540 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mDictionaryTypedef.Value().mDetail))) { | |||
541 | return false; | |||
542 | } | |||
543 | } | |||
544 | if (arg0.mDict2.Value().mMemberDict.Value().mEventInitOrLong2.WasPassed()) { | |||
545 | if (arg0.mDict2.Value().mMemberDict.Value().mEventInitOrLong2.Value().IsCustomEventInit()) { | |||
546 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mEventInitOrLong2.Value().GetAsCustomEventInit().mDetail))) { | |||
547 | return false; | |||
548 | } | |||
549 | } | |||
550 | } | |||
551 | if (arg0.mDict2.Value().mMemberDict.Value().mEventInitOrLongWithDefaultValue2.IsCustomEventInit()) { | |||
552 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mEventInitOrLongWithDefaultValue2.GetAsCustomEventInit().mDetail))) { | |||
553 | return false; | |||
554 | } | |||
555 | } | |||
556 | if (arg0.mDict2.Value().mMemberDict.Value().mEventInitOrLongWithDefaultValue4.IsCustomEventInit()) { | |||
557 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mEventInitOrLongWithDefaultValue4.GetAsCustomEventInit().mDetail))) { | |||
558 | return false; | |||
559 | } | |||
560 | } | |||
561 | if (!arg0.mDict2.Value().mMemberDict.Value().mFloat64Array.IsNull()) { | |||
562 | if (!arg0.mDict2.Value().mMemberDict.Value().mFloat64Array.Value().WrapIntoNewCompartment(cx)) { | |||
563 | return false; | |||
564 | } | |||
565 | } | |||
566 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableArrayBuffer.WasPassed()) { | |||
567 | if (!arg0.mDict2.Value().mMemberDict.Value().mNullableArrayBuffer.Value().IsNull()) { | |||
568 | if (!arg0.mDict2.Value().mMemberDict.Value().mNullableArrayBuffer.Value().Value().WrapIntoNewCompartment(cx)) { | |||
569 | return false; | |||
570 | } | |||
571 | } | |||
572 | } | |||
573 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLong2.WasPassed()) { | |||
574 | if (!arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLong2.Value().IsNull()) { | |||
575 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLong2.Value().Value().IsCustomEventInit()) { | |||
576 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLong2.Value().Value().GetAsCustomEventInit().mDetail))) { | |||
577 | return false; | |||
578 | } | |||
579 | } | |||
580 | } | |||
581 | } | |||
582 | if (!arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLongWithDefaultValue2.IsNull()) { | |||
583 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLongWithDefaultValue2.Value().IsCustomEventInit()) { | |||
584 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLongWithDefaultValue2.Value().GetAsCustomEventInit().mDetail))) { | |||
585 | return false; | |||
586 | } | |||
587 | } | |||
588 | } | |||
589 | if (!arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLongWithDefaultValue4.IsNull()) { | |||
590 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLongWithDefaultValue4.Value().IsCustomEventInit()) { | |||
591 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mNullableEventInitOrLongWithDefaultValue4.Value().GetAsCustomEventInit().mDetail))) { | |||
592 | return false; | |||
593 | } | |||
594 | } | |||
595 | } | |||
596 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLong.WasPassed()) { | |||
597 | if (!arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLong.Value().IsNull()) { | |||
598 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLong.Value().Value().IsObjectSequence()) { | |||
599 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence().Length(); ++indexName0) { | |||
600 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence()[indexName0]))) { | |||
601 | return false; | |||
602 | } | |||
603 | } | |||
604 | } | |||
605 | } | |||
606 | } | |||
607 | if (!arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLongWithDefaultValue1.IsNull()) { | |||
608 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLongWithDefaultValue1.Value().IsObjectSequence()) { | |||
609 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence().Length(); ++indexName0) { | |||
610 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence()[indexName0]))) { | |||
611 | return false; | |||
612 | } | |||
613 | } | |||
614 | } | |||
615 | } | |||
616 | if (!arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLongWithDefaultValue2.IsNull()) { | |||
617 | if (arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLongWithDefaultValue2.Value().IsObjectSequence()) { | |||
618 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence().Length(); ++indexName0) { | |||
619 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence()[indexName0]))) { | |||
620 | return false; | |||
621 | } | |||
622 | } | |||
623 | } | |||
624 | } | |||
625 | if (arg0.mDict2.Value().mMemberDict.Value().mObjectOrLong.WasPassed()) { | |||
626 | if (arg0.mDict2.Value().mMemberDict.Value().mObjectOrLong.Value().IsObject()) { | |||
627 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mObjectOrLong.Value().GetAsObject()))) { | |||
628 | return false; | |||
629 | } | |||
630 | } | |||
631 | } | |||
632 | if (arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLong.WasPassed()) { | |||
633 | if (arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLong.Value().IsObjectSequence()) { | |||
634 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLong.Value().GetAsObjectSequence().Length(); ++indexName0) { | |||
635 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLong.Value().GetAsObjectSequence()[indexName0]))) { | |||
636 | return false; | |||
637 | } | |||
638 | } | |||
639 | } | |||
640 | } | |||
641 | if (arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLongWithDefaultValue1.IsObjectSequence()) { | |||
642 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence().Length(); ++indexName0) { | |||
643 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence()[indexName0]))) { | |||
644 | return false; | |||
645 | } | |||
646 | } | |||
647 | } | |||
648 | if (arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLongWithDefaultValue2.IsObjectSequence()) { | |||
649 | for (uint32_t indexName0 = 0; indexName0 < arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence().Length(); ++indexName0) { | |||
650 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence()[indexName0]))) { | |||
651 | return false; | |||
652 | } | |||
653 | } | |||
654 | } | |||
655 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mRequiredObject))) { | |||
656 | return false; | |||
657 | } | |||
658 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mSomeAny))) { | |||
659 | return false; | |||
660 | } | |||
661 | if (arg0.mDict2.Value().mMemberDict.Value().mSomeObj.WasPassed()) { | |||
662 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mSomeObj.Value()))) { | |||
663 | return false; | |||
664 | } | |||
665 | } | |||
666 | if (arg0.mDict2.Value().mMemberDict.Value().mUint8Array.WasPassed()) { | |||
667 | if (!arg0.mDict2.Value().mMemberDict.Value().mUint8Array.Value().WrapIntoNewCompartment(cx)) { | |||
668 | return false; | |||
669 | } | |||
670 | } | |||
671 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mDict2.Value().mMemberDict.Value().mParentAny))) { | |||
672 | return false; | |||
673 | } | |||
674 | } | |||
675 | } | |||
676 | if (arg0.mObj1.WasPassed()) { | |||
677 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mObj1.Value()))) { | |||
678 | return false; | |||
679 | } | |||
680 | } | |||
681 | if (arg0.mObj2.WasPassed()) { | |||
682 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mObj2.Value()))) { | |||
683 | return false; | |||
684 | } | |||
685 | } | |||
686 | if (arg0.mSeq1.WasPassed()) { | |||
687 | for (uint32_t indexName0 = 0; indexName0 < arg0.mSeq1.Value().Length(); ++indexName0) { | |||
688 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mAnotherAny))) { | |||
689 | return false; | |||
690 | } | |||
691 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mAnotherObj))) { | |||
692 | return false; | |||
693 | } | |||
694 | if (arg0.mSeq1.Value()[indexName0].mArrayBuffer.WasPassed()) { | |||
695 | if (!arg0.mSeq1.Value()[indexName0].mArrayBuffer.Value().WrapIntoNewCompartment(cx)) { | |||
696 | return false; | |||
697 | } | |||
698 | } | |||
699 | if (arg0.mSeq1.Value()[indexName0].mCustomEventInit.WasPassed()) { | |||
700 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mCustomEventInit.Value().mDetail))) { | |||
701 | return false; | |||
702 | } | |||
703 | } | |||
704 | if (arg0.mSeq1.Value()[indexName0].mDictionaryTypedef.WasPassed()) { | |||
705 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mDictionaryTypedef.Value().mDetail))) { | |||
706 | return false; | |||
707 | } | |||
708 | } | |||
709 | if (arg0.mSeq1.Value()[indexName0].mEventInitOrLong2.WasPassed()) { | |||
710 | if (arg0.mSeq1.Value()[indexName0].mEventInitOrLong2.Value().IsCustomEventInit()) { | |||
711 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mEventInitOrLong2.Value().GetAsCustomEventInit().mDetail))) { | |||
712 | return false; | |||
713 | } | |||
714 | } | |||
715 | } | |||
716 | if (arg0.mSeq1.Value()[indexName0].mEventInitOrLongWithDefaultValue2.IsCustomEventInit()) { | |||
717 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mEventInitOrLongWithDefaultValue2.GetAsCustomEventInit().mDetail))) { | |||
718 | return false; | |||
719 | } | |||
720 | } | |||
721 | if (arg0.mSeq1.Value()[indexName0].mEventInitOrLongWithDefaultValue4.IsCustomEventInit()) { | |||
722 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mEventInitOrLongWithDefaultValue4.GetAsCustomEventInit().mDetail))) { | |||
723 | return false; | |||
724 | } | |||
725 | } | |||
726 | if (!arg0.mSeq1.Value()[indexName0].mFloat64Array.IsNull()) { | |||
727 | if (!arg0.mSeq1.Value()[indexName0].mFloat64Array.Value().WrapIntoNewCompartment(cx)) { | |||
728 | return false; | |||
729 | } | |||
730 | } | |||
731 | if (arg0.mSeq1.Value()[indexName0].mNullableArrayBuffer.WasPassed()) { | |||
732 | if (!arg0.mSeq1.Value()[indexName0].mNullableArrayBuffer.Value().IsNull()) { | |||
733 | if (!arg0.mSeq1.Value()[indexName0].mNullableArrayBuffer.Value().Value().WrapIntoNewCompartment(cx)) { | |||
734 | return false; | |||
735 | } | |||
736 | } | |||
737 | } | |||
738 | if (arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLong2.WasPassed()) { | |||
739 | if (!arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLong2.Value().IsNull()) { | |||
740 | if (arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLong2.Value().Value().IsCustomEventInit()) { | |||
741 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLong2.Value().Value().GetAsCustomEventInit().mDetail))) { | |||
742 | return false; | |||
743 | } | |||
744 | } | |||
745 | } | |||
746 | } | |||
747 | if (!arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLongWithDefaultValue2.IsNull()) { | |||
748 | if (arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLongWithDefaultValue2.Value().IsCustomEventInit()) { | |||
749 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLongWithDefaultValue2.Value().GetAsCustomEventInit().mDetail))) { | |||
750 | return false; | |||
751 | } | |||
752 | } | |||
753 | } | |||
754 | if (!arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLongWithDefaultValue4.IsNull()) { | |||
755 | if (arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLongWithDefaultValue4.Value().IsCustomEventInit()) { | |||
756 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mNullableEventInitOrLongWithDefaultValue4.Value().GetAsCustomEventInit().mDetail))) { | |||
757 | return false; | |||
758 | } | |||
759 | } | |||
760 | } | |||
761 | if (arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLong.WasPassed()) { | |||
762 | if (!arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLong.Value().IsNull()) { | |||
763 | if (arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLong.Value().Value().IsObjectSequence()) { | |||
764 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence().Length(); ++indexName1) { | |||
765 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence()[indexName1]))) { | |||
766 | return false; | |||
767 | } | |||
768 | } | |||
769 | } | |||
770 | } | |||
771 | } | |||
772 | if (!arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLongWithDefaultValue1.IsNull()) { | |||
773 | if (arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLongWithDefaultValue1.Value().IsObjectSequence()) { | |||
774 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence().Length(); ++indexName1) { | |||
775 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence()[indexName1]))) { | |||
776 | return false; | |||
777 | } | |||
778 | } | |||
779 | } | |||
780 | } | |||
781 | if (!arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLongWithDefaultValue2.IsNull()) { | |||
782 | if (arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLongWithDefaultValue2.Value().IsObjectSequence()) { | |||
783 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence().Length(); ++indexName1) { | |||
784 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence()[indexName1]))) { | |||
785 | return false; | |||
786 | } | |||
787 | } | |||
788 | } | |||
789 | } | |||
790 | if (arg0.mSeq1.Value()[indexName0].mObjectOrLong.WasPassed()) { | |||
791 | if (arg0.mSeq1.Value()[indexName0].mObjectOrLong.Value().IsObject()) { | |||
792 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mObjectOrLong.Value().GetAsObject()))) { | |||
793 | return false; | |||
794 | } | |||
795 | } | |||
796 | } | |||
797 | if (arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLong.WasPassed()) { | |||
798 | if (arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLong.Value().IsObjectSequence()) { | |||
799 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLong.Value().GetAsObjectSequence().Length(); ++indexName1) { | |||
800 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLong.Value().GetAsObjectSequence()[indexName1]))) { | |||
801 | return false; | |||
802 | } | |||
803 | } | |||
804 | } | |||
805 | } | |||
806 | if (arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLongWithDefaultValue1.IsObjectSequence()) { | |||
807 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence().Length(); ++indexName1) { | |||
808 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence()[indexName1]))) { | |||
809 | return false; | |||
810 | } | |||
811 | } | |||
812 | } | |||
813 | if (arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLongWithDefaultValue2.IsObjectSequence()) { | |||
814 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence().Length(); ++indexName1) { | |||
815 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence()[indexName1]))) { | |||
816 | return false; | |||
817 | } | |||
818 | } | |||
819 | } | |||
820 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mRequiredObject))) { | |||
821 | return false; | |||
822 | } | |||
823 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mSomeAny))) { | |||
824 | return false; | |||
825 | } | |||
826 | if (arg0.mSeq1.Value()[indexName0].mSomeObj.WasPassed()) { | |||
827 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mSomeObj.Value()))) { | |||
828 | return false; | |||
829 | } | |||
830 | } | |||
831 | if (arg0.mSeq1.Value()[indexName0].mUint8Array.WasPassed()) { | |||
832 | if (!arg0.mSeq1.Value()[indexName0].mUint8Array.Value().WrapIntoNewCompartment(cx)) { | |||
833 | return false; | |||
834 | } | |||
835 | } | |||
836 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq1.Value()[indexName0].mParentAny))) { | |||
837 | return false; | |||
838 | } | |||
839 | } | |||
840 | } | |||
841 | if (arg0.mSeq2.WasPassed()) { | |||
842 | if (!arg0.mSeq2.Value().IsNull()) { | |||
843 | for (uint32_t indexName0 = 0; indexName0 < arg0.mSeq2.Value().Value().Length(); ++indexName0) { | |||
844 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq2.Value().Value()[indexName0].Length(); ++indexName1) { | |||
845 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mAnotherAny))) { | |||
846 | return false; | |||
847 | } | |||
848 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mAnotherObj))) { | |||
849 | return false; | |||
850 | } | |||
851 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mArrayBuffer.WasPassed()) { | |||
852 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mArrayBuffer.Value().WrapIntoNewCompartment(cx)) { | |||
853 | return false; | |||
854 | } | |||
855 | } | |||
856 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mCustomEventInit.WasPassed()) { | |||
857 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mCustomEventInit.Value().mDetail))) { | |||
858 | return false; | |||
859 | } | |||
860 | } | |||
861 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mDictionaryTypedef.WasPassed()) { | |||
862 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mDictionaryTypedef.Value().mDetail))) { | |||
863 | return false; | |||
864 | } | |||
865 | } | |||
866 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mEventInitOrLong2.WasPassed()) { | |||
867 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mEventInitOrLong2.Value().IsCustomEventInit()) { | |||
868 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mEventInitOrLong2.Value().GetAsCustomEventInit().mDetail))) { | |||
869 | return false; | |||
870 | } | |||
871 | } | |||
872 | } | |||
873 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mEventInitOrLongWithDefaultValue2.IsCustomEventInit()) { | |||
874 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mEventInitOrLongWithDefaultValue2.GetAsCustomEventInit().mDetail))) { | |||
875 | return false; | |||
876 | } | |||
877 | } | |||
878 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mEventInitOrLongWithDefaultValue4.IsCustomEventInit()) { | |||
879 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mEventInitOrLongWithDefaultValue4.GetAsCustomEventInit().mDetail))) { | |||
880 | return false; | |||
881 | } | |||
882 | } | |||
883 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mFloat64Array.IsNull()) { | |||
884 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mFloat64Array.Value().WrapIntoNewCompartment(cx)) { | |||
885 | return false; | |||
886 | } | |||
887 | } | |||
888 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableArrayBuffer.WasPassed()) { | |||
889 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableArrayBuffer.Value().IsNull()) { | |||
890 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableArrayBuffer.Value().Value().WrapIntoNewCompartment(cx)) { | |||
891 | return false; | |||
892 | } | |||
893 | } | |||
894 | } | |||
895 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLong2.WasPassed()) { | |||
896 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLong2.Value().IsNull()) { | |||
897 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLong2.Value().Value().IsCustomEventInit()) { | |||
898 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLong2.Value().Value().GetAsCustomEventInit().mDetail))) { | |||
899 | return false; | |||
900 | } | |||
901 | } | |||
902 | } | |||
903 | } | |||
904 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLongWithDefaultValue2.IsNull()) { | |||
905 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLongWithDefaultValue2.Value().IsCustomEventInit()) { | |||
906 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLongWithDefaultValue2.Value().GetAsCustomEventInit().mDetail))) { | |||
907 | return false; | |||
908 | } | |||
909 | } | |||
910 | } | |||
911 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLongWithDefaultValue4.IsNull()) { | |||
912 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLongWithDefaultValue4.Value().IsCustomEventInit()) { | |||
913 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableEventInitOrLongWithDefaultValue4.Value().GetAsCustomEventInit().mDetail))) { | |||
914 | return false; | |||
915 | } | |||
916 | } | |||
917 | } | |||
918 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLong.WasPassed()) { | |||
919 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLong.Value().IsNull()) { | |||
920 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLong.Value().Value().IsObjectSequence()) { | |||
921 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence().Length(); ++indexName2) { | |||
922 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence()[indexName2]))) { | |||
923 | return false; | |||
924 | } | |||
925 | } | |||
926 | } | |||
927 | } | |||
928 | } | |||
929 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLongWithDefaultValue1.IsNull()) { | |||
930 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLongWithDefaultValue1.Value().IsObjectSequence()) { | |||
931 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence().Length(); ++indexName2) { | |||
932 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence()[indexName2]))) { | |||
933 | return false; | |||
934 | } | |||
935 | } | |||
936 | } | |||
937 | } | |||
938 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLongWithDefaultValue2.IsNull()) { | |||
939 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLongWithDefaultValue2.Value().IsObjectSequence()) { | |||
940 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence().Length(); ++indexName2) { | |||
941 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence()[indexName2]))) { | |||
942 | return false; | |||
943 | } | |||
944 | } | |||
945 | } | |||
946 | } | |||
947 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectOrLong.WasPassed()) { | |||
948 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectOrLong.Value().IsObject()) { | |||
949 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectOrLong.Value().GetAsObject()))) { | |||
950 | return false; | |||
951 | } | |||
952 | } | |||
953 | } | |||
954 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLong.WasPassed()) { | |||
955 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLong.Value().IsObjectSequence()) { | |||
956 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLong.Value().GetAsObjectSequence().Length(); ++indexName2) { | |||
957 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLong.Value().GetAsObjectSequence()[indexName2]))) { | |||
958 | return false; | |||
959 | } | |||
960 | } | |||
961 | } | |||
962 | } | |||
963 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLongWithDefaultValue1.IsObjectSequence()) { | |||
964 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence().Length(); ++indexName2) { | |||
965 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence()[indexName2]))) { | |||
966 | return false; | |||
967 | } | |||
968 | } | |||
969 | } | |||
970 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLongWithDefaultValue2.IsObjectSequence()) { | |||
971 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence().Length(); ++indexName2) { | |||
972 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence()[indexName2]))) { | |||
973 | return false; | |||
974 | } | |||
975 | } | |||
976 | } | |||
977 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mRequiredObject))) { | |||
978 | return false; | |||
979 | } | |||
980 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mSomeAny))) { | |||
981 | return false; | |||
982 | } | |||
983 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mSomeObj.WasPassed()) { | |||
984 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mSomeObj.Value()))) { | |||
985 | return false; | |||
986 | } | |||
987 | } | |||
988 | if (arg0.mSeq2.Value().Value()[indexName0][indexName1].mUint8Array.WasPassed()) { | |||
989 | if (!arg0.mSeq2.Value().Value()[indexName0][indexName1].mUint8Array.Value().WrapIntoNewCompartment(cx)) { | |||
990 | return false; | |||
991 | } | |||
992 | } | |||
993 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq2.Value().Value()[indexName0][indexName1].mParentAny))) { | |||
994 | return false; | |||
995 | } | |||
996 | } | |||
997 | } | |||
998 | } | |||
999 | } | |||
1000 | if (arg0.mSeq3.WasPassed()) { | |||
1001 | for (uint32_t indexName0 = 0; indexName0 < arg0.mSeq3.Value().Length(); ++indexName0) { | |||
1002 | if (!arg0.mSeq3.Value()[indexName0].IsNull()) { | |||
1003 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq3.Value()[indexName0].Value().Length(); ++indexName1) { | |||
1004 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mAnotherAny))) { | |||
1005 | return false; | |||
1006 | } | |||
1007 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mAnotherObj))) { | |||
1008 | return false; | |||
1009 | } | |||
1010 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mArrayBuffer.WasPassed()) { | |||
1011 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mArrayBuffer.Value().WrapIntoNewCompartment(cx)) { | |||
1012 | return false; | |||
1013 | } | |||
1014 | } | |||
1015 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mCustomEventInit.WasPassed()) { | |||
1016 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mCustomEventInit.Value().mDetail))) { | |||
1017 | return false; | |||
1018 | } | |||
1019 | } | |||
1020 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mDictionaryTypedef.WasPassed()) { | |||
1021 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mDictionaryTypedef.Value().mDetail))) { | |||
1022 | return false; | |||
1023 | } | |||
1024 | } | |||
1025 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mEventInitOrLong2.WasPassed()) { | |||
1026 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mEventInitOrLong2.Value().IsCustomEventInit()) { | |||
1027 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mEventInitOrLong2.Value().GetAsCustomEventInit().mDetail))) { | |||
1028 | return false; | |||
1029 | } | |||
1030 | } | |||
1031 | } | |||
1032 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mEventInitOrLongWithDefaultValue2.IsCustomEventInit()) { | |||
1033 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mEventInitOrLongWithDefaultValue2.GetAsCustomEventInit().mDetail))) { | |||
1034 | return false; | |||
1035 | } | |||
1036 | } | |||
1037 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mEventInitOrLongWithDefaultValue4.IsCustomEventInit()) { | |||
1038 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mEventInitOrLongWithDefaultValue4.GetAsCustomEventInit().mDetail))) { | |||
1039 | return false; | |||
1040 | } | |||
1041 | } | |||
1042 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mFloat64Array.IsNull()) { | |||
1043 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mFloat64Array.Value().WrapIntoNewCompartment(cx)) { | |||
1044 | return false; | |||
1045 | } | |||
1046 | } | |||
1047 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableArrayBuffer.WasPassed()) { | |||
1048 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableArrayBuffer.Value().IsNull()) { | |||
1049 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableArrayBuffer.Value().Value().WrapIntoNewCompartment(cx)) { | |||
1050 | return false; | |||
1051 | } | |||
1052 | } | |||
1053 | } | |||
1054 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLong2.WasPassed()) { | |||
1055 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLong2.Value().IsNull()) { | |||
1056 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLong2.Value().Value().IsCustomEventInit()) { | |||
1057 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLong2.Value().Value().GetAsCustomEventInit().mDetail))) { | |||
1058 | return false; | |||
1059 | } | |||
1060 | } | |||
1061 | } | |||
1062 | } | |||
1063 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLongWithDefaultValue2.IsNull()) { | |||
1064 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLongWithDefaultValue2.Value().IsCustomEventInit()) { | |||
1065 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLongWithDefaultValue2.Value().GetAsCustomEventInit().mDetail))) { | |||
1066 | return false; | |||
1067 | } | |||
1068 | } | |||
1069 | } | |||
1070 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLongWithDefaultValue4.IsNull()) { | |||
1071 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLongWithDefaultValue4.Value().IsCustomEventInit()) { | |||
1072 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableEventInitOrLongWithDefaultValue4.Value().GetAsCustomEventInit().mDetail))) { | |||
1073 | return false; | |||
1074 | } | |||
1075 | } | |||
1076 | } | |||
1077 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLong.WasPassed()) { | |||
1078 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLong.Value().IsNull()) { | |||
1079 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLong.Value().Value().IsObjectSequence()) { | |||
1080 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence().Length(); ++indexName2) { | |||
1081 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence()[indexName2]))) { | |||
1082 | return false; | |||
1083 | } | |||
1084 | } | |||
1085 | } | |||
1086 | } | |||
1087 | } | |||
1088 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLongWithDefaultValue1.IsNull()) { | |||
1089 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLongWithDefaultValue1.Value().IsObjectSequence()) { | |||
1090 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence().Length(); ++indexName2) { | |||
1091 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence()[indexName2]))) { | |||
1092 | return false; | |||
1093 | } | |||
1094 | } | |||
1095 | } | |||
1096 | } | |||
1097 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLongWithDefaultValue2.IsNull()) { | |||
1098 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLongWithDefaultValue2.Value().IsObjectSequence()) { | |||
1099 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence().Length(); ++indexName2) { | |||
1100 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence()[indexName2]))) { | |||
1101 | return false; | |||
1102 | } | |||
1103 | } | |||
1104 | } | |||
1105 | } | |||
1106 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectOrLong.WasPassed()) { | |||
1107 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectOrLong.Value().IsObject()) { | |||
1108 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectOrLong.Value().GetAsObject()))) { | |||
1109 | return false; | |||
1110 | } | |||
1111 | } | |||
1112 | } | |||
1113 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLong.WasPassed()) { | |||
1114 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLong.Value().IsObjectSequence()) { | |||
1115 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLong.Value().GetAsObjectSequence().Length(); ++indexName2) { | |||
1116 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLong.Value().GetAsObjectSequence()[indexName2]))) { | |||
1117 | return false; | |||
1118 | } | |||
1119 | } | |||
1120 | } | |||
1121 | } | |||
1122 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLongWithDefaultValue1.IsObjectSequence()) { | |||
1123 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence().Length(); ++indexName2) { | |||
1124 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence()[indexName2]))) { | |||
1125 | return false; | |||
1126 | } | |||
1127 | } | |||
1128 | } | |||
1129 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLongWithDefaultValue2.IsObjectSequence()) { | |||
1130 | for (uint32_t indexName2 = 0; indexName2 < arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence().Length(); ++indexName2) { | |||
1131 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence()[indexName2]))) { | |||
1132 | return false; | |||
1133 | } | |||
1134 | } | |||
1135 | } | |||
1136 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mRequiredObject))) { | |||
1137 | return false; | |||
1138 | } | |||
1139 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mSomeAny))) { | |||
1140 | return false; | |||
1141 | } | |||
1142 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mSomeObj.WasPassed()) { | |||
1143 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mSomeObj.Value()))) { | |||
1144 | return false; | |||
1145 | } | |||
1146 | } | |||
1147 | if (arg0.mSeq3.Value()[indexName0].Value()[indexName1].mUint8Array.WasPassed()) { | |||
1148 | if (!arg0.mSeq3.Value()[indexName0].Value()[indexName1].mUint8Array.Value().WrapIntoNewCompartment(cx)) { | |||
1149 | return false; | |||
1150 | } | |||
1151 | } | |||
1152 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq3.Value()[indexName0].Value()[indexName1].mParentAny))) { | |||
1153 | return false; | |||
1154 | } | |||
1155 | } | |||
1156 | } | |||
1157 | } | |||
1158 | } | |||
1159 | if (arg0.mSeq4.WasPassed()) { | |||
1160 | for (uint32_t indexName0 = 0; indexName0 < arg0.mSeq4.Value().Length(); ++indexName0) { | |||
1161 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq4.Value()[indexName0]))) { | |||
1162 | return false; | |||
1163 | } | |||
1164 | } | |||
1165 | } | |||
1166 | if (arg0.mSeq5.WasPassed()) { | |||
1167 | for (uint32_t indexName0 = 0; indexName0 < arg0.mSeq5.Value().Length(); ++indexName0) { | |||
1168 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq5.Value()[indexName0]))) { | |||
1169 | return false; | |||
1170 | } | |||
1171 | } | |||
1172 | } | |||
1173 | if (arg0.mSeq6.WasPassed()) { | |||
1174 | for (uint32_t indexName0 = 0; indexName0 < arg0.mSeq6.Value().Length(); ++indexName0) { | |||
1175 | if (arg0.mSeq6.Value()[indexName0].mOurSequence3.WasPassed()) { | |||
1176 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq6.Value()[indexName0].mOurSequence3.Value().Length(); ++indexName1) { | |||
1177 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg0.mSeq6.Value()[indexName0].mOurSequence3.Value()[indexName1]))) { | |||
1178 | return false; | |||
1179 | } | |||
1180 | } | |||
1181 | } | |||
1182 | if (arg0.mSeq6.Value()[indexName0].mOurSequence4.WasPassed()) { | |||
1183 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq6.Value()[indexName0].mOurSequence4.Value().Length(); ++indexName1) { | |||
1184 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq6.Value()[indexName0].mOurSequence4.Value()[indexName1]))) { | |||
1185 | return false; | |||
1186 | } | |||
1187 | } | |||
1188 | } | |||
1189 | if (arg0.mSeq6.Value()[indexName0].mOurSequence5.WasPassed()) { | |||
1190 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq6.Value()[indexName0].mOurSequence5.Value().Length(); ++indexName1) { | |||
1191 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq6.Value()[indexName0].mOurSequence5.Value()[indexName1]))) { | |||
1192 | return false; | |||
1193 | } | |||
1194 | } | |||
1195 | } | |||
1196 | if (arg0.mSeq6.Value()[indexName0].mOurSequence6.WasPassed()) { | |||
1197 | if (!arg0.mSeq6.Value()[indexName0].mOurSequence6.Value().IsNull()) { | |||
1198 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq6.Value()[indexName0].mOurSequence6.Value().Value().Length(); ++indexName1) { | |||
1199 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq6.Value()[indexName0].mOurSequence6.Value().Value()[indexName1]))) { | |||
1200 | return false; | |||
1201 | } | |||
1202 | } | |||
1203 | } | |||
1204 | } | |||
1205 | if (arg0.mSeq6.Value()[indexName0].mOurSequence7.WasPassed()) { | |||
1206 | if (!arg0.mSeq6.Value()[indexName0].mOurSequence7.Value().IsNull()) { | |||
1207 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq6.Value()[indexName0].mOurSequence7.Value().Value().Length(); ++indexName1) { | |||
1208 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq6.Value()[indexName0].mOurSequence7.Value().Value()[indexName1]))) { | |||
1209 | return false; | |||
1210 | } | |||
1211 | } | |||
1212 | } | |||
1213 | } | |||
1214 | if (!arg0.mSeq6.Value()[indexName0].mOurSequence8.IsNull()) { | |||
1215 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq6.Value()[indexName0].mOurSequence8.Value().Length(); ++indexName1) { | |||
1216 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq6.Value()[indexName0].mOurSequence8.Value()[indexName1]))) { | |||
1217 | return false; | |||
1218 | } | |||
1219 | } | |||
1220 | } | |||
1221 | if (!arg0.mSeq6.Value()[indexName0].mOurSequence9.IsNull()) { | |||
1222 | for (uint32_t indexName1 = 0; indexName1 < arg0.mSeq6.Value()[indexName0].mOurSequence9.Value().Length(); ++indexName1) { | |||
1223 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg0.mSeq6.Value()[indexName0].mOurSequence9.Value()[indexName1]))) { | |||
1224 | return false; | |||
1225 | } | |||
1226 | } | |||
1227 | } | |||
1228 | } | |||
1229 | } | |||
1230 | if (!JS_WrapValue(cx, &arg1)) { | |||
1231 | return false; | |||
1232 | } | |||
1233 | if (!JS_WrapObject(cx, &arg2)) { | |||
1234 | return false; | |||
1235 | } | |||
1236 | if (!JS_WrapObject(cx, &arg3)) { | |||
1237 | return false; | |||
1238 | } | |||
1239 | for (uint32_t indexName0 = 0; indexName0 < arg4.Length(); ++indexName0) { | |||
1240 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mAnotherAny))) { | |||
1241 | return false; | |||
1242 | } | |||
1243 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mAnotherObj))) { | |||
1244 | return false; | |||
1245 | } | |||
1246 | if (arg4[indexName0].mArrayBuffer.WasPassed()) { | |||
1247 | if (!arg4[indexName0].mArrayBuffer.Value().WrapIntoNewCompartment(cx)) { | |||
1248 | return false; | |||
1249 | } | |||
1250 | } | |||
1251 | if (arg4[indexName0].mCustomEventInit.WasPassed()) { | |||
1252 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mCustomEventInit.Value().mDetail))) { | |||
1253 | return false; | |||
1254 | } | |||
1255 | } | |||
1256 | if (arg4[indexName0].mDictionaryTypedef.WasPassed()) { | |||
1257 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mDictionaryTypedef.Value().mDetail))) { | |||
1258 | return false; | |||
1259 | } | |||
1260 | } | |||
1261 | if (arg4[indexName0].mEventInitOrLong2.WasPassed()) { | |||
1262 | if (arg4[indexName0].mEventInitOrLong2.Value().IsCustomEventInit()) { | |||
1263 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mEventInitOrLong2.Value().GetAsCustomEventInit().mDetail))) { | |||
1264 | return false; | |||
1265 | } | |||
1266 | } | |||
1267 | } | |||
1268 | if (arg4[indexName0].mEventInitOrLongWithDefaultValue2.IsCustomEventInit()) { | |||
1269 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mEventInitOrLongWithDefaultValue2.GetAsCustomEventInit().mDetail))) { | |||
1270 | return false; | |||
1271 | } | |||
1272 | } | |||
1273 | if (arg4[indexName0].mEventInitOrLongWithDefaultValue4.IsCustomEventInit()) { | |||
1274 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mEventInitOrLongWithDefaultValue4.GetAsCustomEventInit().mDetail))) { | |||
1275 | return false; | |||
1276 | } | |||
1277 | } | |||
1278 | if (!arg4[indexName0].mFloat64Array.IsNull()) { | |||
1279 | if (!arg4[indexName0].mFloat64Array.Value().WrapIntoNewCompartment(cx)) { | |||
1280 | return false; | |||
1281 | } | |||
1282 | } | |||
1283 | if (arg4[indexName0].mNullableArrayBuffer.WasPassed()) { | |||
1284 | if (!arg4[indexName0].mNullableArrayBuffer.Value().IsNull()) { | |||
1285 | if (!arg4[indexName0].mNullableArrayBuffer.Value().Value().WrapIntoNewCompartment(cx)) { | |||
1286 | return false; | |||
1287 | } | |||
1288 | } | |||
1289 | } | |||
1290 | if (arg4[indexName0].mNullableEventInitOrLong2.WasPassed()) { | |||
1291 | if (!arg4[indexName0].mNullableEventInitOrLong2.Value().IsNull()) { | |||
1292 | if (arg4[indexName0].mNullableEventInitOrLong2.Value().Value().IsCustomEventInit()) { | |||
1293 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mNullableEventInitOrLong2.Value().Value().GetAsCustomEventInit().mDetail))) { | |||
1294 | return false; | |||
1295 | } | |||
1296 | } | |||
1297 | } | |||
1298 | } | |||
1299 | if (!arg4[indexName0].mNullableEventInitOrLongWithDefaultValue2.IsNull()) { | |||
1300 | if (arg4[indexName0].mNullableEventInitOrLongWithDefaultValue2.Value().IsCustomEventInit()) { | |||
1301 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mNullableEventInitOrLongWithDefaultValue2.Value().GetAsCustomEventInit().mDetail))) { | |||
1302 | return false; | |||
1303 | } | |||
1304 | } | |||
1305 | } | |||
1306 | if (!arg4[indexName0].mNullableEventInitOrLongWithDefaultValue4.IsNull()) { | |||
1307 | if (arg4[indexName0].mNullableEventInitOrLongWithDefaultValue4.Value().IsCustomEventInit()) { | |||
1308 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mNullableEventInitOrLongWithDefaultValue4.Value().GetAsCustomEventInit().mDetail))) { | |||
1309 | return false; | |||
1310 | } | |||
1311 | } | |||
1312 | } | |||
1313 | if (arg4[indexName0].mNullableObjectSequenceOrLong.WasPassed()) { | |||
1314 | if (!arg4[indexName0].mNullableObjectSequenceOrLong.Value().IsNull()) { | |||
1315 | if (arg4[indexName0].mNullableObjectSequenceOrLong.Value().Value().IsObjectSequence()) { | |||
1316 | for (uint32_t indexName1 = 0; indexName1 < arg4[indexName0].mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence().Length(); ++indexName1) { | |||
1317 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mNullableObjectSequenceOrLong.Value().Value().GetAsObjectSequence()[indexName1]))) { | |||
1318 | return false; | |||
1319 | } | |||
1320 | } | |||
1321 | } | |||
1322 | } | |||
1323 | } | |||
1324 | if (!arg4[indexName0].mNullableObjectSequenceOrLongWithDefaultValue1.IsNull()) { | |||
1325 | if (arg4[indexName0].mNullableObjectSequenceOrLongWithDefaultValue1.Value().IsObjectSequence()) { | |||
1326 | for (uint32_t indexName1 = 0; indexName1 < arg4[indexName0].mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence().Length(); ++indexName1) { | |||
1327 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mNullableObjectSequenceOrLongWithDefaultValue1.Value().GetAsObjectSequence()[indexName1]))) { | |||
1328 | return false; | |||
1329 | } | |||
1330 | } | |||
1331 | } | |||
1332 | } | |||
1333 | if (!arg4[indexName0].mNullableObjectSequenceOrLongWithDefaultValue2.IsNull()) { | |||
1334 | if (arg4[indexName0].mNullableObjectSequenceOrLongWithDefaultValue2.Value().IsObjectSequence()) { | |||
1335 | for (uint32_t indexName1 = 0; indexName1 < arg4[indexName0].mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence().Length(); ++indexName1) { | |||
1336 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mNullableObjectSequenceOrLongWithDefaultValue2.Value().GetAsObjectSequence()[indexName1]))) { | |||
1337 | return false; | |||
1338 | } | |||
1339 | } | |||
1340 | } | |||
1341 | } | |||
1342 | if (arg4[indexName0].mObjectOrLong.WasPassed()) { | |||
1343 | if (arg4[indexName0].mObjectOrLong.Value().IsObject()) { | |||
1344 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mObjectOrLong.Value().GetAsObject()))) { | |||
1345 | return false; | |||
1346 | } | |||
1347 | } | |||
1348 | } | |||
1349 | if (arg4[indexName0].mObjectSequenceOrLong.WasPassed()) { | |||
1350 | if (arg4[indexName0].mObjectSequenceOrLong.Value().IsObjectSequence()) { | |||
1351 | for (uint32_t indexName1 = 0; indexName1 < arg4[indexName0].mObjectSequenceOrLong.Value().GetAsObjectSequence().Length(); ++indexName1) { | |||
1352 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mObjectSequenceOrLong.Value().GetAsObjectSequence()[indexName1]))) { | |||
1353 | return false; | |||
1354 | } | |||
1355 | } | |||
1356 | } | |||
1357 | } | |||
1358 | if (arg4[indexName0].mObjectSequenceOrLongWithDefaultValue1.IsObjectSequence()) { | |||
1359 | for (uint32_t indexName1 = 0; indexName1 < arg4[indexName0].mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence().Length(); ++indexName1) { | |||
1360 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mObjectSequenceOrLongWithDefaultValue1.GetAsObjectSequence()[indexName1]))) { | |||
1361 | return false; | |||
1362 | } | |||
1363 | } | |||
1364 | } | |||
1365 | if (arg4[indexName0].mObjectSequenceOrLongWithDefaultValue2.IsObjectSequence()) { | |||
1366 | for (uint32_t indexName1 = 0; indexName1 < arg4[indexName0].mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence().Length(); ++indexName1) { | |||
1367 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mObjectSequenceOrLongWithDefaultValue2.GetAsObjectSequence()[indexName1]))) { | |||
1368 | return false; | |||
1369 | } | |||
1370 | } | |||
1371 | } | |||
1372 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mRequiredObject))) { | |||
1373 | return false; | |||
1374 | } | |||
1375 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mSomeAny))) { | |||
1376 | return false; | |||
1377 | } | |||
1378 | if (arg4[indexName0].mSomeObj.WasPassed()) { | |||
1379 | if (!JS_WrapObject(cx, JS::MutableHandle<JSObject*>::fromMarkedLocation(&arg4[indexName0].mSomeObj.Value()))) { | |||
1380 | return false; | |||
1381 | } | |||
1382 | } | |||
1383 | if (arg4[indexName0].mUint8Array.WasPassed()) { | |||
1384 | if (!arg4[indexName0].mUint8Array.Value().WrapIntoNewCompartment(cx)) { | |||
1385 | return false; | |||
1386 | } | |||
1387 | } | |||
1388 | if (!JS_WrapValue(cx, JS::MutableHandle<JS::Value>::fromMarkedLocation(&arg4[indexName0].mParentAny))) { | |||
1389 | return false; | |||
1390 | } | |||
1391 | } | |||
1392 | if (!JS_WrapValue(cx, &arg5)) { | |||
1393 | return false; | |||
1394 | } | |||
1395 | if (arg6.WasPassed()) { | |||
1396 | if (!JS_WrapObject(cx, &arg6.Value())) { | |||
1397 | return false; | |||
1398 | } | |||
1399 | } | |||
1400 | if (arg7.WasPassed()) { | |||
1401 | if (!JS_WrapObject(cx, &arg7.Value())) { | |||
1402 | return false; | |||
1403 | } | |||
1404 | } | |||
1405 | } | |||
1406 | FastErrorResult rv; | |||
1407 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Example2(global, Constify(arg0), arg1, arg2, arg3, Constify(arg4), arg5, Constify(arg6), Constify(arg7), rv))); | |||
1408 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "Example2 constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "Example2 constructor" )), 0))) { | |||
1409 | return false; | |||
1410 | } | |||
1411 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1411); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1411; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1412 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
1413 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
1414 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
1415 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1415); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 1415; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
1416 | return false; | |||
1417 | } | |||
1418 | return true; | |||
1419 | break; | |||
1420 | } | |||
1421 | default: { | |||
1422 | // Using nsPrintfCString here would require including that | |||
1423 | // header. Let's not worry about it. | |||
1424 | nsAutoCString argCountStr; | |||
1425 | argCountStr.AppendPrintf("%u", args.length()); | |||
1426 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
1427 | } | |||
1428 | } | |||
1429 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 1429); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 1429; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
1430 | return false; | |||
1431 | } | |||
1432 | ||||
1433 | MOZ_CAN_RUN_SCRIPT static bool | |||
1434 | get_readonlyByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
1435 | { | |||
1436 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1439( cx, "TestExampleInterface" , "readonlyByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1437 | "TestExampleInterface", "readonlyByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1439( cx, "TestExampleInterface" , "readonlyByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1438 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject1439( cx, "TestExampleInterface" , "readonlyByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1439 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1439( cx, "TestExampleInterface" , "readonlyByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1440 | ||||
1441 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1442 | int8_t result(MOZ_KnownLive(self)(self)->ReadonlyByte()); | |||
1443 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1443); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1443; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1444 | args.rval().setInt32(int32_t(result)); | |||
1445 | return true; | |||
1446 | } | |||
1447 | ||||
1448 | static const JSJitInfo readonlyByte_getterinfo = { | |||
1449 | { get_readonlyByte }, | |||
1450 | { prototypes::id::TestExampleInterface }, | |||
1451 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1452 | JSJitInfo::Getter, | |||
1453 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1454 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
1455 | true, /* isInfallible. False in setters. */ | |||
1456 | false, /* isMovable. Not relevant for setters. */ | |||
1457 | false, /* isEliminatable. Not relevant for setters. */ | |||
1458 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1459 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1460 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1461 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1462 | }; | |||
1463 | ||||
1464 | MOZ_CAN_RUN_SCRIPT static bool | |||
1465 | get_writableByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
1466 | { | |||
1467 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1470( cx, "TestExampleInterface" , "writableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1468 | "TestExampleInterface", "writableByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1470( cx, "TestExampleInterface" , "writableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1469 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject1470( cx, "TestExampleInterface" , "writableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1470 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1470( cx, "TestExampleInterface" , "writableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1471 | ||||
1472 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1473 | int8_t result(MOZ_KnownLive(self)(self)->WritableByte()); | |||
1474 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1474); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1474; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1475 | args.rval().setInt32(int32_t(result)); | |||
1476 | return true; | |||
1477 | } | |||
1478 | ||||
1479 | MOZ_CAN_RUN_SCRIPT static bool | |||
1480 | set_writableByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
1481 | { | |||
1482 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1485( cx, "TestExampleInterface" , "writableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1483 | "TestExampleInterface", "writableByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1485( cx, "TestExampleInterface" , "writableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1484 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject1485( cx, "TestExampleInterface" , "writableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1485 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1485( cx, "TestExampleInterface" , "writableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1486 | ||||
1487 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1488 | int8_t arg0; | |||
1489 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
1490 | return false; | |||
1491 | } | |||
1492 | // NOTE: This assert does NOT call the function. | |||
1493 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableByte(arg0))>, "Should be returning void here"); | |||
1494 | MOZ_KnownLive(self)(self)->SetWritableByte(arg0); | |||
1495 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1495); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1495; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1496 | ||||
1497 | return true; | |||
1498 | } | |||
1499 | ||||
1500 | static const JSJitInfo writableByte_getterinfo = { | |||
1501 | { get_writableByte }, | |||
1502 | { prototypes::id::TestExampleInterface }, | |||
1503 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1504 | JSJitInfo::Getter, | |||
1505 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1506 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
1507 | true, /* isInfallible. False in setters. */ | |||
1508 | false, /* isMovable. Not relevant for setters. */ | |||
1509 | false, /* isEliminatable. Not relevant for setters. */ | |||
1510 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1511 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1512 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1513 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1514 | }; | |||
1515 | static const JSJitInfo writableByte_setterinfo = { | |||
1516 | { (JSJitGetterOp)set_writableByte }, | |||
1517 | { prototypes::id::TestExampleInterface }, | |||
1518 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1519 | JSJitInfo::Setter, | |||
1520 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1521 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1522 | false, /* isInfallible. False in setters. */ | |||
1523 | false, /* isMovable. Not relevant for setters. */ | |||
1524 | false, /* isEliminatable. Not relevant for setters. */ | |||
1525 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1526 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1527 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1528 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1529 | }; | |||
1530 | ||||
1531 | MOZ_CAN_RUN_SCRIPT static bool | |||
1532 | passByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1533 | { | |||
1534 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1537( cx, "TestExampleInterface" , "passByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
1535 | "TestExampleInterface", "passByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1537( cx, "TestExampleInterface" , "passByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
1536 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1537( cx, "TestExampleInterface" , "passByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
1537 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1537( cx, "TestExampleInterface" , "passByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
1538 | ||||
1539 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1540 | if (!args.requireAtLeast(cx, "TestExampleInterface.passByte", 1)) { | |||
1541 | return false; | |||
1542 | } | |||
1543 | int8_t arg0; | |||
1544 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
1545 | return false; | |||
1546 | } | |||
1547 | // NOTE: This assert does NOT call the function. | |||
1548 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassByte(arg0))>, "Should be returning void here"); | |||
1549 | MOZ_KnownLive(self)(self)->PassByte(arg0); | |||
1550 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1550); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1550; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1551 | args.rval().setUndefined(); | |||
1552 | return true; | |||
1553 | } | |||
1554 | ||||
1555 | static const JSJitInfo passByte_methodinfo = { | |||
1556 | { (JSJitGetterOp)passByte }, | |||
1557 | { prototypes::id::TestExampleInterface }, | |||
1558 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1559 | JSJitInfo::Method, | |||
1560 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1561 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1562 | false, /* isInfallible. False in setters. */ | |||
1563 | false, /* isMovable. Not relevant for setters. */ | |||
1564 | false, /* isEliminatable. Not relevant for setters. */ | |||
1565 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1566 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1567 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1568 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1569 | }; | |||
1570 | ||||
1571 | MOZ_CAN_RUN_SCRIPT static bool | |||
1572 | receiveByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1573 | { | |||
1574 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1577( cx, "TestExampleInterface" , "receiveByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1575 | "TestExampleInterface", "receiveByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1577( cx, "TestExampleInterface" , "receiveByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1576 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1577( cx, "TestExampleInterface" , "receiveByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1577 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1577( cx, "TestExampleInterface" , "receiveByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1578 | ||||
1579 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1580 | int8_t result(MOZ_KnownLive(self)(self)->ReceiveByte()); | |||
1581 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1581); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1581; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1582 | args.rval().setInt32(int32_t(result)); | |||
1583 | return true; | |||
1584 | } | |||
1585 | ||||
1586 | static const JSJitInfo receiveByte_methodinfo = { | |||
1587 | { (JSJitGetterOp)receiveByte }, | |||
1588 | { prototypes::id::TestExampleInterface }, | |||
1589 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1590 | JSJitInfo::Method, | |||
1591 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1592 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
1593 | true, /* isInfallible. False in setters. */ | |||
1594 | false, /* isMovable. Not relevant for setters. */ | |||
1595 | false, /* isEliminatable. Not relevant for setters. */ | |||
1596 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1597 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1598 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1599 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1600 | }; | |||
1601 | ||||
1602 | MOZ_CAN_RUN_SCRIPT static bool | |||
1603 | passOptionalByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1604 | { | |||
1605 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1608( cx, "TestExampleInterface" , "passOptionalByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1606 | "TestExampleInterface", "passOptionalByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1608( cx, "TestExampleInterface" , "passOptionalByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1607 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1608( cx, "TestExampleInterface" , "passOptionalByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1608 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1608( cx, "TestExampleInterface" , "passOptionalByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1609 | ||||
1610 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1611 | Optional<int8_t> arg0; | |||
1612 | if (args.hasDefined(0)) { | |||
1613 | arg0.Construct(); | |||
1614 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
1615 | return false; | |||
1616 | } | |||
1617 | } | |||
1618 | // NOTE: This assert does NOT call the function. | |||
1619 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalByte(Constify(arg0)))>, "Should be returning void here"); | |||
1620 | MOZ_KnownLive(self)(self)->PassOptionalByte(Constify(arg0)); | |||
1621 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1621); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1621; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1622 | args.rval().setUndefined(); | |||
1623 | return true; | |||
1624 | } | |||
1625 | ||||
1626 | static const JSJitInfo passOptionalByte_methodinfo = { | |||
1627 | { (JSJitGetterOp)passOptionalByte }, | |||
1628 | { prototypes::id::TestExampleInterface }, | |||
1629 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1630 | JSJitInfo::Method, | |||
1631 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1632 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1633 | false, /* isInfallible. False in setters. */ | |||
1634 | false, /* isMovable. Not relevant for setters. */ | |||
1635 | false, /* isEliminatable. Not relevant for setters. */ | |||
1636 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1637 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1638 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1639 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1640 | }; | |||
1641 | ||||
1642 | MOZ_CAN_RUN_SCRIPT static bool | |||
1643 | passOptionalByteBeforeRequired(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1644 | { | |||
1645 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1648( cx, "TestExampleInterface" , "passOptionalByteBeforeRequired", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1646 | "TestExampleInterface", "passOptionalByteBeforeRequired", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1648( cx, "TestExampleInterface" , "passOptionalByteBeforeRequired", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1647 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1648( cx, "TestExampleInterface" , "passOptionalByteBeforeRequired", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1648 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1648( cx, "TestExampleInterface" , "passOptionalByteBeforeRequired", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
1649 | ||||
1650 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1651 | if (!args.requireAtLeast(cx, "TestExampleInterface.passOptionalByteBeforeRequired", 2)) { | |||
1652 | return false; | |||
1653 | } | |||
1654 | Optional<int8_t> arg0; | |||
1655 | if (args.hasDefined(0)) { | |||
1656 | arg0.Construct(); | |||
1657 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
1658 | return false; | |||
1659 | } | |||
1660 | } | |||
1661 | int8_t arg1; | |||
1662 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[1], "Argument 2", &arg1)) { | |||
1663 | return false; | |||
1664 | } | |||
1665 | // NOTE: This assert does NOT call the function. | |||
1666 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalByteBeforeRequired(Constify(arg0), arg1))>, "Should be returning void here"); | |||
1667 | MOZ_KnownLive(self)(self)->PassOptionalByteBeforeRequired(Constify(arg0), arg1); | |||
1668 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1668); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1668; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1669 | args.rval().setUndefined(); | |||
1670 | return true; | |||
1671 | } | |||
1672 | ||||
1673 | static const JSJitInfo passOptionalByteBeforeRequired_methodinfo = { | |||
1674 | { (JSJitGetterOp)passOptionalByteBeforeRequired }, | |||
1675 | { prototypes::id::TestExampleInterface }, | |||
1676 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1677 | JSJitInfo::Method, | |||
1678 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1679 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1680 | false, /* isInfallible. False in setters. */ | |||
1681 | false, /* isMovable. Not relevant for setters. */ | |||
1682 | false, /* isEliminatable. Not relevant for setters. */ | |||
1683 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1684 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1685 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1686 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1687 | }; | |||
1688 | ||||
1689 | MOZ_CAN_RUN_SCRIPT static bool | |||
1690 | passOptionalByteWithDefault(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1691 | { | |||
1692 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1695( cx, "TestExampleInterface" , "passOptionalByteWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1693 | "TestExampleInterface", "passOptionalByteWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1695( cx, "TestExampleInterface" , "passOptionalByteWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1694 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1695( cx, "TestExampleInterface" , "passOptionalByteWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1695 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1695( cx, "TestExampleInterface" , "passOptionalByteWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
1696 | ||||
1697 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1698 | int8_t arg0; | |||
1699 | if (args.hasDefined(0)) { | |||
1700 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
1701 | return false; | |||
1702 | } | |||
1703 | } else { | |||
1704 | arg0 = 0; | |||
1705 | } | |||
1706 | // NOTE: This assert does NOT call the function. | |||
1707 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalByteWithDefault(arg0))>, "Should be returning void here"); | |||
1708 | MOZ_KnownLive(self)(self)->PassOptionalByteWithDefault(arg0); | |||
1709 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1709); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1709; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1710 | args.rval().setUndefined(); | |||
1711 | return true; | |||
1712 | } | |||
1713 | ||||
1714 | static const JSJitInfo passOptionalByteWithDefault_methodinfo = { | |||
1715 | { (JSJitGetterOp)passOptionalByteWithDefault }, | |||
1716 | { prototypes::id::TestExampleInterface }, | |||
1717 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1718 | JSJitInfo::Method, | |||
1719 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1720 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1721 | false, /* isInfallible. False in setters. */ | |||
1722 | false, /* isMovable. Not relevant for setters. */ | |||
1723 | false, /* isEliminatable. Not relevant for setters. */ | |||
1724 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1725 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1726 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1727 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1728 | }; | |||
1729 | ||||
1730 | MOZ_CAN_RUN_SCRIPT static bool | |||
1731 | passOptionalByteWithDefaultBeforeRequired(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1732 | { | |||
1733 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1736( cx, "TestExampleInterface" , "passOptionalByteWithDefaultBeforeRequired", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1734 | "TestExampleInterface", "passOptionalByteWithDefaultBeforeRequired", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1736( cx, "TestExampleInterface" , "passOptionalByteWithDefaultBeforeRequired", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1735 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1736( cx, "TestExampleInterface" , "passOptionalByteWithDefaultBeforeRequired", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1736 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1736( cx, "TestExampleInterface" , "passOptionalByteWithDefaultBeforeRequired", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
1737 | ||||
1738 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1739 | if (!args.requireAtLeast(cx, "TestExampleInterface.passOptionalByteWithDefaultBeforeRequired", 2)) { | |||
1740 | return false; | |||
1741 | } | |||
1742 | int8_t arg0; | |||
1743 | if (args.hasDefined(0)) { | |||
1744 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
1745 | return false; | |||
1746 | } | |||
1747 | } else { | |||
1748 | arg0 = 0; | |||
1749 | } | |||
1750 | int8_t arg1; | |||
1751 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[1], "Argument 2", &arg1)) { | |||
1752 | return false; | |||
1753 | } | |||
1754 | // NOTE: This assert does NOT call the function. | |||
1755 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalByteWithDefaultBeforeRequired(arg0, arg1))>, "Should be returning void here"); | |||
1756 | MOZ_KnownLive(self)(self)->PassOptionalByteWithDefaultBeforeRequired(arg0, arg1); | |||
1757 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1757); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1757; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1758 | args.rval().setUndefined(); | |||
1759 | return true; | |||
1760 | } | |||
1761 | ||||
1762 | static const JSJitInfo passOptionalByteWithDefaultBeforeRequired_methodinfo = { | |||
1763 | { (JSJitGetterOp)passOptionalByteWithDefaultBeforeRequired }, | |||
1764 | { prototypes::id::TestExampleInterface }, | |||
1765 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1766 | JSJitInfo::Method, | |||
1767 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1768 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1769 | false, /* isInfallible. False in setters. */ | |||
1770 | false, /* isMovable. Not relevant for setters. */ | |||
1771 | false, /* isEliminatable. Not relevant for setters. */ | |||
1772 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1773 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1774 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1775 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1776 | }; | |||
1777 | ||||
1778 | MOZ_CAN_RUN_SCRIPT static bool | |||
1779 | passNullableByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1780 | { | |||
1781 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1784( cx, "TestExampleInterface" , "passNullableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1782 | "TestExampleInterface", "passNullableByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1784( cx, "TestExampleInterface" , "passNullableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1783 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1784( cx, "TestExampleInterface" , "passNullableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1784 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1784( cx, "TestExampleInterface" , "passNullableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1785 | ||||
1786 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1787 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableByte", 1)) { | |||
1788 | return false; | |||
1789 | } | |||
1790 | Nullable<int8_t> arg0; | |||
1791 | if (args[0].isNullOrUndefined()) { | |||
1792 | arg0.SetNull(); | |||
1793 | } else if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
1794 | return false; | |||
1795 | } | |||
1796 | // NOTE: This assert does NOT call the function. | |||
1797 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableByte(Constify(arg0)))>, "Should be returning void here"); | |||
1798 | MOZ_KnownLive(self)(self)->PassNullableByte(Constify(arg0)); | |||
1799 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1799); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1799; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1800 | args.rval().setUndefined(); | |||
1801 | return true; | |||
1802 | } | |||
1803 | ||||
1804 | static const JSJitInfo passNullableByte_methodinfo = { | |||
1805 | { (JSJitGetterOp)passNullableByte }, | |||
1806 | { prototypes::id::TestExampleInterface }, | |||
1807 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1808 | JSJitInfo::Method, | |||
1809 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1810 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1811 | false, /* isInfallible. False in setters. */ | |||
1812 | false, /* isMovable. Not relevant for setters. */ | |||
1813 | false, /* isEliminatable. Not relevant for setters. */ | |||
1814 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1815 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1816 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1817 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1818 | }; | |||
1819 | ||||
1820 | MOZ_CAN_RUN_SCRIPT static bool | |||
1821 | passOptionalNullableByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1822 | { | |||
1823 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1826( cx, "TestExampleInterface" , "passOptionalNullableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1824 | "TestExampleInterface", "passOptionalNullableByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1826( cx, "TestExampleInterface" , "passOptionalNullableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1825 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1826( cx, "TestExampleInterface" , "passOptionalNullableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
1826 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1826( cx, "TestExampleInterface" , "passOptionalNullableByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
1827 | ||||
1828 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1829 | Optional<Nullable<int8_t>> arg0; | |||
1830 | if (args.hasDefined(0)) { | |||
1831 | arg0.Construct(); | |||
1832 | if (args[0].isNullOrUndefined()) { | |||
1833 | arg0.Value().SetNull(); | |||
1834 | } else if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value().SetValue())) { | |||
1835 | return false; | |||
1836 | } | |||
1837 | } | |||
1838 | // NOTE: This assert does NOT call the function. | |||
1839 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableByte(Constify(arg0)))>, "Should be returning void here"); | |||
1840 | MOZ_KnownLive(self)(self)->PassOptionalNullableByte(Constify(arg0)); | |||
1841 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1841); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1841; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1842 | args.rval().setUndefined(); | |||
1843 | return true; | |||
1844 | } | |||
1845 | ||||
1846 | static const JSJitInfo passOptionalNullableByte_methodinfo = { | |||
1847 | { (JSJitGetterOp)passOptionalNullableByte }, | |||
1848 | { prototypes::id::TestExampleInterface }, | |||
1849 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1850 | JSJitInfo::Method, | |||
1851 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1852 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1853 | false, /* isInfallible. False in setters. */ | |||
1854 | false, /* isMovable. Not relevant for setters. */ | |||
1855 | false, /* isEliminatable. Not relevant for setters. */ | |||
1856 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1857 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1858 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1859 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1860 | }; | |||
1861 | ||||
1862 | MOZ_CAN_RUN_SCRIPT static bool | |||
1863 | passVariadicByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
1864 | { | |||
1865 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1868( cx, "TestExampleInterface" , "passVariadicByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1866 | "TestExampleInterface", "passVariadicByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1868( cx, "TestExampleInterface" , "passVariadicByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1867 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject1868( cx, "TestExampleInterface" , "passVariadicByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1868 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1868( cx, "TestExampleInterface" , "passVariadicByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1869 | ||||
1870 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1871 | AutoSequence<int8_t> arg0; | |||
1872 | if (args.length() > 0) { | |||
1873 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
1874 | JS_ReportOutOfMemory(cx); | |||
1875 | return false; | |||
1876 | } | |||
1877 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
1878 | // OK to do infallible append here, since we ensured capacity already. | |||
1879 | int8_t& slot = *arg0.AppendElement(); | |||
1880 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[variadicArg], "Argument 1", &slot)) { | |||
1881 | return false; | |||
1882 | } | |||
1883 | } | |||
1884 | } | |||
1885 | // NOTE: This assert does NOT call the function. | |||
1886 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicByte(Constify(arg0)))>, "Should be returning void here"); | |||
1887 | MOZ_KnownLive(self)(self)->PassVariadicByte(Constify(arg0)); | |||
1888 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1888); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1888; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1889 | args.rval().setUndefined(); | |||
1890 | return true; | |||
1891 | } | |||
1892 | ||||
1893 | static const JSJitInfo passVariadicByte_methodinfo = { | |||
1894 | { (JSJitGetterOp)passVariadicByte }, | |||
1895 | { prototypes::id::TestExampleInterface }, | |||
1896 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1897 | JSJitInfo::Method, | |||
1898 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
1899 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
1900 | false, /* isInfallible. False in setters. */ | |||
1901 | false, /* isMovable. Not relevant for setters. */ | |||
1902 | false, /* isEliminatable. Not relevant for setters. */ | |||
1903 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1904 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1905 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1906 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1907 | }; | |||
1908 | ||||
1909 | MOZ_CAN_RUN_SCRIPT static bool | |||
1910 | get_cachedByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
1911 | { | |||
1912 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1915( cx, "TestExampleInterface" , "cachedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1913 | "TestExampleInterface", "cachedByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1915( cx, "TestExampleInterface" , "cachedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1914 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject1915( cx, "TestExampleInterface" , "cachedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1915 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1915( cx, "TestExampleInterface" , "cachedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1916 | ||||
1917 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1918 | // Have to either root across the getter call or reget after. | |||
1919 | bool isXray; | |||
1920 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
1921 | if (!slotStorage) { | |||
1922 | return false; | |||
1923 | } | |||
1924 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 0) : (DOM_INSTANCE_RESERVED_SLOTS1 + 0); | |||
1925 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 1925); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 1925; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1926 | { | |||
1927 | // Scope for cachedVal | |||
1928 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
1929 | if (!cachedVal.isUndefined()) { | |||
1930 | args.rval().set(cachedVal); | |||
1931 | // The cached value is in the compartment of slotStorage, | |||
1932 | // so wrap into the caller compartment as needed. | |||
1933 | return MaybeWrapValue(cx, args.rval()); | |||
1934 | } | |||
1935 | } | |||
1936 | ||||
1937 | int8_t result(MOZ_KnownLive(self)(self)->CachedByte()); | |||
1938 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 1938); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 1938; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
1939 | { | |||
1940 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
1941 | JSAutoRealm ar(cx, conversionScope); | |||
1942 | do { // block we break out of when done wrapping | |||
1943 | args.rval().setInt32(int32_t(result)); | |||
1944 | break; | |||
1945 | } while (false); | |||
1946 | } | |||
1947 | { // And now store things in the realm of our slotStorage. | |||
1948 | JSAutoRealm ar(cx, slotStorage); | |||
1949 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
1950 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
1951 | if (!MaybeWrapValue(cx, &storedVal)) { | |||
1952 | return false; | |||
1953 | } | |||
1954 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
1955 | if (!isXray) { | |||
1956 | // In the Xray case we don't need to do this, because getting the | |||
1957 | // expando object already preserved our wrapper. | |||
1958 | PreserveWrapper(self); | |||
1959 | } | |||
1960 | } | |||
1961 | // And now make sure args.rval() is in the caller realm. | |||
1962 | return MaybeWrapValue(cx, args.rval()); | |||
1963 | } | |||
1964 | ||||
1965 | static const JSJitInfo cachedByte_getterinfo = { | |||
1966 | { get_cachedByte }, | |||
1967 | { prototypes::id::TestExampleInterface }, | |||
1968 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
1969 | JSJitInfo::Getter, | |||
1970 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
1971 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
1972 | true, /* isInfallible. False in setters. */ | |||
1973 | true, /* isMovable. Not relevant for setters. */ | |||
1974 | true, /* isEliminatable. Not relevant for setters. */ | |||
1975 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
1976 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
1977 | false, /* isTypedMethod. Only relevant for methods. */ | |||
1978 | (DOM_INSTANCE_RESERVED_SLOTS1 + 0) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
1979 | }; | |||
1980 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 0) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
1981 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 0) < 22, "There is no slot for us"); | |||
1982 | ||||
1983 | static bool | |||
1984 | get_cachedConstantByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
1985 | { | |||
1986 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject1989( cx, "TestExampleInterface" , "cachedConstantByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1987 | "TestExampleInterface", "cachedConstantByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject1989( cx, "TestExampleInterface" , "cachedConstantByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1988 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject1989( cx, "TestExampleInterface" , "cachedConstantByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
1989 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject1989( cx, "TestExampleInterface" , "cachedConstantByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
1990 | ||||
1991 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
1992 | // Have to either root across the getter call or reget after. | |||
1993 | bool isXray; | |||
1994 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
1995 | if (!slotStorage) { | |||
1996 | return false; | |||
1997 | } | |||
1998 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 1) : (DOM_INSTANCE_RESERVED_SLOTS1 + 1); | |||
1999 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 1999); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 1999; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
2000 | { | |||
2001 | // Scope for cachedVal | |||
2002 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
2003 | if (!cachedVal.isUndefined()) { | |||
2004 | args.rval().set(cachedVal); | |||
2005 | // The cached value is in the compartment of slotStorage, | |||
2006 | // so wrap into the caller compartment as needed. | |||
2007 | return MaybeWrapValue(cx, args.rval()); | |||
2008 | } | |||
2009 | } | |||
2010 | ||||
2011 | int8_t result(MOZ_KnownLive(self)(self)->CachedConstantByte()); | |||
2012 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2012); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2012; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2013 | { | |||
2014 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
2015 | JSAutoRealm ar(cx, conversionScope); | |||
2016 | do { // block we break out of when done wrapping | |||
2017 | args.rval().setInt32(int32_t(result)); | |||
2018 | break; | |||
2019 | } while (false); | |||
2020 | } | |||
2021 | { // And now store things in the realm of our slotStorage. | |||
2022 | JSAutoRealm ar(cx, slotStorage); | |||
2023 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
2024 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
2025 | if (!MaybeWrapValue(cx, &storedVal)) { | |||
2026 | return false; | |||
2027 | } | |||
2028 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
2029 | } | |||
2030 | // And now make sure args.rval() is in the caller realm. | |||
2031 | return MaybeWrapValue(cx, args.rval()); | |||
2032 | } | |||
2033 | ||||
2034 | static const JSJitInfo cachedConstantByte_getterinfo = { | |||
2035 | { get_cachedConstantByte }, | |||
2036 | { prototypes::id::TestExampleInterface }, | |||
2037 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2038 | JSJitInfo::Getter, | |||
2039 | JSJitInfo::AliasNone, /* aliasSet. Not relevant for setters. */ | |||
2040 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2041 | true, /* isInfallible. False in setters. */ | |||
2042 | true, /* isMovable. Not relevant for setters. */ | |||
2043 | true, /* isEliminatable. Not relevant for setters. */ | |||
2044 | true, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2045 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2046 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2047 | (DOM_INSTANCE_RESERVED_SLOTS1 + 1) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2048 | }; | |||
2049 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 1) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
2050 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 1) < 22, "There is no slot for us"); | |||
2051 | ||||
2052 | MOZ_CAN_RUN_SCRIPT static bool | |||
2053 | get_cachedWritableByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2054 | { | |||
2055 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2058( cx, "TestExampleInterface" , "cachedWritableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2056 | "TestExampleInterface", "cachedWritableByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2058( cx, "TestExampleInterface" , "cachedWritableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2057 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2058( cx, "TestExampleInterface" , "cachedWritableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2058 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2058( cx, "TestExampleInterface" , "cachedWritableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2059 | ||||
2060 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2061 | // Have to either root across the getter call or reget after. | |||
2062 | bool isXray; | |||
2063 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
2064 | if (!slotStorage) { | |||
2065 | return false; | |||
2066 | } | |||
2067 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 2) : (DOM_INSTANCE_RESERVED_SLOTS1 + 2); | |||
2068 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 2068); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 2068; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
2069 | { | |||
2070 | // Scope for cachedVal | |||
2071 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
2072 | if (!cachedVal.isUndefined()) { | |||
2073 | args.rval().set(cachedVal); | |||
2074 | // The cached value is in the compartment of slotStorage, | |||
2075 | // so wrap into the caller compartment as needed. | |||
2076 | return MaybeWrapValue(cx, args.rval()); | |||
2077 | } | |||
2078 | } | |||
2079 | ||||
2080 | int8_t result(MOZ_KnownLive(self)(self)->CachedWritableByte()); | |||
2081 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2081); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2081; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2082 | { | |||
2083 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
2084 | JSAutoRealm ar(cx, conversionScope); | |||
2085 | do { // block we break out of when done wrapping | |||
2086 | args.rval().setInt32(int32_t(result)); | |||
2087 | break; | |||
2088 | } while (false); | |||
2089 | } | |||
2090 | { // And now store things in the realm of our slotStorage. | |||
2091 | JSAutoRealm ar(cx, slotStorage); | |||
2092 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
2093 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
2094 | if (!MaybeWrapValue(cx, &storedVal)) { | |||
2095 | return false; | |||
2096 | } | |||
2097 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
2098 | if (!isXray) { | |||
2099 | // In the Xray case we don't need to do this, because getting the | |||
2100 | // expando object already preserved our wrapper. | |||
2101 | PreserveWrapper(self); | |||
2102 | } | |||
2103 | } | |||
2104 | // And now make sure args.rval() is in the caller realm. | |||
2105 | return MaybeWrapValue(cx, args.rval()); | |||
2106 | } | |||
2107 | ||||
2108 | MOZ_CAN_RUN_SCRIPT static bool | |||
2109 | set_cachedWritableByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
2110 | { | |||
2111 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2114( cx, "TestExampleInterface" , "cachedWritableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2112 | "TestExampleInterface", "cachedWritableByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2114( cx, "TestExampleInterface" , "cachedWritableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2113 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject2114( cx, "TestExampleInterface" , "cachedWritableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2114 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2114( cx, "TestExampleInterface" , "cachedWritableByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2115 | ||||
2116 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2117 | int8_t arg0; | |||
2118 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
2119 | return false; | |||
2120 | } | |||
2121 | // NOTE: This assert does NOT call the function. | |||
2122 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetCachedWritableByte(arg0))>, "Should be returning void here"); | |||
2123 | MOZ_KnownLive(self)(self)->SetCachedWritableByte(arg0); | |||
2124 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2124); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2124; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2125 | ||||
2126 | ClearCachedCachedWritableByteValue(self); | |||
2127 | return true; | |||
2128 | } | |||
2129 | ||||
2130 | static const JSJitInfo cachedWritableByte_getterinfo = { | |||
2131 | { get_cachedWritableByte }, | |||
2132 | { prototypes::id::TestExampleInterface }, | |||
2133 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2134 | JSJitInfo::Getter, | |||
2135 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
2136 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2137 | true, /* isInfallible. False in setters. */ | |||
2138 | true, /* isMovable. Not relevant for setters. */ | |||
2139 | true, /* isEliminatable. Not relevant for setters. */ | |||
2140 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2141 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2142 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2143 | (DOM_INSTANCE_RESERVED_SLOTS1 + 2) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2144 | }; | |||
2145 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 2) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
2146 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 2) < 22, "There is no slot for us"); | |||
2147 | static const JSJitInfo cachedWritableByte_setterinfo = { | |||
2148 | { (JSJitGetterOp)set_cachedWritableByte }, | |||
2149 | { prototypes::id::TestExampleInterface }, | |||
2150 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2151 | JSJitInfo::Setter, | |||
2152 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2153 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2154 | false, /* isInfallible. False in setters. */ | |||
2155 | false, /* isMovable. Not relevant for setters. */ | |||
2156 | false, /* isEliminatable. Not relevant for setters. */ | |||
2157 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2158 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2159 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2160 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2161 | }; | |||
2162 | ||||
2163 | MOZ_CAN_RUN_SCRIPT static bool | |||
2164 | get_sideEffectFreeByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2165 | { | |||
2166 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2169( cx, "TestExampleInterface" , "sideEffectFreeByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2167 | "TestExampleInterface", "sideEffectFreeByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2169( cx, "TestExampleInterface" , "sideEffectFreeByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2168 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2169( cx, "TestExampleInterface" , "sideEffectFreeByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2169 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2169( cx, "TestExampleInterface" , "sideEffectFreeByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2170 | ||||
2171 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2172 | int8_t result(MOZ_KnownLive(self)(self)->SideEffectFreeByte()); | |||
2173 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2173); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2173; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2174 | args.rval().setInt32(int32_t(result)); | |||
2175 | return true; | |||
2176 | } | |||
2177 | ||||
2178 | MOZ_CAN_RUN_SCRIPT static bool | |||
2179 | set_sideEffectFreeByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
2180 | { | |||
2181 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2184( cx, "TestExampleInterface" , "sideEffectFreeByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2182 | "TestExampleInterface", "sideEffectFreeByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2184( cx, "TestExampleInterface" , "sideEffectFreeByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2183 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject2184( cx, "TestExampleInterface" , "sideEffectFreeByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2184 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2184( cx, "TestExampleInterface" , "sideEffectFreeByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2185 | ||||
2186 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2187 | int8_t arg0; | |||
2188 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
2189 | return false; | |||
2190 | } | |||
2191 | // NOTE: This assert does NOT call the function. | |||
2192 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetSideEffectFreeByte(arg0))>, "Should be returning void here"); | |||
2193 | MOZ_KnownLive(self)(self)->SetSideEffectFreeByte(arg0); | |||
2194 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2194); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2194; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2195 | ||||
2196 | return true; | |||
2197 | } | |||
2198 | ||||
2199 | static const JSJitInfo sideEffectFreeByte_getterinfo = { | |||
2200 | { get_sideEffectFreeByte }, | |||
2201 | { prototypes::id::TestExampleInterface }, | |||
2202 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2203 | JSJitInfo::Getter, | |||
2204 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2205 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2206 | true, /* isInfallible. False in setters. */ | |||
2207 | false, /* isMovable. Not relevant for setters. */ | |||
2208 | false, /* isEliminatable. Not relevant for setters. */ | |||
2209 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2210 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2211 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2212 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2213 | }; | |||
2214 | static const JSJitInfo sideEffectFreeByte_setterinfo = { | |||
2215 | { (JSJitGetterOp)set_sideEffectFreeByte }, | |||
2216 | { prototypes::id::TestExampleInterface }, | |||
2217 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2218 | JSJitInfo::Setter, | |||
2219 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2220 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2221 | false, /* isInfallible. False in setters. */ | |||
2222 | false, /* isMovable. Not relevant for setters. */ | |||
2223 | false, /* isEliminatable. Not relevant for setters. */ | |||
2224 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2225 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2226 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2227 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2228 | }; | |||
2229 | ||||
2230 | MOZ_CAN_RUN_SCRIPT static bool | |||
2231 | get_domDependentByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2232 | { | |||
2233 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2236( cx, "TestExampleInterface" , "domDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2234 | "TestExampleInterface", "domDependentByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2236( cx, "TestExampleInterface" , "domDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2235 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2236( cx, "TestExampleInterface" , "domDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2236 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2236( cx, "TestExampleInterface" , "domDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2237 | ||||
2238 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2239 | int8_t result(MOZ_KnownLive(self)(self)->DomDependentByte()); | |||
2240 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2240); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2240; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2241 | args.rval().setInt32(int32_t(result)); | |||
2242 | return true; | |||
2243 | } | |||
2244 | ||||
2245 | MOZ_CAN_RUN_SCRIPT static bool | |||
2246 | set_domDependentByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
2247 | { | |||
2248 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2251( cx, "TestExampleInterface" , "domDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2249 | "TestExampleInterface", "domDependentByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2251( cx, "TestExampleInterface" , "domDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2250 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject2251( cx, "TestExampleInterface" , "domDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2251 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2251( cx, "TestExampleInterface" , "domDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2252 | ||||
2253 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2254 | int8_t arg0; | |||
2255 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
2256 | return false; | |||
2257 | } | |||
2258 | // NOTE: This assert does NOT call the function. | |||
2259 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetDomDependentByte(arg0))>, "Should be returning void here"); | |||
2260 | MOZ_KnownLive(self)(self)->SetDomDependentByte(arg0); | |||
2261 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2261); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2261; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2262 | ||||
2263 | return true; | |||
2264 | } | |||
2265 | ||||
2266 | static const JSJitInfo domDependentByte_getterinfo = { | |||
2267 | { get_domDependentByte }, | |||
2268 | { prototypes::id::TestExampleInterface }, | |||
2269 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2270 | JSJitInfo::Getter, | |||
2271 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
2272 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2273 | true, /* isInfallible. False in setters. */ | |||
2274 | true, /* isMovable. Not relevant for setters. */ | |||
2275 | true, /* isEliminatable. Not relevant for setters. */ | |||
2276 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2277 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2278 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2279 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2280 | }; | |||
2281 | static const JSJitInfo domDependentByte_setterinfo = { | |||
2282 | { (JSJitGetterOp)set_domDependentByte }, | |||
2283 | { prototypes::id::TestExampleInterface }, | |||
2284 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2285 | JSJitInfo::Setter, | |||
2286 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2287 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2288 | false, /* isInfallible. False in setters. */ | |||
2289 | false, /* isMovable. Not relevant for setters. */ | |||
2290 | false, /* isEliminatable. Not relevant for setters. */ | |||
2291 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2292 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2293 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2294 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2295 | }; | |||
2296 | ||||
2297 | MOZ_CAN_RUN_SCRIPT static bool | |||
2298 | get_constantByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2299 | { | |||
2300 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2303( cx, "TestExampleInterface" , "constantByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2301 | "TestExampleInterface", "constantByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2303( cx, "TestExampleInterface" , "constantByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2302 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2303( cx, "TestExampleInterface" , "constantByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2303 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2303( cx, "TestExampleInterface" , "constantByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2304 | ||||
2305 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2306 | int8_t result(MOZ_KnownLive(self)(self)->ConstantByte()); | |||
2307 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2307); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2307; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2308 | args.rval().setInt32(int32_t(result)); | |||
2309 | return true; | |||
2310 | } | |||
2311 | ||||
2312 | static const JSJitInfo constantByte_getterinfo = { | |||
2313 | { get_constantByte }, | |||
2314 | { prototypes::id::TestExampleInterface }, | |||
2315 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2316 | JSJitInfo::Getter, | |||
2317 | JSJitInfo::AliasNone, /* aliasSet. Not relevant for setters. */ | |||
2318 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2319 | true, /* isInfallible. False in setters. */ | |||
2320 | true, /* isMovable. Not relevant for setters. */ | |||
2321 | true, /* isEliminatable. Not relevant for setters. */ | |||
2322 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2323 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2324 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2325 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2326 | }; | |||
2327 | ||||
2328 | MOZ_CAN_RUN_SCRIPT static bool | |||
2329 | get_deviceStateDependentByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2330 | { | |||
2331 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2334( cx, "TestExampleInterface" , "deviceStateDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2332 | "TestExampleInterface", "deviceStateDependentByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2334( cx, "TestExampleInterface" , "deviceStateDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2333 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2334( cx, "TestExampleInterface" , "deviceStateDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2334 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2334( cx, "TestExampleInterface" , "deviceStateDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
2335 | ||||
2336 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2337 | int8_t result(MOZ_KnownLive(self)(self)->DeviceStateDependentByte()); | |||
2338 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2338); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2338; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2339 | args.rval().setInt32(int32_t(result)); | |||
2340 | return true; | |||
2341 | } | |||
2342 | ||||
2343 | static const JSJitInfo deviceStateDependentByte_getterinfo = { | |||
2344 | { get_deviceStateDependentByte }, | |||
2345 | { prototypes::id::TestExampleInterface }, | |||
2346 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2347 | JSJitInfo::Getter, | |||
2348 | JSJitInfo::AliasNone, /* aliasSet. Not relevant for setters. */ | |||
2349 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2350 | true, /* isInfallible. False in setters. */ | |||
2351 | false, /* isMovable. Not relevant for setters. */ | |||
2352 | true, /* isEliminatable. Not relevant for setters. */ | |||
2353 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2354 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2355 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2356 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2357 | }; | |||
2358 | ||||
2359 | MOZ_CAN_RUN_SCRIPT static bool | |||
2360 | returnByteSideEffectFree(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2361 | { | |||
2362 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2365( cx, "TestExampleInterface" , "returnByteSideEffectFree", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2363 | "TestExampleInterface", "returnByteSideEffectFree", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2365( cx, "TestExampleInterface" , "returnByteSideEffectFree", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2364 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2365( cx, "TestExampleInterface" , "returnByteSideEffectFree", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2365 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2365( cx, "TestExampleInterface" , "returnByteSideEffectFree", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
2366 | ||||
2367 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2368 | int8_t result(MOZ_KnownLive(self)(self)->ReturnByteSideEffectFree()); | |||
2369 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2369); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2369; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2370 | args.rval().setInt32(int32_t(result)); | |||
2371 | return true; | |||
2372 | } | |||
2373 | ||||
2374 | static const JSJitInfo::ArgType returnByteSideEffectFree_methodinfo_argTypes[] = { JSJitInfo::ArgTypeListEnd }; | |||
2375 | static const JSTypedMethodJitInfo returnByteSideEffectFree_methodinfo = { | |||
2376 | { | |||
2377 | { (JSJitGetterOp)returnByteSideEffectFree }, | |||
2378 | { prototypes::id::TestExampleInterface }, | |||
2379 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2380 | JSJitInfo::Method, | |||
2381 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2382 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2383 | true, /* isInfallible. False in setters. */ | |||
2384 | false, /* isMovable. Not relevant for setters. */ | |||
2385 | false, /* isEliminatable. Not relevant for setters. */ | |||
2386 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2387 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2388 | true, /* isTypedMethod. Only relevant for methods. */ | |||
2389 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2390 | }, | |||
2391 | returnByteSideEffectFree_methodinfo_argTypes | |||
2392 | }; | |||
2393 | ||||
2394 | MOZ_CAN_RUN_SCRIPT static bool | |||
2395 | returnDOMDependentByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2396 | { | |||
2397 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2400( cx, "TestExampleInterface" , "returnDOMDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2398 | "TestExampleInterface", "returnDOMDependentByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2400( cx, "TestExampleInterface" , "returnDOMDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2399 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2400( cx, "TestExampleInterface" , "returnDOMDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2400 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2400( cx, "TestExampleInterface" , "returnDOMDependentByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2401 | ||||
2402 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2403 | int8_t result(MOZ_KnownLive(self)(self)->ReturnDOMDependentByte()); | |||
2404 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2404); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2404; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2405 | args.rval().setInt32(int32_t(result)); | |||
2406 | return true; | |||
2407 | } | |||
2408 | ||||
2409 | static const JSJitInfo::ArgType returnDOMDependentByte_methodinfo_argTypes[] = { JSJitInfo::ArgTypeListEnd }; | |||
2410 | static const JSTypedMethodJitInfo returnDOMDependentByte_methodinfo = { | |||
2411 | { | |||
2412 | { (JSJitGetterOp)returnDOMDependentByte }, | |||
2413 | { prototypes::id::TestExampleInterface }, | |||
2414 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2415 | JSJitInfo::Method, | |||
2416 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
2417 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2418 | true, /* isInfallible. False in setters. */ | |||
2419 | true, /* isMovable. Not relevant for setters. */ | |||
2420 | true, /* isEliminatable. Not relevant for setters. */ | |||
2421 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2422 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2423 | true, /* isTypedMethod. Only relevant for methods. */ | |||
2424 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2425 | }, | |||
2426 | returnDOMDependentByte_methodinfo_argTypes | |||
2427 | }; | |||
2428 | ||||
2429 | MOZ_CAN_RUN_SCRIPT static bool | |||
2430 | returnConstantByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2431 | { | |||
2432 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2435( cx, "TestExampleInterface" , "returnConstantByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2433 | "TestExampleInterface", "returnConstantByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2435( cx, "TestExampleInterface" , "returnConstantByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2434 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2435( cx, "TestExampleInterface" , "returnConstantByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2435 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2435( cx, "TestExampleInterface" , "returnConstantByte", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2436 | ||||
2437 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2438 | int8_t result(MOZ_KnownLive(self)(self)->ReturnConstantByte()); | |||
2439 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2439); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2439; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2440 | args.rval().setInt32(int32_t(result)); | |||
2441 | return true; | |||
2442 | } | |||
2443 | ||||
2444 | static const JSJitInfo::ArgType returnConstantByte_methodinfo_argTypes[] = { JSJitInfo::ArgTypeListEnd }; | |||
2445 | static const JSTypedMethodJitInfo returnConstantByte_methodinfo = { | |||
2446 | { | |||
2447 | { (JSJitGetterOp)returnConstantByte }, | |||
2448 | { prototypes::id::TestExampleInterface }, | |||
2449 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2450 | JSJitInfo::Method, | |||
2451 | JSJitInfo::AliasNone, /* aliasSet. Not relevant for setters. */ | |||
2452 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2453 | true, /* isInfallible. False in setters. */ | |||
2454 | true, /* isMovable. Not relevant for setters. */ | |||
2455 | true, /* isEliminatable. Not relevant for setters. */ | |||
2456 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2457 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2458 | true, /* isTypedMethod. Only relevant for methods. */ | |||
2459 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2460 | }, | |||
2461 | returnConstantByte_methodinfo_argTypes | |||
2462 | }; | |||
2463 | ||||
2464 | MOZ_CAN_RUN_SCRIPT static bool | |||
2465 | returnDeviceStateDependentByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2466 | { | |||
2467 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2470( cx, "TestExampleInterface" , "returnDeviceStateDependentByte", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2468 | "TestExampleInterface", "returnDeviceStateDependentByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2470( cx, "TestExampleInterface" , "returnDeviceStateDependentByte", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2469 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2470( cx, "TestExampleInterface" , "returnDeviceStateDependentByte", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2470 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2470( cx, "TestExampleInterface" , "returnDeviceStateDependentByte", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
2471 | ||||
2472 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2473 | int8_t result(MOZ_KnownLive(self)(self)->ReturnDeviceStateDependentByte()); | |||
2474 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2474); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2474; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2475 | args.rval().setInt32(int32_t(result)); | |||
2476 | return true; | |||
2477 | } | |||
2478 | ||||
2479 | static const JSJitInfo::ArgType returnDeviceStateDependentByte_methodinfo_argTypes[] = { JSJitInfo::ArgTypeListEnd }; | |||
2480 | static const JSTypedMethodJitInfo returnDeviceStateDependentByte_methodinfo = { | |||
2481 | { | |||
2482 | { (JSJitGetterOp)returnDeviceStateDependentByte }, | |||
2483 | { prototypes::id::TestExampleInterface }, | |||
2484 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2485 | JSJitInfo::Method, | |||
2486 | JSJitInfo::AliasNone, /* aliasSet. Not relevant for setters. */ | |||
2487 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2488 | true, /* isInfallible. False in setters. */ | |||
2489 | false, /* isMovable. Not relevant for setters. */ | |||
2490 | true, /* isEliminatable. Not relevant for setters. */ | |||
2491 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2492 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2493 | true, /* isTypedMethod. Only relevant for methods. */ | |||
2494 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2495 | }, | |||
2496 | returnDeviceStateDependentByte_methodinfo_argTypes | |||
2497 | }; | |||
2498 | ||||
2499 | MOZ_CAN_RUN_SCRIPT static bool | |||
2500 | get_readonlyShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2501 | { | |||
2502 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2505( cx, "TestExampleInterface" , "readonlyShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2503 | "TestExampleInterface", "readonlyShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2505( cx, "TestExampleInterface" , "readonlyShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2504 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2505( cx, "TestExampleInterface" , "readonlyShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2505 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2505( cx, "TestExampleInterface" , "readonlyShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2506 | ||||
2507 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2508 | int16_t result(MOZ_KnownLive(self)(self)->ReadonlyShort()); | |||
2509 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2509); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2509; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2510 | args.rval().setInt32(int32_t(result)); | |||
2511 | return true; | |||
2512 | } | |||
2513 | ||||
2514 | static const JSJitInfo readonlyShort_getterinfo = { | |||
2515 | { get_readonlyShort }, | |||
2516 | { prototypes::id::TestExampleInterface }, | |||
2517 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2518 | JSJitInfo::Getter, | |||
2519 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2520 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2521 | true, /* isInfallible. False in setters. */ | |||
2522 | false, /* isMovable. Not relevant for setters. */ | |||
2523 | false, /* isEliminatable. Not relevant for setters. */ | |||
2524 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2525 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2526 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2527 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2528 | }; | |||
2529 | ||||
2530 | MOZ_CAN_RUN_SCRIPT static bool | |||
2531 | get_writableShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2532 | { | |||
2533 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2536( cx, "TestExampleInterface" , "writableShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2534 | "TestExampleInterface", "writableShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2536( cx, "TestExampleInterface" , "writableShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2535 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2536( cx, "TestExampleInterface" , "writableShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2536 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2536( cx, "TestExampleInterface" , "writableShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2537 | ||||
2538 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2539 | int16_t result(MOZ_KnownLive(self)(self)->WritableShort()); | |||
2540 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2540); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2540; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2541 | args.rval().setInt32(int32_t(result)); | |||
2542 | return true; | |||
2543 | } | |||
2544 | ||||
2545 | MOZ_CAN_RUN_SCRIPT static bool | |||
2546 | set_writableShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
2547 | { | |||
2548 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2551( cx, "TestExampleInterface" , "writableShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2549 | "TestExampleInterface", "writableShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2551( cx, "TestExampleInterface" , "writableShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2550 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject2551( cx, "TestExampleInterface" , "writableShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2551 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2551( cx, "TestExampleInterface" , "writableShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2552 | ||||
2553 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2554 | int16_t arg0; | |||
2555 | if (!ValueToPrimitive<int16_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
2556 | return false; | |||
2557 | } | |||
2558 | // NOTE: This assert does NOT call the function. | |||
2559 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableShort(arg0))>, "Should be returning void here"); | |||
2560 | MOZ_KnownLive(self)(self)->SetWritableShort(arg0); | |||
2561 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2561); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2561; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2562 | ||||
2563 | return true; | |||
2564 | } | |||
2565 | ||||
2566 | static const JSJitInfo writableShort_getterinfo = { | |||
2567 | { get_writableShort }, | |||
2568 | { prototypes::id::TestExampleInterface }, | |||
2569 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2570 | JSJitInfo::Getter, | |||
2571 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2572 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2573 | true, /* isInfallible. False in setters. */ | |||
2574 | false, /* isMovable. Not relevant for setters. */ | |||
2575 | false, /* isEliminatable. Not relevant for setters. */ | |||
2576 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2577 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2578 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2579 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2580 | }; | |||
2581 | static const JSJitInfo writableShort_setterinfo = { | |||
2582 | { (JSJitGetterOp)set_writableShort }, | |||
2583 | { prototypes::id::TestExampleInterface }, | |||
2584 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2585 | JSJitInfo::Setter, | |||
2586 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2587 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2588 | false, /* isInfallible. False in setters. */ | |||
2589 | false, /* isMovable. Not relevant for setters. */ | |||
2590 | false, /* isEliminatable. Not relevant for setters. */ | |||
2591 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2592 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2593 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2594 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2595 | }; | |||
2596 | ||||
2597 | MOZ_CAN_RUN_SCRIPT static bool | |||
2598 | passShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2599 | { | |||
2600 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2603( cx, "TestExampleInterface" , "passShort", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
2601 | "TestExampleInterface", "passShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2603( cx, "TestExampleInterface" , "passShort", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
2602 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2603( cx, "TestExampleInterface" , "passShort", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
2603 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2603( cx, "TestExampleInterface" , "passShort", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
2604 | ||||
2605 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2606 | if (!args.requireAtLeast(cx, "TestExampleInterface.passShort", 1)) { | |||
2607 | return false; | |||
2608 | } | |||
2609 | int16_t arg0; | |||
2610 | if (!ValueToPrimitive<int16_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
2611 | return false; | |||
2612 | } | |||
2613 | // NOTE: This assert does NOT call the function. | |||
2614 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassShort(arg0))>, "Should be returning void here"); | |||
2615 | MOZ_KnownLive(self)(self)->PassShort(arg0); | |||
2616 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2616); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2616; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2617 | args.rval().setUndefined(); | |||
2618 | return true; | |||
2619 | } | |||
2620 | ||||
2621 | static const JSJitInfo passShort_methodinfo = { | |||
2622 | { (JSJitGetterOp)passShort }, | |||
2623 | { prototypes::id::TestExampleInterface }, | |||
2624 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2625 | JSJitInfo::Method, | |||
2626 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2627 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2628 | false, /* isInfallible. False in setters. */ | |||
2629 | false, /* isMovable. Not relevant for setters. */ | |||
2630 | false, /* isEliminatable. Not relevant for setters. */ | |||
2631 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2632 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2633 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2634 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2635 | }; | |||
2636 | ||||
2637 | MOZ_CAN_RUN_SCRIPT static bool | |||
2638 | receiveShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2639 | { | |||
2640 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2643( cx, "TestExampleInterface" , "receiveShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2641 | "TestExampleInterface", "receiveShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2643( cx, "TestExampleInterface" , "receiveShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2642 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2643( cx, "TestExampleInterface" , "receiveShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2643 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2643( cx, "TestExampleInterface" , "receiveShort", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2644 | ||||
2645 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2646 | int16_t result(MOZ_KnownLive(self)(self)->ReceiveShort()); | |||
2647 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2647); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2647; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2648 | args.rval().setInt32(int32_t(result)); | |||
2649 | return true; | |||
2650 | } | |||
2651 | ||||
2652 | static const JSJitInfo receiveShort_methodinfo = { | |||
2653 | { (JSJitGetterOp)receiveShort }, | |||
2654 | { prototypes::id::TestExampleInterface }, | |||
2655 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2656 | JSJitInfo::Method, | |||
2657 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2658 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2659 | true, /* isInfallible. False in setters. */ | |||
2660 | false, /* isMovable. Not relevant for setters. */ | |||
2661 | false, /* isEliminatable. Not relevant for setters. */ | |||
2662 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2663 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2664 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2665 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2666 | }; | |||
2667 | ||||
2668 | MOZ_CAN_RUN_SCRIPT static bool | |||
2669 | passOptionalShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2670 | { | |||
2671 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2674( cx, "TestExampleInterface" , "passOptionalShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2672 | "TestExampleInterface", "passOptionalShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2674( cx, "TestExampleInterface" , "passOptionalShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2673 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2674( cx, "TestExampleInterface" , "passOptionalShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2674 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2674( cx, "TestExampleInterface" , "passOptionalShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2675 | ||||
2676 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2677 | Optional<int16_t> arg0; | |||
2678 | if (args.hasDefined(0)) { | |||
2679 | arg0.Construct(); | |||
2680 | if (!ValueToPrimitive<int16_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
2681 | return false; | |||
2682 | } | |||
2683 | } | |||
2684 | // NOTE: This assert does NOT call the function. | |||
2685 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalShort(Constify(arg0)))>, "Should be returning void here"); | |||
2686 | MOZ_KnownLive(self)(self)->PassOptionalShort(Constify(arg0)); | |||
2687 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2687); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2687; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2688 | args.rval().setUndefined(); | |||
2689 | return true; | |||
2690 | } | |||
2691 | ||||
2692 | static const JSJitInfo passOptionalShort_methodinfo = { | |||
2693 | { (JSJitGetterOp)passOptionalShort }, | |||
2694 | { prototypes::id::TestExampleInterface }, | |||
2695 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2696 | JSJitInfo::Method, | |||
2697 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2698 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2699 | false, /* isInfallible. False in setters. */ | |||
2700 | false, /* isMovable. Not relevant for setters. */ | |||
2701 | false, /* isEliminatable. Not relevant for setters. */ | |||
2702 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2703 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2704 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2705 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2706 | }; | |||
2707 | ||||
2708 | MOZ_CAN_RUN_SCRIPT static bool | |||
2709 | passOptionalShortWithDefault(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2710 | { | |||
2711 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2714( cx, "TestExampleInterface" , "passOptionalShortWithDefault", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2712 | "TestExampleInterface", "passOptionalShortWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2714( cx, "TestExampleInterface" , "passOptionalShortWithDefault", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2713 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2714( cx, "TestExampleInterface" , "passOptionalShortWithDefault", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2714 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2714( cx, "TestExampleInterface" , "passOptionalShortWithDefault", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
2715 | ||||
2716 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2717 | int16_t arg0; | |||
2718 | if (args.hasDefined(0)) { | |||
2719 | if (!ValueToPrimitive<int16_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
2720 | return false; | |||
2721 | } | |||
2722 | } else { | |||
2723 | arg0 = 5; | |||
2724 | } | |||
2725 | // NOTE: This assert does NOT call the function. | |||
2726 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalShortWithDefault(arg0))>, "Should be returning void here"); | |||
2727 | MOZ_KnownLive(self)(self)->PassOptionalShortWithDefault(arg0); | |||
2728 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2728); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2728; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2729 | args.rval().setUndefined(); | |||
2730 | return true; | |||
2731 | } | |||
2732 | ||||
2733 | static const JSJitInfo passOptionalShortWithDefault_methodinfo = { | |||
2734 | { (JSJitGetterOp)passOptionalShortWithDefault }, | |||
2735 | { prototypes::id::TestExampleInterface }, | |||
2736 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2737 | JSJitInfo::Method, | |||
2738 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2739 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2740 | false, /* isInfallible. False in setters. */ | |||
2741 | false, /* isMovable. Not relevant for setters. */ | |||
2742 | false, /* isEliminatable. Not relevant for setters. */ | |||
2743 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2744 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2745 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2746 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2747 | }; | |||
2748 | ||||
2749 | MOZ_CAN_RUN_SCRIPT static bool | |||
2750 | get_readonlyLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2751 | { | |||
2752 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2755( cx, "TestExampleInterface" , "readonlyLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2753 | "TestExampleInterface", "readonlyLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2755( cx, "TestExampleInterface" , "readonlyLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2754 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2755( cx, "TestExampleInterface" , "readonlyLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2755 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2755( cx, "TestExampleInterface" , "readonlyLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2756 | ||||
2757 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2758 | int32_t result(MOZ_KnownLive(self)(self)->ReadonlyLong()); | |||
2759 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2759); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2759; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2760 | args.rval().setInt32(int32_t(result)); | |||
2761 | return true; | |||
2762 | } | |||
2763 | ||||
2764 | static const JSJitInfo readonlyLong_getterinfo = { | |||
2765 | { get_readonlyLong }, | |||
2766 | { prototypes::id::TestExampleInterface }, | |||
2767 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2768 | JSJitInfo::Getter, | |||
2769 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2770 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2771 | true, /* isInfallible. False in setters. */ | |||
2772 | false, /* isMovable. Not relevant for setters. */ | |||
2773 | false, /* isEliminatable. Not relevant for setters. */ | |||
2774 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2775 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2776 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2777 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2778 | }; | |||
2779 | ||||
2780 | MOZ_CAN_RUN_SCRIPT static bool | |||
2781 | get_writableLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
2782 | { | |||
2783 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2786( cx, "TestExampleInterface" , "writableLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2784 | "TestExampleInterface", "writableLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2786( cx, "TestExampleInterface" , "writableLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2785 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject2786( cx, "TestExampleInterface" , "writableLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2786 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2786( cx, "TestExampleInterface" , "writableLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2787 | ||||
2788 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2789 | int32_t result(MOZ_KnownLive(self)(self)->WritableLong()); | |||
2790 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2790); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2790; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2791 | args.rval().setInt32(int32_t(result)); | |||
2792 | return true; | |||
2793 | } | |||
2794 | ||||
2795 | MOZ_CAN_RUN_SCRIPT static bool | |||
2796 | set_writableLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
2797 | { | |||
2798 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2801( cx, "TestExampleInterface" , "writableLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2799 | "TestExampleInterface", "writableLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2801( cx, "TestExampleInterface" , "writableLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2800 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject2801( cx, "TestExampleInterface" , "writableLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2801 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2801( cx, "TestExampleInterface" , "writableLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2802 | ||||
2803 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2804 | int32_t arg0; | |||
2805 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
2806 | return false; | |||
2807 | } | |||
2808 | // NOTE: This assert does NOT call the function. | |||
2809 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableLong(arg0))>, "Should be returning void here"); | |||
2810 | MOZ_KnownLive(self)(self)->SetWritableLong(arg0); | |||
2811 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2811); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2811; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2812 | ||||
2813 | return true; | |||
2814 | } | |||
2815 | ||||
2816 | static const JSJitInfo writableLong_getterinfo = { | |||
2817 | { get_writableLong }, | |||
2818 | { prototypes::id::TestExampleInterface }, | |||
2819 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2820 | JSJitInfo::Getter, | |||
2821 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2822 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2823 | true, /* isInfallible. False in setters. */ | |||
2824 | false, /* isMovable. Not relevant for setters. */ | |||
2825 | false, /* isEliminatable. Not relevant for setters. */ | |||
2826 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2827 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2828 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2829 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2830 | }; | |||
2831 | static const JSJitInfo writableLong_setterinfo = { | |||
2832 | { (JSJitGetterOp)set_writableLong }, | |||
2833 | { prototypes::id::TestExampleInterface }, | |||
2834 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2835 | JSJitInfo::Setter, | |||
2836 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2837 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2838 | false, /* isInfallible. False in setters. */ | |||
2839 | false, /* isMovable. Not relevant for setters. */ | |||
2840 | false, /* isEliminatable. Not relevant for setters. */ | |||
2841 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2842 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2843 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2844 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2845 | }; | |||
2846 | ||||
2847 | MOZ_CAN_RUN_SCRIPT static bool | |||
2848 | passLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2849 | { | |||
2850 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2853( cx, "TestExampleInterface" , "passLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
2851 | "TestExampleInterface", "passLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2853( cx, "TestExampleInterface" , "passLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
2852 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2853( cx, "TestExampleInterface" , "passLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
2853 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2853( cx, "TestExampleInterface" , "passLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
2854 | ||||
2855 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2856 | if (!args.requireAtLeast(cx, "TestExampleInterface.passLong", 1)) { | |||
2857 | return false; | |||
2858 | } | |||
2859 | int32_t arg0; | |||
2860 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
2861 | return false; | |||
2862 | } | |||
2863 | // NOTE: This assert does NOT call the function. | |||
2864 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassLong(arg0))>, "Should be returning void here"); | |||
2865 | MOZ_KnownLive(self)(self)->PassLong(arg0); | |||
2866 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2866); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2866; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2867 | args.rval().setUndefined(); | |||
2868 | return true; | |||
2869 | } | |||
2870 | ||||
2871 | static const JSJitInfo passLong_methodinfo = { | |||
2872 | { (JSJitGetterOp)passLong }, | |||
2873 | { prototypes::id::TestExampleInterface }, | |||
2874 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2875 | JSJitInfo::Method, | |||
2876 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2877 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2878 | false, /* 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 | ||||
2887 | MOZ_CAN_RUN_SCRIPT static bool | |||
2888 | receiveLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2889 | { | |||
2890 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2893( cx, "TestExampleInterface" , "receiveLong", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2891 | "TestExampleInterface", "receiveLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2893( cx, "TestExampleInterface" , "receiveLong", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2892 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2893( cx, "TestExampleInterface" , "receiveLong", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2893 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2893( cx, "TestExampleInterface" , "receiveLong", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2894 | ||||
2895 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2896 | int32_t result(MOZ_KnownLive(self)(self)->ReceiveLong()); | |||
2897 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2897); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2897; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2898 | args.rval().setInt32(int32_t(result)); | |||
2899 | return true; | |||
2900 | } | |||
2901 | ||||
2902 | static const JSJitInfo receiveLong_methodinfo = { | |||
2903 | { (JSJitGetterOp)receiveLong }, | |||
2904 | { prototypes::id::TestExampleInterface }, | |||
2905 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2906 | JSJitInfo::Method, | |||
2907 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2908 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
2909 | true, /* isInfallible. False in setters. */ | |||
2910 | false, /* isMovable. Not relevant for setters. */ | |||
2911 | false, /* isEliminatable. Not relevant for setters. */ | |||
2912 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2913 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2914 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2915 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2916 | }; | |||
2917 | ||||
2918 | MOZ_CAN_RUN_SCRIPT static bool | |||
2919 | passOptionalLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2920 | { | |||
2921 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2924( cx, "TestExampleInterface" , "passOptionalLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2922 | "TestExampleInterface", "passOptionalLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2924( cx, "TestExampleInterface" , "passOptionalLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2923 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2924( cx, "TestExampleInterface" , "passOptionalLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
2924 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2924( cx, "TestExampleInterface" , "passOptionalLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
2925 | ||||
2926 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2927 | Optional<int32_t> arg0; | |||
2928 | if (args.hasDefined(0)) { | |||
2929 | arg0.Construct(); | |||
2930 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
2931 | return false; | |||
2932 | } | |||
2933 | } | |||
2934 | // NOTE: This assert does NOT call the function. | |||
2935 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalLong(Constify(arg0)))>, "Should be returning void here"); | |||
2936 | MOZ_KnownLive(self)(self)->PassOptionalLong(Constify(arg0)); | |||
2937 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2937); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2937; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2938 | args.rval().setUndefined(); | |||
2939 | return true; | |||
2940 | } | |||
2941 | ||||
2942 | static const JSJitInfo passOptionalLong_methodinfo = { | |||
2943 | { (JSJitGetterOp)passOptionalLong }, | |||
2944 | { prototypes::id::TestExampleInterface }, | |||
2945 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2946 | JSJitInfo::Method, | |||
2947 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2948 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2949 | false, /* isInfallible. False in setters. */ | |||
2950 | false, /* isMovable. Not relevant for setters. */ | |||
2951 | false, /* isEliminatable. Not relevant for setters. */ | |||
2952 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2953 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2954 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2955 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2956 | }; | |||
2957 | ||||
2958 | MOZ_CAN_RUN_SCRIPT static bool | |||
2959 | passOptionalLongWithDefault(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
2960 | { | |||
2961 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject2964( cx, "TestExampleInterface" , "passOptionalLongWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2962 | "TestExampleInterface", "passOptionalLongWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject2964( cx, "TestExampleInterface" , "passOptionalLongWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2963 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject2964( cx, "TestExampleInterface" , "passOptionalLongWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
2964 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject2964( cx, "TestExampleInterface" , "passOptionalLongWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
2965 | ||||
2966 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
2967 | int32_t arg0; | |||
2968 | if (args.hasDefined(0)) { | |||
2969 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
2970 | return false; | |||
2971 | } | |||
2972 | } else { | |||
2973 | arg0 = 7; | |||
2974 | } | |||
2975 | // NOTE: This assert does NOT call the function. | |||
2976 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalLongWithDefault(arg0))>, "Should be returning void here"); | |||
2977 | MOZ_KnownLive(self)(self)->PassOptionalLongWithDefault(arg0); | |||
2978 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 2978); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 2978; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
2979 | args.rval().setUndefined(); | |||
2980 | return true; | |||
2981 | } | |||
2982 | ||||
2983 | static const JSJitInfo passOptionalLongWithDefault_methodinfo = { | |||
2984 | { (JSJitGetterOp)passOptionalLongWithDefault }, | |||
2985 | { prototypes::id::TestExampleInterface }, | |||
2986 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
2987 | JSJitInfo::Method, | |||
2988 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
2989 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
2990 | false, /* isInfallible. False in setters. */ | |||
2991 | false, /* isMovable. Not relevant for setters. */ | |||
2992 | false, /* isEliminatable. Not relevant for setters. */ | |||
2993 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
2994 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
2995 | false, /* isTypedMethod. Only relevant for methods. */ | |||
2996 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
2997 | }; | |||
2998 | ||||
2999 | MOZ_CAN_RUN_SCRIPT static bool | |||
3000 | get_readonlyLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
3001 | { | |||
3002 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3005( cx, "TestExampleInterface" , "readonlyLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3003 | "TestExampleInterface", "readonlyLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3005( cx, "TestExampleInterface" , "readonlyLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3004 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject3005( cx, "TestExampleInterface" , "readonlyLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3005 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3005( cx, "TestExampleInterface" , "readonlyLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3006 | ||||
3007 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3008 | int64_t result(MOZ_KnownLive(self)(self)->ReadonlyLongLong()); | |||
3009 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3009); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3009; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3010 | args.rval().set(JS_NumberValue(double(result))); | |||
3011 | return true; | |||
3012 | } | |||
3013 | ||||
3014 | static const JSJitInfo readonlyLongLong_getterinfo = { | |||
3015 | { get_readonlyLongLong }, | |||
3016 | { prototypes::id::TestExampleInterface }, | |||
3017 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3018 | JSJitInfo::Getter, | |||
3019 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3020 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
3021 | true, /* isInfallible. False in setters. */ | |||
3022 | false, /* isMovable. Not relevant for setters. */ | |||
3023 | false, /* isEliminatable. Not relevant for setters. */ | |||
3024 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3025 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3026 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3027 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3028 | }; | |||
3029 | ||||
3030 | MOZ_CAN_RUN_SCRIPT static bool | |||
3031 | get_writableLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
3032 | { | |||
3033 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3036( cx, "TestExampleInterface" , "writableLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3034 | "TestExampleInterface", "writableLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3036( cx, "TestExampleInterface" , "writableLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3035 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject3036( cx, "TestExampleInterface" , "writableLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3036 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3036( cx, "TestExampleInterface" , "writableLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3037 | ||||
3038 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3039 | int64_t result(MOZ_KnownLive(self)(self)->WritableLongLong()); | |||
3040 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3040); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3040; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3041 | args.rval().set(JS_NumberValue(double(result))); | |||
3042 | return true; | |||
3043 | } | |||
3044 | ||||
3045 | MOZ_CAN_RUN_SCRIPT static bool | |||
3046 | set_writableLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
3047 | { | |||
3048 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3051( cx, "TestExampleInterface" , "writableLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3049 | "TestExampleInterface", "writableLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3051( cx, "TestExampleInterface" , "writableLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3050 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject3051( cx, "TestExampleInterface" , "writableLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3051 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3051( cx, "TestExampleInterface" , "writableLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3052 | ||||
3053 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3054 | int64_t arg0; | |||
3055 | if (!ValueToPrimitive<int64_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
3056 | return false; | |||
3057 | } | |||
3058 | // NOTE: This assert does NOT call the function. | |||
3059 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableLongLong(arg0))>, "Should be returning void here"); | |||
3060 | MOZ_KnownLive(self)(self)->SetWritableLongLong(arg0); | |||
3061 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3061); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3061; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3062 | ||||
3063 | return true; | |||
3064 | } | |||
3065 | ||||
3066 | static const JSJitInfo writableLongLong_getterinfo = { | |||
3067 | { get_writableLongLong }, | |||
3068 | { prototypes::id::TestExampleInterface }, | |||
3069 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3070 | JSJitInfo::Getter, | |||
3071 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3072 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
3073 | true, /* isInfallible. False in setters. */ | |||
3074 | false, /* isMovable. Not relevant for setters. */ | |||
3075 | false, /* isEliminatable. Not relevant for setters. */ | |||
3076 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3077 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3078 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3079 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3080 | }; | |||
3081 | static const JSJitInfo writableLongLong_setterinfo = { | |||
3082 | { (JSJitGetterOp)set_writableLongLong }, | |||
3083 | { prototypes::id::TestExampleInterface }, | |||
3084 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3085 | JSJitInfo::Setter, | |||
3086 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3087 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3088 | false, /* isInfallible. False in setters. */ | |||
3089 | false, /* isMovable. Not relevant for setters. */ | |||
3090 | false, /* isEliminatable. Not relevant for setters. */ | |||
3091 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3092 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3093 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3094 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3095 | }; | |||
3096 | ||||
3097 | MOZ_CAN_RUN_SCRIPT static bool | |||
3098 | passLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3099 | { | |||
3100 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3103( cx, "TestExampleInterface" , "passLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3101 | "TestExampleInterface", "passLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3103( cx, "TestExampleInterface" , "passLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3102 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3103( cx, "TestExampleInterface" , "passLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3103 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3103( cx, "TestExampleInterface" , "passLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3104 | ||||
3105 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3106 | if (!args.requireAtLeast(cx, "TestExampleInterface.passLongLong", 1)) { | |||
3107 | return false; | |||
3108 | } | |||
3109 | int64_t arg0; | |||
3110 | if (!ValueToPrimitive<int64_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
3111 | return false; | |||
3112 | } | |||
3113 | // NOTE: This assert does NOT call the function. | |||
3114 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassLongLong(arg0))>, "Should be returning void here"); | |||
3115 | MOZ_KnownLive(self)(self)->PassLongLong(arg0); | |||
3116 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3116); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3116; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3117 | args.rval().setUndefined(); | |||
3118 | return true; | |||
3119 | } | |||
3120 | ||||
3121 | static const JSJitInfo passLongLong_methodinfo = { | |||
3122 | { (JSJitGetterOp)passLongLong }, | |||
3123 | { prototypes::id::TestExampleInterface }, | |||
3124 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3125 | JSJitInfo::Method, | |||
3126 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3127 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3128 | false, /* isInfallible. False in setters. */ | |||
3129 | false, /* isMovable. Not relevant for setters. */ | |||
3130 | false, /* isEliminatable. Not relevant for setters. */ | |||
3131 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3132 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3133 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3134 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3135 | }; | |||
3136 | ||||
3137 | MOZ_CAN_RUN_SCRIPT static bool | |||
3138 | receiveLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3139 | { | |||
3140 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3143( cx, "TestExampleInterface" , "receiveLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3141 | "TestExampleInterface", "receiveLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3143( cx, "TestExampleInterface" , "receiveLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3142 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3143( cx, "TestExampleInterface" , "receiveLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3143 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3143( cx, "TestExampleInterface" , "receiveLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3144 | ||||
3145 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3146 | int64_t result(MOZ_KnownLive(self)(self)->ReceiveLongLong()); | |||
3147 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3147); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3147; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3148 | args.rval().set(JS_NumberValue(double(result))); | |||
3149 | return true; | |||
3150 | } | |||
3151 | ||||
3152 | static const JSJitInfo receiveLongLong_methodinfo = { | |||
3153 | { (JSJitGetterOp)receiveLongLong }, | |||
3154 | { prototypes::id::TestExampleInterface }, | |||
3155 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3156 | JSJitInfo::Method, | |||
3157 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3158 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
3159 | true, /* isInfallible. False in setters. */ | |||
3160 | false, /* isMovable. Not relevant for setters. */ | |||
3161 | false, /* isEliminatable. Not relevant for setters. */ | |||
3162 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3163 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3164 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3165 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3166 | }; | |||
3167 | ||||
3168 | MOZ_CAN_RUN_SCRIPT static bool | |||
3169 | passOptionalLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3170 | { | |||
3171 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3174( cx, "TestExampleInterface" , "passOptionalLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3172 | "TestExampleInterface", "passOptionalLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3174( cx, "TestExampleInterface" , "passOptionalLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3173 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3174( cx, "TestExampleInterface" , "passOptionalLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3174 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3174( cx, "TestExampleInterface" , "passOptionalLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3175 | ||||
3176 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3177 | Optional<int64_t> arg0; | |||
3178 | if (args.hasDefined(0)) { | |||
3179 | arg0.Construct(); | |||
3180 | if (!ValueToPrimitive<int64_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
3181 | return false; | |||
3182 | } | |||
3183 | } | |||
3184 | // NOTE: This assert does NOT call the function. | |||
3185 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalLongLong(Constify(arg0)))>, "Should be returning void here"); | |||
3186 | MOZ_KnownLive(self)(self)->PassOptionalLongLong(Constify(arg0)); | |||
3187 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3187); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3187; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3188 | args.rval().setUndefined(); | |||
3189 | return true; | |||
3190 | } | |||
3191 | ||||
3192 | static const JSJitInfo passOptionalLongLong_methodinfo = { | |||
3193 | { (JSJitGetterOp)passOptionalLongLong }, | |||
3194 | { prototypes::id::TestExampleInterface }, | |||
3195 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3196 | JSJitInfo::Method, | |||
3197 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3198 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3199 | false, /* isInfallible. False in setters. */ | |||
3200 | false, /* isMovable. Not relevant for setters. */ | |||
3201 | false, /* isEliminatable. Not relevant for setters. */ | |||
3202 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3203 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3204 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3205 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3206 | }; | |||
3207 | ||||
3208 | MOZ_CAN_RUN_SCRIPT static bool | |||
3209 | passOptionalLongLongWithDefault(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3210 | { | |||
3211 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3214( cx, "TestExampleInterface" , "passOptionalLongLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3212 | "TestExampleInterface", "passOptionalLongLongWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3214( cx, "TestExampleInterface" , "passOptionalLongLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3213 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3214( cx, "TestExampleInterface" , "passOptionalLongLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3214 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3214( cx, "TestExampleInterface" , "passOptionalLongLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
3215 | ||||
3216 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3217 | int64_t arg0; | |||
3218 | if (args.hasDefined(0)) { | |||
3219 | if (!ValueToPrimitive<int64_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
3220 | return false; | |||
3221 | } | |||
3222 | } else { | |||
3223 | arg0 = -12LL; | |||
3224 | } | |||
3225 | // NOTE: This assert does NOT call the function. | |||
3226 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalLongLongWithDefault(arg0))>, "Should be returning void here"); | |||
3227 | MOZ_KnownLive(self)(self)->PassOptionalLongLongWithDefault(arg0); | |||
3228 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3228); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3228; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3229 | args.rval().setUndefined(); | |||
3230 | return true; | |||
3231 | } | |||
3232 | ||||
3233 | static const JSJitInfo passOptionalLongLongWithDefault_methodinfo = { | |||
3234 | { (JSJitGetterOp)passOptionalLongLongWithDefault }, | |||
3235 | { prototypes::id::TestExampleInterface }, | |||
3236 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3237 | JSJitInfo::Method, | |||
3238 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3239 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3240 | false, /* isInfallible. False in setters. */ | |||
3241 | false, /* isMovable. Not relevant for setters. */ | |||
3242 | false, /* isEliminatable. Not relevant for setters. */ | |||
3243 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3244 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3245 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3246 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3247 | }; | |||
3248 | ||||
3249 | MOZ_CAN_RUN_SCRIPT static bool | |||
3250 | get_readonlyOctet(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
3251 | { | |||
3252 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3255( cx, "TestExampleInterface" , "readonlyOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3253 | "TestExampleInterface", "readonlyOctet", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3255( cx, "TestExampleInterface" , "readonlyOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3254 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject3255( cx, "TestExampleInterface" , "readonlyOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3255 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3255( cx, "TestExampleInterface" , "readonlyOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3256 | ||||
3257 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3258 | uint8_t result(MOZ_KnownLive(self)(self)->ReadonlyOctet()); | |||
3259 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3259); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3259; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3260 | args.rval().setInt32(int32_t(result)); | |||
3261 | return true; | |||
3262 | } | |||
3263 | ||||
3264 | static const JSJitInfo readonlyOctet_getterinfo = { | |||
3265 | { get_readonlyOctet }, | |||
3266 | { prototypes::id::TestExampleInterface }, | |||
3267 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3268 | JSJitInfo::Getter, | |||
3269 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3270 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
3271 | true, /* isInfallible. False in setters. */ | |||
3272 | false, /* isMovable. Not relevant for setters. */ | |||
3273 | false, /* isEliminatable. Not relevant for setters. */ | |||
3274 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3275 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3276 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3277 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3278 | }; | |||
3279 | ||||
3280 | MOZ_CAN_RUN_SCRIPT static bool | |||
3281 | get_writableOctet(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
3282 | { | |||
3283 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3286( cx, "TestExampleInterface" , "writableOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3284 | "TestExampleInterface", "writableOctet", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3286( cx, "TestExampleInterface" , "writableOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3285 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject3286( cx, "TestExampleInterface" , "writableOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3286 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3286( cx, "TestExampleInterface" , "writableOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3287 | ||||
3288 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3289 | uint8_t result(MOZ_KnownLive(self)(self)->WritableOctet()); | |||
3290 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3290); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3290; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3291 | args.rval().setInt32(int32_t(result)); | |||
3292 | return true; | |||
3293 | } | |||
3294 | ||||
3295 | MOZ_CAN_RUN_SCRIPT static bool | |||
3296 | set_writableOctet(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
3297 | { | |||
3298 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3301( cx, "TestExampleInterface" , "writableOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3299 | "TestExampleInterface", "writableOctet", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3301( cx, "TestExampleInterface" , "writableOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3300 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject3301( cx, "TestExampleInterface" , "writableOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3301 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3301( cx, "TestExampleInterface" , "writableOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3302 | ||||
3303 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3304 | uint8_t arg0; | |||
3305 | if (!ValueToPrimitive<uint8_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
3306 | return false; | |||
3307 | } | |||
3308 | // NOTE: This assert does NOT call the function. | |||
3309 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableOctet(arg0))>, "Should be returning void here"); | |||
3310 | MOZ_KnownLive(self)(self)->SetWritableOctet(arg0); | |||
3311 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3311); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3311; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3312 | ||||
3313 | return true; | |||
3314 | } | |||
3315 | ||||
3316 | static const JSJitInfo writableOctet_getterinfo = { | |||
3317 | { get_writableOctet }, | |||
3318 | { prototypes::id::TestExampleInterface }, | |||
3319 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3320 | JSJitInfo::Getter, | |||
3321 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3322 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
3323 | true, /* isInfallible. False in setters. */ | |||
3324 | false, /* isMovable. Not relevant for setters. */ | |||
3325 | false, /* isEliminatable. Not relevant for setters. */ | |||
3326 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3327 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3328 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3329 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3330 | }; | |||
3331 | static const JSJitInfo writableOctet_setterinfo = { | |||
3332 | { (JSJitGetterOp)set_writableOctet }, | |||
3333 | { prototypes::id::TestExampleInterface }, | |||
3334 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3335 | JSJitInfo::Setter, | |||
3336 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3337 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3338 | false, /* isInfallible. False in setters. */ | |||
3339 | false, /* isMovable. Not relevant for setters. */ | |||
3340 | false, /* isEliminatable. Not relevant for setters. */ | |||
3341 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3342 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3343 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3344 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3345 | }; | |||
3346 | ||||
3347 | MOZ_CAN_RUN_SCRIPT static bool | |||
3348 | passOctet(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3349 | { | |||
3350 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3353( cx, "TestExampleInterface" , "passOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
3351 | "TestExampleInterface", "passOctet", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3353( cx, "TestExampleInterface" , "passOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
3352 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3353( cx, "TestExampleInterface" , "passOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
3353 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3353( cx, "TestExampleInterface" , "passOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
3354 | ||||
3355 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3356 | if (!args.requireAtLeast(cx, "TestExampleInterface.passOctet", 1)) { | |||
3357 | return false; | |||
3358 | } | |||
3359 | uint8_t arg0; | |||
3360 | if (!ValueToPrimitive<uint8_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
3361 | return false; | |||
3362 | } | |||
3363 | // NOTE: This assert does NOT call the function. | |||
3364 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOctet(arg0))>, "Should be returning void here"); | |||
3365 | MOZ_KnownLive(self)(self)->PassOctet(arg0); | |||
3366 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3366); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3366; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3367 | args.rval().setUndefined(); | |||
3368 | return true; | |||
3369 | } | |||
3370 | ||||
3371 | static const JSJitInfo passOctet_methodinfo = { | |||
3372 | { (JSJitGetterOp)passOctet }, | |||
3373 | { prototypes::id::TestExampleInterface }, | |||
3374 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3375 | JSJitInfo::Method, | |||
3376 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3377 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3378 | false, /* isInfallible. False in setters. */ | |||
3379 | false, /* isMovable. Not relevant for setters. */ | |||
3380 | false, /* isEliminatable. Not relevant for setters. */ | |||
3381 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3382 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3383 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3384 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3385 | }; | |||
3386 | ||||
3387 | MOZ_CAN_RUN_SCRIPT static bool | |||
3388 | receiveOctet(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3389 | { | |||
3390 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3393( cx, "TestExampleInterface" , "receiveOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3391 | "TestExampleInterface", "receiveOctet", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3393( cx, "TestExampleInterface" , "receiveOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3392 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3393( cx, "TestExampleInterface" , "receiveOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3393 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3393( cx, "TestExampleInterface" , "receiveOctet", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3394 | ||||
3395 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3396 | uint8_t result(MOZ_KnownLive(self)(self)->ReceiveOctet()); | |||
3397 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3397); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3397; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3398 | args.rval().setInt32(int32_t(result)); | |||
3399 | return true; | |||
3400 | } | |||
3401 | ||||
3402 | static const JSJitInfo receiveOctet_methodinfo = { | |||
3403 | { (JSJitGetterOp)receiveOctet }, | |||
3404 | { prototypes::id::TestExampleInterface }, | |||
3405 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3406 | JSJitInfo::Method, | |||
3407 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3408 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
3409 | true, /* isInfallible. False in setters. */ | |||
3410 | false, /* isMovable. Not relevant for setters. */ | |||
3411 | false, /* isEliminatable. Not relevant for setters. */ | |||
3412 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3413 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3414 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3415 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3416 | }; | |||
3417 | ||||
3418 | MOZ_CAN_RUN_SCRIPT static bool | |||
3419 | passOptionalOctet(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3420 | { | |||
3421 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3424( cx, "TestExampleInterface" , "passOptionalOctet", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3422 | "TestExampleInterface", "passOptionalOctet", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3424( cx, "TestExampleInterface" , "passOptionalOctet", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3423 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3424( cx, "TestExampleInterface" , "passOptionalOctet", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3424 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3424( cx, "TestExampleInterface" , "passOptionalOctet", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3425 | ||||
3426 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3427 | Optional<uint8_t> arg0; | |||
3428 | if (args.hasDefined(0)) { | |||
3429 | arg0.Construct(); | |||
3430 | if (!ValueToPrimitive<uint8_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
3431 | return false; | |||
3432 | } | |||
3433 | } | |||
3434 | // NOTE: This assert does NOT call the function. | |||
3435 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalOctet(Constify(arg0)))>, "Should be returning void here"); | |||
3436 | MOZ_KnownLive(self)(self)->PassOptionalOctet(Constify(arg0)); | |||
3437 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3437); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3437; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3438 | args.rval().setUndefined(); | |||
3439 | return true; | |||
3440 | } | |||
3441 | ||||
3442 | static const JSJitInfo passOptionalOctet_methodinfo = { | |||
3443 | { (JSJitGetterOp)passOptionalOctet }, | |||
3444 | { prototypes::id::TestExampleInterface }, | |||
3445 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3446 | JSJitInfo::Method, | |||
3447 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3448 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3449 | false, /* isInfallible. False in setters. */ | |||
3450 | false, /* isMovable. Not relevant for setters. */ | |||
3451 | false, /* isEliminatable. Not relevant for setters. */ | |||
3452 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3453 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3454 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3455 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3456 | }; | |||
3457 | ||||
3458 | MOZ_CAN_RUN_SCRIPT static bool | |||
3459 | passOptionalOctetWithDefault(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3460 | { | |||
3461 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3464( cx, "TestExampleInterface" , "passOptionalOctetWithDefault", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3462 | "TestExampleInterface", "passOptionalOctetWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3464( cx, "TestExampleInterface" , "passOptionalOctetWithDefault", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3463 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3464( cx, "TestExampleInterface" , "passOptionalOctetWithDefault", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3464 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3464( cx, "TestExampleInterface" , "passOptionalOctetWithDefault", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
3465 | ||||
3466 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3467 | uint8_t arg0; | |||
3468 | if (args.hasDefined(0)) { | |||
3469 | if (!ValueToPrimitive<uint8_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
3470 | return false; | |||
3471 | } | |||
3472 | } else { | |||
3473 | arg0 = 19; | |||
3474 | } | |||
3475 | // NOTE: This assert does NOT call the function. | |||
3476 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalOctetWithDefault(arg0))>, "Should be returning void here"); | |||
3477 | MOZ_KnownLive(self)(self)->PassOptionalOctetWithDefault(arg0); | |||
3478 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3478); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3478; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3479 | args.rval().setUndefined(); | |||
3480 | return true; | |||
3481 | } | |||
3482 | ||||
3483 | static const JSJitInfo passOptionalOctetWithDefault_methodinfo = { | |||
3484 | { (JSJitGetterOp)passOptionalOctetWithDefault }, | |||
3485 | { prototypes::id::TestExampleInterface }, | |||
3486 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3487 | JSJitInfo::Method, | |||
3488 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3489 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3490 | false, /* isInfallible. False in setters. */ | |||
3491 | false, /* isMovable. Not relevant for setters. */ | |||
3492 | false, /* isEliminatable. Not relevant for setters. */ | |||
3493 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3494 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3495 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3496 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3497 | }; | |||
3498 | ||||
3499 | MOZ_CAN_RUN_SCRIPT static bool | |||
3500 | get_readonlyUnsignedShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
3501 | { | |||
3502 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3505( cx, "TestExampleInterface" , "readonlyUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3503 | "TestExampleInterface", "readonlyUnsignedShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3505( cx, "TestExampleInterface" , "readonlyUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3504 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject3505( cx, "TestExampleInterface" , "readonlyUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3505 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3505( cx, "TestExampleInterface" , "readonlyUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3506 | ||||
3507 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3508 | uint16_t result(MOZ_KnownLive(self)(self)->ReadonlyUnsignedShort()); | |||
3509 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3509); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3509; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3510 | args.rval().setInt32(int32_t(result)); | |||
3511 | return true; | |||
3512 | } | |||
3513 | ||||
3514 | static const JSJitInfo readonlyUnsignedShort_getterinfo = { | |||
3515 | { get_readonlyUnsignedShort }, | |||
3516 | { prototypes::id::TestExampleInterface }, | |||
3517 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3518 | JSJitInfo::Getter, | |||
3519 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3520 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
3521 | true, /* isInfallible. False in setters. */ | |||
3522 | false, /* isMovable. Not relevant for setters. */ | |||
3523 | false, /* isEliminatable. Not relevant for setters. */ | |||
3524 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3525 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3526 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3527 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3528 | }; | |||
3529 | ||||
3530 | MOZ_CAN_RUN_SCRIPT static bool | |||
3531 | get_writableUnsignedShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
3532 | { | |||
3533 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3536( cx, "TestExampleInterface" , "writableUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3534 | "TestExampleInterface", "writableUnsignedShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3536( cx, "TestExampleInterface" , "writableUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3535 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject3536( cx, "TestExampleInterface" , "writableUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3536 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3536( cx, "TestExampleInterface" , "writableUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3537 | ||||
3538 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3539 | uint16_t result(MOZ_KnownLive(self)(self)->WritableUnsignedShort()); | |||
3540 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3540); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3540; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3541 | args.rval().setInt32(int32_t(result)); | |||
3542 | return true; | |||
3543 | } | |||
3544 | ||||
3545 | MOZ_CAN_RUN_SCRIPT static bool | |||
3546 | set_writableUnsignedShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
3547 | { | |||
3548 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3551( cx, "TestExampleInterface" , "writableUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3549 | "TestExampleInterface", "writableUnsignedShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3551( cx, "TestExampleInterface" , "writableUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3550 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject3551( cx, "TestExampleInterface" , "writableUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3551 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3551( cx, "TestExampleInterface" , "writableUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3552 | ||||
3553 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3554 | uint16_t arg0; | |||
3555 | if (!ValueToPrimitive<uint16_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
3556 | return false; | |||
3557 | } | |||
3558 | // NOTE: This assert does NOT call the function. | |||
3559 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnsignedShort(arg0))>, "Should be returning void here"); | |||
3560 | MOZ_KnownLive(self)(self)->SetWritableUnsignedShort(arg0); | |||
3561 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3561); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3561; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3562 | ||||
3563 | return true; | |||
3564 | } | |||
3565 | ||||
3566 | static const JSJitInfo writableUnsignedShort_getterinfo = { | |||
3567 | { get_writableUnsignedShort }, | |||
3568 | { prototypes::id::TestExampleInterface }, | |||
3569 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3570 | JSJitInfo::Getter, | |||
3571 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3572 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
3573 | true, /* isInfallible. False in setters. */ | |||
3574 | false, /* isMovable. Not relevant for setters. */ | |||
3575 | false, /* isEliminatable. Not relevant for setters. */ | |||
3576 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3577 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3578 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3579 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3580 | }; | |||
3581 | static const JSJitInfo writableUnsignedShort_setterinfo = { | |||
3582 | { (JSJitGetterOp)set_writableUnsignedShort }, | |||
3583 | { prototypes::id::TestExampleInterface }, | |||
3584 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3585 | JSJitInfo::Setter, | |||
3586 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3587 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3588 | false, /* isInfallible. False in setters. */ | |||
3589 | false, /* isMovable. Not relevant for setters. */ | |||
3590 | false, /* isEliminatable. Not relevant for setters. */ | |||
3591 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3592 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3593 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3594 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3595 | }; | |||
3596 | ||||
3597 | MOZ_CAN_RUN_SCRIPT static bool | |||
3598 | passUnsignedShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3599 | { | |||
3600 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3603( cx, "TestExampleInterface" , "passUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3601 | "TestExampleInterface", "passUnsignedShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3603( cx, "TestExampleInterface" , "passUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3602 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3603( cx, "TestExampleInterface" , "passUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3603 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3603( cx, "TestExampleInterface" , "passUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3604 | ||||
3605 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3606 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnsignedShort", 1)) { | |||
3607 | return false; | |||
3608 | } | |||
3609 | uint16_t arg0; | |||
3610 | if (!ValueToPrimitive<uint16_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
3611 | return false; | |||
3612 | } | |||
3613 | // NOTE: This assert does NOT call the function. | |||
3614 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnsignedShort(arg0))>, "Should be returning void here"); | |||
3615 | MOZ_KnownLive(self)(self)->PassUnsignedShort(arg0); | |||
3616 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3616); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3616; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3617 | args.rval().setUndefined(); | |||
3618 | return true; | |||
3619 | } | |||
3620 | ||||
3621 | static const JSJitInfo passUnsignedShort_methodinfo = { | |||
3622 | { (JSJitGetterOp)passUnsignedShort }, | |||
3623 | { prototypes::id::TestExampleInterface }, | |||
3624 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3625 | JSJitInfo::Method, | |||
3626 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3627 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3628 | false, /* isInfallible. False in setters. */ | |||
3629 | false, /* isMovable. Not relevant for setters. */ | |||
3630 | false, /* isEliminatable. Not relevant for setters. */ | |||
3631 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3632 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3633 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3634 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3635 | }; | |||
3636 | ||||
3637 | MOZ_CAN_RUN_SCRIPT static bool | |||
3638 | receiveUnsignedShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3639 | { | |||
3640 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3643( cx, "TestExampleInterface" , "receiveUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3641 | "TestExampleInterface", "receiveUnsignedShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3643( cx, "TestExampleInterface" , "receiveUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3642 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3643( cx, "TestExampleInterface" , "receiveUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3643 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3643( cx, "TestExampleInterface" , "receiveUnsignedShort", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3644 | ||||
3645 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3646 | uint16_t result(MOZ_KnownLive(self)(self)->ReceiveUnsignedShort()); | |||
3647 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3647); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3647; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3648 | args.rval().setInt32(int32_t(result)); | |||
3649 | return true; | |||
3650 | } | |||
3651 | ||||
3652 | static const JSJitInfo receiveUnsignedShort_methodinfo = { | |||
3653 | { (JSJitGetterOp)receiveUnsignedShort }, | |||
3654 | { prototypes::id::TestExampleInterface }, | |||
3655 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3656 | JSJitInfo::Method, | |||
3657 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3658 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
3659 | true, /* 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 | ||||
3668 | MOZ_CAN_RUN_SCRIPT static bool | |||
3669 | passOptionalUnsignedShort(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3670 | { | |||
3671 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3674( cx, "TestExampleInterface" , "passOptionalUnsignedShort", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3672 | "TestExampleInterface", "passOptionalUnsignedShort", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3674( cx, "TestExampleInterface" , "passOptionalUnsignedShort", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3673 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3674( cx, "TestExampleInterface" , "passOptionalUnsignedShort", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3674 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3674( cx, "TestExampleInterface" , "passOptionalUnsignedShort", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
3675 | ||||
3676 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3677 | Optional<uint16_t> arg0; | |||
3678 | if (args.hasDefined(0)) { | |||
3679 | arg0.Construct(); | |||
3680 | if (!ValueToPrimitive<uint16_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
3681 | return false; | |||
3682 | } | |||
3683 | } | |||
3684 | // NOTE: This assert does NOT call the function. | |||
3685 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnsignedShort(Constify(arg0)))>, "Should be returning void here"); | |||
3686 | MOZ_KnownLive(self)(self)->PassOptionalUnsignedShort(Constify(arg0)); | |||
3687 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3687); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3687; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3688 | args.rval().setUndefined(); | |||
3689 | return true; | |||
3690 | } | |||
3691 | ||||
3692 | static const JSJitInfo passOptionalUnsignedShort_methodinfo = { | |||
3693 | { (JSJitGetterOp)passOptionalUnsignedShort }, | |||
3694 | { prototypes::id::TestExampleInterface }, | |||
3695 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3696 | JSJitInfo::Method, | |||
3697 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3698 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3699 | false, /* isInfallible. False in setters. */ | |||
3700 | false, /* isMovable. Not relevant for setters. */ | |||
3701 | false, /* isEliminatable. Not relevant for setters. */ | |||
3702 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3703 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3704 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3705 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3706 | }; | |||
3707 | ||||
3708 | MOZ_CAN_RUN_SCRIPT static bool | |||
3709 | passOptionalUnsignedShortWithDefault(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3710 | { | |||
3711 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3714( cx, "TestExampleInterface" , "passOptionalUnsignedShortWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3712 | "TestExampleInterface", "passOptionalUnsignedShortWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3714( cx, "TestExampleInterface" , "passOptionalUnsignedShortWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3713 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3714( cx, "TestExampleInterface" , "passOptionalUnsignedShortWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3714 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3714( cx, "TestExampleInterface" , "passOptionalUnsignedShortWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
3715 | ||||
3716 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3717 | uint16_t arg0; | |||
3718 | if (args.hasDefined(0)) { | |||
3719 | if (!ValueToPrimitive<uint16_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
3720 | return false; | |||
3721 | } | |||
3722 | } else { | |||
3723 | arg0 = 2; | |||
3724 | } | |||
3725 | // NOTE: This assert does NOT call the function. | |||
3726 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnsignedShortWithDefault(arg0))>, "Should be returning void here"); | |||
3727 | MOZ_KnownLive(self)(self)->PassOptionalUnsignedShortWithDefault(arg0); | |||
3728 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3728); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3728; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3729 | args.rval().setUndefined(); | |||
3730 | return true; | |||
3731 | } | |||
3732 | ||||
3733 | static const JSJitInfo passOptionalUnsignedShortWithDefault_methodinfo = { | |||
3734 | { (JSJitGetterOp)passOptionalUnsignedShortWithDefault }, | |||
3735 | { prototypes::id::TestExampleInterface }, | |||
3736 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3737 | JSJitInfo::Method, | |||
3738 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3739 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3740 | false, /* isInfallible. False in setters. */ | |||
3741 | false, /* isMovable. Not relevant for setters. */ | |||
3742 | false, /* isEliminatable. Not relevant for setters. */ | |||
3743 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3744 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3745 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3746 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3747 | }; | |||
3748 | ||||
3749 | MOZ_CAN_RUN_SCRIPT static bool | |||
3750 | get_readonlyUnsignedLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
3751 | { | |||
3752 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3755( cx, "TestExampleInterface" , "readonlyUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3753 | "TestExampleInterface", "readonlyUnsignedLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3755( cx, "TestExampleInterface" , "readonlyUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3754 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject3755( cx, "TestExampleInterface" , "readonlyUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3755 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3755( cx, "TestExampleInterface" , "readonlyUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3756 | ||||
3757 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3758 | uint32_t result(MOZ_KnownLive(self)(self)->ReadonlyUnsignedLong()); | |||
3759 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3759); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3759; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3760 | args.rval().setNumber(result); | |||
3761 | return true; | |||
3762 | } | |||
3763 | ||||
3764 | static const JSJitInfo readonlyUnsignedLong_getterinfo = { | |||
3765 | { get_readonlyUnsignedLong }, | |||
3766 | { prototypes::id::TestExampleInterface }, | |||
3767 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3768 | JSJitInfo::Getter, | |||
3769 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3770 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
3771 | true, /* isInfallible. False in setters. */ | |||
3772 | false, /* isMovable. Not relevant for setters. */ | |||
3773 | false, /* isEliminatable. Not relevant for setters. */ | |||
3774 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3775 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3776 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3777 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3778 | }; | |||
3779 | ||||
3780 | MOZ_CAN_RUN_SCRIPT static bool | |||
3781 | get_writableUnsignedLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
3782 | { | |||
3783 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3786( cx, "TestExampleInterface" , "writableUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3784 | "TestExampleInterface", "writableUnsignedLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3786( cx, "TestExampleInterface" , "writableUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3785 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject3786( cx, "TestExampleInterface" , "writableUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3786 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3786( cx, "TestExampleInterface" , "writableUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3787 | ||||
3788 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3789 | uint32_t result(MOZ_KnownLive(self)(self)->WritableUnsignedLong()); | |||
3790 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3790); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3790; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3791 | args.rval().setNumber(result); | |||
3792 | return true; | |||
3793 | } | |||
3794 | ||||
3795 | MOZ_CAN_RUN_SCRIPT static bool | |||
3796 | set_writableUnsignedLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
3797 | { | |||
3798 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3801( cx, "TestExampleInterface" , "writableUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3799 | "TestExampleInterface", "writableUnsignedLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3801( cx, "TestExampleInterface" , "writableUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3800 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject3801( cx, "TestExampleInterface" , "writableUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3801 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3801( cx, "TestExampleInterface" , "writableUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3802 | ||||
3803 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3804 | uint32_t arg0; | |||
3805 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
3806 | return false; | |||
3807 | } | |||
3808 | // NOTE: This assert does NOT call the function. | |||
3809 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnsignedLong(arg0))>, "Should be returning void here"); | |||
3810 | MOZ_KnownLive(self)(self)->SetWritableUnsignedLong(arg0); | |||
3811 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3811); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3811; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3812 | ||||
3813 | return true; | |||
3814 | } | |||
3815 | ||||
3816 | static const JSJitInfo writableUnsignedLong_getterinfo = { | |||
3817 | { get_writableUnsignedLong }, | |||
3818 | { prototypes::id::TestExampleInterface }, | |||
3819 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3820 | JSJitInfo::Getter, | |||
3821 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3822 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
3823 | true, /* isInfallible. False in setters. */ | |||
3824 | false, /* isMovable. Not relevant for setters. */ | |||
3825 | false, /* isEliminatable. Not relevant for setters. */ | |||
3826 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3827 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3828 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3829 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3830 | }; | |||
3831 | static const JSJitInfo writableUnsignedLong_setterinfo = { | |||
3832 | { (JSJitGetterOp)set_writableUnsignedLong }, | |||
3833 | { prototypes::id::TestExampleInterface }, | |||
3834 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3835 | JSJitInfo::Setter, | |||
3836 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3837 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3838 | false, /* isInfallible. False in setters. */ | |||
3839 | false, /* isMovable. Not relevant for setters. */ | |||
3840 | false, /* isEliminatable. Not relevant for setters. */ | |||
3841 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3842 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3843 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3844 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3845 | }; | |||
3846 | ||||
3847 | MOZ_CAN_RUN_SCRIPT static bool | |||
3848 | passUnsignedLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3849 | { | |||
3850 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3853( cx, "TestExampleInterface" , "passUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3851 | "TestExampleInterface", "passUnsignedLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3853( cx, "TestExampleInterface" , "passUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3852 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3853( cx, "TestExampleInterface" , "passUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3853 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3853( cx, "TestExampleInterface" , "passUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3854 | ||||
3855 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3856 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnsignedLong", 1)) { | |||
3857 | return false; | |||
3858 | } | |||
3859 | uint32_t arg0; | |||
3860 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
3861 | return false; | |||
3862 | } | |||
3863 | // NOTE: This assert does NOT call the function. | |||
3864 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnsignedLong(arg0))>, "Should be returning void here"); | |||
3865 | MOZ_KnownLive(self)(self)->PassUnsignedLong(arg0); | |||
3866 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3866); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3866; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3867 | args.rval().setUndefined(); | |||
3868 | return true; | |||
3869 | } | |||
3870 | ||||
3871 | static const JSJitInfo passUnsignedLong_methodinfo = { | |||
3872 | { (JSJitGetterOp)passUnsignedLong }, | |||
3873 | { prototypes::id::TestExampleInterface }, | |||
3874 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3875 | JSJitInfo::Method, | |||
3876 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3877 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3878 | false, /* isInfallible. False in setters. */ | |||
3879 | false, /* isMovable. Not relevant for setters. */ | |||
3880 | false, /* isEliminatable. Not relevant for setters. */ | |||
3881 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3882 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3883 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3884 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3885 | }; | |||
3886 | ||||
3887 | MOZ_CAN_RUN_SCRIPT static bool | |||
3888 | receiveUnsignedLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3889 | { | |||
3890 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3893( cx, "TestExampleInterface" , "receiveUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3891 | "TestExampleInterface", "receiveUnsignedLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3893( cx, "TestExampleInterface" , "receiveUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3892 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3893( cx, "TestExampleInterface" , "receiveUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
3893 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3893( cx, "TestExampleInterface" , "receiveUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
3894 | ||||
3895 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3896 | uint32_t result(MOZ_KnownLive(self)(self)->ReceiveUnsignedLong()); | |||
3897 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3897); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3897; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3898 | args.rval().setNumber(result); | |||
3899 | return true; | |||
3900 | } | |||
3901 | ||||
3902 | static const JSJitInfo receiveUnsignedLong_methodinfo = { | |||
3903 | { (JSJitGetterOp)receiveUnsignedLong }, | |||
3904 | { prototypes::id::TestExampleInterface }, | |||
3905 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3906 | JSJitInfo::Method, | |||
3907 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3908 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
3909 | true, /* isInfallible. False in setters. */ | |||
3910 | false, /* isMovable. Not relevant for setters. */ | |||
3911 | false, /* isEliminatable. Not relevant for setters. */ | |||
3912 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3913 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3914 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3915 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3916 | }; | |||
3917 | ||||
3918 | MOZ_CAN_RUN_SCRIPT static bool | |||
3919 | passOptionalUnsignedLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3920 | { | |||
3921 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3924( cx, "TestExampleInterface" , "passOptionalUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3922 | "TestExampleInterface", "passOptionalUnsignedLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3924( cx, "TestExampleInterface" , "passOptionalUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3923 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3924( cx, "TestExampleInterface" , "passOptionalUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3924 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3924( cx, "TestExampleInterface" , "passOptionalUnsignedLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
3925 | ||||
3926 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3927 | Optional<uint32_t> arg0; | |||
3928 | if (args.hasDefined(0)) { | |||
3929 | arg0.Construct(); | |||
3930 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
3931 | return false; | |||
3932 | } | |||
3933 | } | |||
3934 | // NOTE: This assert does NOT call the function. | |||
3935 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnsignedLong(Constify(arg0)))>, "Should be returning void here"); | |||
3936 | MOZ_KnownLive(self)(self)->PassOptionalUnsignedLong(Constify(arg0)); | |||
3937 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3937); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3937; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3938 | args.rval().setUndefined(); | |||
3939 | return true; | |||
3940 | } | |||
3941 | ||||
3942 | static const JSJitInfo passOptionalUnsignedLong_methodinfo = { | |||
3943 | { (JSJitGetterOp)passOptionalUnsignedLong }, | |||
3944 | { prototypes::id::TestExampleInterface }, | |||
3945 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3946 | JSJitInfo::Method, | |||
3947 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3948 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3949 | false, /* isInfallible. False in setters. */ | |||
3950 | false, /* isMovable. Not relevant for setters. */ | |||
3951 | false, /* isEliminatable. Not relevant for setters. */ | |||
3952 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3953 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3954 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3955 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3956 | }; | |||
3957 | ||||
3958 | MOZ_CAN_RUN_SCRIPT static bool | |||
3959 | passOptionalUnsignedLongWithDefault(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
3960 | { | |||
3961 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject3964( cx, "TestExampleInterface" , "passOptionalUnsignedLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3962 | "TestExampleInterface", "passOptionalUnsignedLongWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject3964( cx, "TestExampleInterface" , "passOptionalUnsignedLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3963 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject3964( cx, "TestExampleInterface" , "passOptionalUnsignedLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
3964 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject3964( cx, "TestExampleInterface" , "passOptionalUnsignedLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
3965 | ||||
3966 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
3967 | uint32_t arg0; | |||
3968 | if (args.hasDefined(0)) { | |||
3969 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
3970 | return false; | |||
3971 | } | |||
3972 | } else { | |||
3973 | arg0 = 6U; | |||
3974 | } | |||
3975 | // NOTE: This assert does NOT call the function. | |||
3976 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnsignedLongWithDefault(arg0))>, "Should be returning void here"); | |||
3977 | MOZ_KnownLive(self)(self)->PassOptionalUnsignedLongWithDefault(arg0); | |||
3978 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 3978); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 3978; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
3979 | args.rval().setUndefined(); | |||
3980 | return true; | |||
3981 | } | |||
3982 | ||||
3983 | static const JSJitInfo passOptionalUnsignedLongWithDefault_methodinfo = { | |||
3984 | { (JSJitGetterOp)passOptionalUnsignedLongWithDefault }, | |||
3985 | { prototypes::id::TestExampleInterface }, | |||
3986 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
3987 | JSJitInfo::Method, | |||
3988 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
3989 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
3990 | false, /* isInfallible. False in setters. */ | |||
3991 | false, /* isMovable. Not relevant for setters. */ | |||
3992 | false, /* isEliminatable. Not relevant for setters. */ | |||
3993 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
3994 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
3995 | false, /* isTypedMethod. Only relevant for methods. */ | |||
3996 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
3997 | }; | |||
3998 | ||||
3999 | MOZ_CAN_RUN_SCRIPT static bool | |||
4000 | get_readonlyUnsignedLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4001 | { | |||
4002 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4005( cx, "TestExampleInterface" , "readonlyUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4003 | "TestExampleInterface", "readonlyUnsignedLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4005( cx, "TestExampleInterface" , "readonlyUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4004 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4005( cx, "TestExampleInterface" , "readonlyUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4005 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4005( cx, "TestExampleInterface" , "readonlyUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4006 | ||||
4007 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4008 | uint64_t result(MOZ_KnownLive(self)(self)->ReadonlyUnsignedLongLong()); | |||
4009 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4009); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4009; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4010 | args.rval().set(JS_NumberValue(double(result))); | |||
4011 | return true; | |||
4012 | } | |||
4013 | ||||
4014 | static const JSJitInfo readonlyUnsignedLongLong_getterinfo = { | |||
4015 | { get_readonlyUnsignedLongLong }, | |||
4016 | { prototypes::id::TestExampleInterface }, | |||
4017 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4018 | JSJitInfo::Getter, | |||
4019 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4020 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
4021 | true, /* isInfallible. False in setters. */ | |||
4022 | false, /* isMovable. Not relevant for setters. */ | |||
4023 | false, /* isEliminatable. Not relevant for setters. */ | |||
4024 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4025 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4026 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4027 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4028 | }; | |||
4029 | ||||
4030 | MOZ_CAN_RUN_SCRIPT static bool | |||
4031 | get_writableUnsignedLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4032 | { | |||
4033 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4036( cx, "TestExampleInterface" , "writableUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4034 | "TestExampleInterface", "writableUnsignedLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4036( cx, "TestExampleInterface" , "writableUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4035 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4036( cx, "TestExampleInterface" , "writableUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4036 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4036( cx, "TestExampleInterface" , "writableUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4037 | ||||
4038 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4039 | uint64_t result(MOZ_KnownLive(self)(self)->WritableUnsignedLongLong()); | |||
4040 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4040); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4040; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4041 | args.rval().set(JS_NumberValue(double(result))); | |||
4042 | return true; | |||
4043 | } | |||
4044 | ||||
4045 | MOZ_CAN_RUN_SCRIPT static bool | |||
4046 | set_writableUnsignedLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4047 | { | |||
4048 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4051( cx, "TestExampleInterface" , "writableUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4049 | "TestExampleInterface", "writableUnsignedLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4051( cx, "TestExampleInterface" , "writableUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4050 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4051( cx, "TestExampleInterface" , "writableUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4051 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4051( cx, "TestExampleInterface" , "writableUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4052 | ||||
4053 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4054 | uint64_t arg0; | |||
4055 | if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
4056 | return false; | |||
4057 | } | |||
4058 | // NOTE: This assert does NOT call the function. | |||
4059 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnsignedLongLong(arg0))>, "Should be returning void here"); | |||
4060 | MOZ_KnownLive(self)(self)->SetWritableUnsignedLongLong(arg0); | |||
4061 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4061); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4061; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4062 | ||||
4063 | return true; | |||
4064 | } | |||
4065 | ||||
4066 | static const JSJitInfo writableUnsignedLongLong_getterinfo = { | |||
4067 | { get_writableUnsignedLongLong }, | |||
4068 | { prototypes::id::TestExampleInterface }, | |||
4069 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4070 | JSJitInfo::Getter, | |||
4071 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4072 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
4073 | true, /* isInfallible. False in setters. */ | |||
4074 | false, /* isMovable. Not relevant for setters. */ | |||
4075 | false, /* isEliminatable. Not relevant for setters. */ | |||
4076 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4077 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4078 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4079 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4080 | }; | |||
4081 | static const JSJitInfo writableUnsignedLongLong_setterinfo = { | |||
4082 | { (JSJitGetterOp)set_writableUnsignedLongLong }, | |||
4083 | { prototypes::id::TestExampleInterface }, | |||
4084 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4085 | JSJitInfo::Setter, | |||
4086 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4087 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4088 | false, /* isInfallible. False in setters. */ | |||
4089 | false, /* isMovable. Not relevant for setters. */ | |||
4090 | false, /* isEliminatable. Not relevant for setters. */ | |||
4091 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4092 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4093 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4094 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4095 | }; | |||
4096 | ||||
4097 | MOZ_CAN_RUN_SCRIPT static bool | |||
4098 | passUnsignedLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
4099 | { | |||
4100 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4103( cx, "TestExampleInterface" , "passUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4101 | "TestExampleInterface", "passUnsignedLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4103( cx, "TestExampleInterface" , "passUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4102 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject4103( cx, "TestExampleInterface" , "passUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4103 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4103( cx, "TestExampleInterface" , "passUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4104 | ||||
4105 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4106 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnsignedLongLong", 1)) { | |||
4107 | return false; | |||
4108 | } | |||
4109 | uint64_t arg0; | |||
4110 | if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
4111 | return false; | |||
4112 | } | |||
4113 | // NOTE: This assert does NOT call the function. | |||
4114 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnsignedLongLong(arg0))>, "Should be returning void here"); | |||
4115 | MOZ_KnownLive(self)(self)->PassUnsignedLongLong(arg0); | |||
4116 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4116); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4116; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4117 | args.rval().setUndefined(); | |||
4118 | return true; | |||
4119 | } | |||
4120 | ||||
4121 | static const JSJitInfo passUnsignedLongLong_methodinfo = { | |||
4122 | { (JSJitGetterOp)passUnsignedLongLong }, | |||
4123 | { prototypes::id::TestExampleInterface }, | |||
4124 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4125 | JSJitInfo::Method, | |||
4126 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4127 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4128 | false, /* isInfallible. False in setters. */ | |||
4129 | false, /* isMovable. Not relevant for setters. */ | |||
4130 | false, /* isEliminatable. Not relevant for setters. */ | |||
4131 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4132 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4133 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4134 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4135 | }; | |||
4136 | ||||
4137 | MOZ_CAN_RUN_SCRIPT static bool | |||
4138 | receiveUnsignedLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
4139 | { | |||
4140 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4143( cx, "TestExampleInterface" , "receiveUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4141 | "TestExampleInterface", "receiveUnsignedLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4143( cx, "TestExampleInterface" , "receiveUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4142 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject4143( cx, "TestExampleInterface" , "receiveUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4143 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4143( cx, "TestExampleInterface" , "receiveUnsignedLongLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4144 | ||||
4145 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4146 | uint64_t result(MOZ_KnownLive(self)(self)->ReceiveUnsignedLongLong()); | |||
4147 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4147); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4147; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4148 | args.rval().set(JS_NumberValue(double(result))); | |||
4149 | return true; | |||
4150 | } | |||
4151 | ||||
4152 | static const JSJitInfo receiveUnsignedLongLong_methodinfo = { | |||
4153 | { (JSJitGetterOp)receiveUnsignedLongLong }, | |||
4154 | { prototypes::id::TestExampleInterface }, | |||
4155 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4156 | JSJitInfo::Method, | |||
4157 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4158 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
4159 | true, /* isInfallible. False in setters. */ | |||
4160 | false, /* isMovable. Not relevant for setters. */ | |||
4161 | false, /* isEliminatable. Not relevant for setters. */ | |||
4162 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4163 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4164 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4165 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4166 | }; | |||
4167 | ||||
4168 | MOZ_CAN_RUN_SCRIPT static bool | |||
4169 | passOptionalUnsignedLongLong(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
4170 | { | |||
4171 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4174( cx, "TestExampleInterface" , "passOptionalUnsignedLongLong", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4172 | "TestExampleInterface", "passOptionalUnsignedLongLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4174( cx, "TestExampleInterface" , "passOptionalUnsignedLongLong", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4173 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject4174( cx, "TestExampleInterface" , "passOptionalUnsignedLongLong", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4174 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4174( cx, "TestExampleInterface" , "passOptionalUnsignedLongLong", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4175 | ||||
4176 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4177 | Optional<uint64_t> arg0; | |||
4178 | if (args.hasDefined(0)) { | |||
4179 | arg0.Construct(); | |||
4180 | if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
4181 | return false; | |||
4182 | } | |||
4183 | } | |||
4184 | // NOTE: This assert does NOT call the function. | |||
4185 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnsignedLongLong(Constify(arg0)))>, "Should be returning void here"); | |||
4186 | MOZ_KnownLive(self)(self)->PassOptionalUnsignedLongLong(Constify(arg0)); | |||
4187 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4187); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4187; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4188 | args.rval().setUndefined(); | |||
4189 | return true; | |||
4190 | } | |||
4191 | ||||
4192 | static const JSJitInfo passOptionalUnsignedLongLong_methodinfo = { | |||
4193 | { (JSJitGetterOp)passOptionalUnsignedLongLong }, | |||
4194 | { prototypes::id::TestExampleInterface }, | |||
4195 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4196 | JSJitInfo::Method, | |||
4197 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4198 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4199 | false, /* isInfallible. False in setters. */ | |||
4200 | false, /* isMovable. Not relevant for setters. */ | |||
4201 | false, /* isEliminatable. Not relevant for setters. */ | |||
4202 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4203 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4204 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4205 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4206 | }; | |||
4207 | ||||
4208 | MOZ_CAN_RUN_SCRIPT static bool | |||
4209 | passOptionalUnsignedLongLongWithDefault(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
4210 | { | |||
4211 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4214( cx, "TestExampleInterface" , "passOptionalUnsignedLongLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4212 | "TestExampleInterface", "passOptionalUnsignedLongLongWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4214( cx, "TestExampleInterface" , "passOptionalUnsignedLongLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4213 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject4214( cx, "TestExampleInterface" , "passOptionalUnsignedLongLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4214 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4214( cx, "TestExampleInterface" , "passOptionalUnsignedLongLongWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4215 | ||||
4216 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4217 | uint64_t arg0; | |||
4218 | if (args.hasDefined(0)) { | |||
4219 | if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
4220 | return false; | |||
4221 | } | |||
4222 | } else { | |||
4223 | arg0 = 17ULL; | |||
4224 | } | |||
4225 | // NOTE: This assert does NOT call the function. | |||
4226 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnsignedLongLongWithDefault(arg0))>, "Should be returning void here"); | |||
4227 | MOZ_KnownLive(self)(self)->PassOptionalUnsignedLongLongWithDefault(arg0); | |||
4228 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4228); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4228; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4229 | args.rval().setUndefined(); | |||
4230 | return true; | |||
4231 | } | |||
4232 | ||||
4233 | static const JSJitInfo passOptionalUnsignedLongLongWithDefault_methodinfo = { | |||
4234 | { (JSJitGetterOp)passOptionalUnsignedLongLongWithDefault }, | |||
4235 | { prototypes::id::TestExampleInterface }, | |||
4236 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4237 | JSJitInfo::Method, | |||
4238 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4239 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4240 | false, /* isInfallible. False in setters. */ | |||
4241 | false, /* isMovable. Not relevant for setters. */ | |||
4242 | false, /* isEliminatable. Not relevant for setters. */ | |||
4243 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4244 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4245 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4246 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4247 | }; | |||
4248 | ||||
4249 | MOZ_CAN_RUN_SCRIPT static bool | |||
4250 | get_writableFloat(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4251 | { | |||
4252 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4255( cx, "TestExampleInterface" , "writableFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4253 | "TestExampleInterface", "writableFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4255( cx, "TestExampleInterface" , "writableFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4254 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4255( cx, "TestExampleInterface" , "writableFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4255 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4255( cx, "TestExampleInterface" , "writableFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4256 | ||||
4257 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4258 | float result(MOZ_KnownLive(self)(self)->WritableFloat()); | |||
4259 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4259); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4259; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4260 | args.rval().set(JS_NumberValue(double(result))); | |||
4261 | return true; | |||
4262 | } | |||
4263 | ||||
4264 | MOZ_CAN_RUN_SCRIPT static bool | |||
4265 | set_writableFloat(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4266 | { | |||
4267 | BindingCallContext cx(cx_, "TestExampleInterface.writableFloat setter"); | |||
4268 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4271( cx, "TestExampleInterface" , "writableFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4269 | "TestExampleInterface", "writableFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4271( cx, "TestExampleInterface" , "writableFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4270 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4271( cx, "TestExampleInterface" , "writableFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4271 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4271( cx, "TestExampleInterface" , "writableFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4272 | ||||
4273 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4274 | float arg0; | |||
4275 | if (!ValueToPrimitive<float, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
4276 | return false; | |||
4277 | } else if (!std::isfinite(arg0)) { | |||
4278 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Value being assigned"); | |||
4279 | return false; | |||
4280 | } | |||
4281 | // NOTE: This assert does NOT call the function. | |||
4282 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableFloat(arg0))>, "Should be returning void here"); | |||
4283 | MOZ_KnownLive(self)(self)->SetWritableFloat(arg0); | |||
4284 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4284); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4284; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4285 | ||||
4286 | return true; | |||
4287 | } | |||
4288 | ||||
4289 | static const JSJitInfo writableFloat_getterinfo = { | |||
4290 | { get_writableFloat }, | |||
4291 | { prototypes::id::TestExampleInterface }, | |||
4292 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4293 | JSJitInfo::Getter, | |||
4294 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4295 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
4296 | true, /* isInfallible. False in setters. */ | |||
4297 | false, /* isMovable. Not relevant for setters. */ | |||
4298 | false, /* isEliminatable. Not relevant for setters. */ | |||
4299 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4300 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4301 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4302 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4303 | }; | |||
4304 | static const JSJitInfo writableFloat_setterinfo = { | |||
4305 | { (JSJitGetterOp)set_writableFloat }, | |||
4306 | { prototypes::id::TestExampleInterface }, | |||
4307 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4308 | JSJitInfo::Setter, | |||
4309 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4310 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4311 | false, /* isInfallible. False in setters. */ | |||
4312 | false, /* isMovable. Not relevant for setters. */ | |||
4313 | false, /* isEliminatable. Not relevant for setters. */ | |||
4314 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4315 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4316 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4317 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4318 | }; | |||
4319 | ||||
4320 | MOZ_CAN_RUN_SCRIPT static bool | |||
4321 | get_writableUnrestrictedFloat(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4322 | { | |||
4323 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4326( cx, "TestExampleInterface" , "writableUnrestrictedFloat", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4324 | "TestExampleInterface", "writableUnrestrictedFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4326( cx, "TestExampleInterface" , "writableUnrestrictedFloat", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4325 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4326( cx, "TestExampleInterface" , "writableUnrestrictedFloat", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4326 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4326( cx, "TestExampleInterface" , "writableUnrestrictedFloat", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4327 | ||||
4328 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4329 | float result(MOZ_KnownLive(self)(self)->WritableUnrestrictedFloat()); | |||
4330 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4330); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4330; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4331 | args.rval().set(JS_NumberValue(double(result))); | |||
4332 | return true; | |||
4333 | } | |||
4334 | ||||
4335 | MOZ_CAN_RUN_SCRIPT static bool | |||
4336 | set_writableUnrestrictedFloat(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4337 | { | |||
4338 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4341( cx, "TestExampleInterface" , "writableUnrestrictedFloat", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4339 | "TestExampleInterface", "writableUnrestrictedFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4341( cx, "TestExampleInterface" , "writableUnrestrictedFloat", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4340 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4341( cx, "TestExampleInterface" , "writableUnrestrictedFloat", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4341 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4341( cx, "TestExampleInterface" , "writableUnrestrictedFloat", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4342 | ||||
4343 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4344 | float arg0; | |||
4345 | if (!ValueToPrimitive<float, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
4346 | return false; | |||
4347 | } | |||
4348 | // NOTE: This assert does NOT call the function. | |||
4349 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnrestrictedFloat(arg0))>, "Should be returning void here"); | |||
4350 | MOZ_KnownLive(self)(self)->SetWritableUnrestrictedFloat(arg0); | |||
4351 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4351); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4351; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4352 | ||||
4353 | return true; | |||
4354 | } | |||
4355 | ||||
4356 | static const JSJitInfo writableUnrestrictedFloat_getterinfo = { | |||
4357 | { get_writableUnrestrictedFloat }, | |||
4358 | { prototypes::id::TestExampleInterface }, | |||
4359 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4360 | JSJitInfo::Getter, | |||
4361 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4362 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
4363 | true, /* isInfallible. False in setters. */ | |||
4364 | false, /* isMovable. Not relevant for setters. */ | |||
4365 | false, /* isEliminatable. Not relevant for setters. */ | |||
4366 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4367 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4368 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4369 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4370 | }; | |||
4371 | static const JSJitInfo writableUnrestrictedFloat_setterinfo = { | |||
4372 | { (JSJitGetterOp)set_writableUnrestrictedFloat }, | |||
4373 | { prototypes::id::TestExampleInterface }, | |||
4374 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4375 | JSJitInfo::Setter, | |||
4376 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4377 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4378 | false, /* isInfallible. False in setters. */ | |||
4379 | false, /* isMovable. Not relevant for setters. */ | |||
4380 | false, /* isEliminatable. Not relevant for setters. */ | |||
4381 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4382 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4383 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4384 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4385 | }; | |||
4386 | ||||
4387 | MOZ_CAN_RUN_SCRIPT static bool | |||
4388 | get_writableNullableFloat(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4389 | { | |||
4390 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4393( cx, "TestExampleInterface" , "writableNullableFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4391 | "TestExampleInterface", "writableNullableFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4393( cx, "TestExampleInterface" , "writableNullableFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4392 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4393( cx, "TestExampleInterface" , "writableNullableFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4393 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4393( cx, "TestExampleInterface" , "writableNullableFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4394 | ||||
4395 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4396 | Nullable<float> result(MOZ_KnownLive(self)(self)->GetWritableNullableFloat()); | |||
4397 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4397); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4397; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4398 | if (result.IsNull()) { | |||
4399 | args.rval().setNull(); | |||
4400 | return true; | |||
4401 | } | |||
4402 | args.rval().set(JS_NumberValue(double(result.Value()))); | |||
4403 | return true; | |||
4404 | } | |||
4405 | ||||
4406 | MOZ_CAN_RUN_SCRIPT static bool | |||
4407 | set_writableNullableFloat(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4408 | { | |||
4409 | BindingCallContext cx(cx_, "TestExampleInterface.writableNullableFloat setter"); | |||
4410 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4413( cx, "TestExampleInterface" , "writableNullableFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4411 | "TestExampleInterface", "writableNullableFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4413( cx, "TestExampleInterface" , "writableNullableFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4412 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4413( cx, "TestExampleInterface" , "writableNullableFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4413 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4413( cx, "TestExampleInterface" , "writableNullableFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4414 | ||||
4415 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4416 | Nullable<float> arg0; | |||
4417 | if (args[0].isNullOrUndefined()) { | |||
4418 | arg0.SetNull(); | |||
4419 | } else if (!ValueToPrimitive<float, eDefault>(cx, args[0], "Value being assigned", &arg0.SetValue())) { | |||
4420 | return false; | |||
4421 | } else if (!std::isfinite(arg0.Value())) { | |||
4422 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Value being assigned"); | |||
4423 | return false; | |||
4424 | } | |||
4425 | // NOTE: This assert does NOT call the function. | |||
4426 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableNullableFloat(Constify(arg0)))>, "Should be returning void here"); | |||
4427 | MOZ_KnownLive(self)(self)->SetWritableNullableFloat(Constify(arg0)); | |||
4428 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4428); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4428; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4429 | ||||
4430 | return true; | |||
4431 | } | |||
4432 | ||||
4433 | static const JSJitInfo writableNullableFloat_getterinfo = { | |||
4434 | { get_writableNullableFloat }, | |||
4435 | { prototypes::id::TestExampleInterface }, | |||
4436 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4437 | JSJitInfo::Getter, | |||
4438 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4439 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
4440 | true, /* isInfallible. False in setters. */ | |||
4441 | false, /* isMovable. Not relevant for setters. */ | |||
4442 | false, /* isEliminatable. Not relevant for setters. */ | |||
4443 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4444 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4445 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4446 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4447 | }; | |||
4448 | static const JSJitInfo writableNullableFloat_setterinfo = { | |||
4449 | { (JSJitGetterOp)set_writableNullableFloat }, | |||
4450 | { prototypes::id::TestExampleInterface }, | |||
4451 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4452 | JSJitInfo::Setter, | |||
4453 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4454 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4455 | false, /* isInfallible. False in setters. */ | |||
4456 | false, /* isMovable. Not relevant for setters. */ | |||
4457 | false, /* isEliminatable. Not relevant for setters. */ | |||
4458 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4459 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4460 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4461 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4462 | }; | |||
4463 | ||||
4464 | MOZ_CAN_RUN_SCRIPT static bool | |||
4465 | get_writableNullableUnrestrictedFloat(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4466 | { | |||
4467 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4470( cx, "TestExampleInterface" , "writableNullableUnrestrictedFloat", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4468 | "TestExampleInterface", "writableNullableUnrestrictedFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4470( cx, "TestExampleInterface" , "writableNullableUnrestrictedFloat", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4469 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4470( cx, "TestExampleInterface" , "writableNullableUnrestrictedFloat", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4470 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4470( cx, "TestExampleInterface" , "writableNullableUnrestrictedFloat", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4471 | ||||
4472 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4473 | Nullable<float> result(MOZ_KnownLive(self)(self)->GetWritableNullableUnrestrictedFloat()); | |||
4474 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4474); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4474; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4475 | if (result.IsNull()) { | |||
4476 | args.rval().setNull(); | |||
4477 | return true; | |||
4478 | } | |||
4479 | args.rval().set(JS_NumberValue(double(result.Value()))); | |||
4480 | return true; | |||
4481 | } | |||
4482 | ||||
4483 | MOZ_CAN_RUN_SCRIPT static bool | |||
4484 | set_writableNullableUnrestrictedFloat(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4485 | { | |||
4486 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4489( cx, "TestExampleInterface" , "writableNullableUnrestrictedFloat", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4487 | "TestExampleInterface", "writableNullableUnrestrictedFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4489( cx, "TestExampleInterface" , "writableNullableUnrestrictedFloat", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4488 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4489( cx, "TestExampleInterface" , "writableNullableUnrestrictedFloat", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4489 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4489( cx, "TestExampleInterface" , "writableNullableUnrestrictedFloat", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4490 | ||||
4491 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4492 | Nullable<float> arg0; | |||
4493 | if (args[0].isNullOrUndefined()) { | |||
4494 | arg0.SetNull(); | |||
4495 | } else if (!ValueToPrimitive<float, eDefault>(cx, args[0], "Value being assigned", &arg0.SetValue())) { | |||
4496 | return false; | |||
4497 | } | |||
4498 | // NOTE: This assert does NOT call the function. | |||
4499 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableNullableUnrestrictedFloat(Constify(arg0)))>, "Should be returning void here"); | |||
4500 | MOZ_KnownLive(self)(self)->SetWritableNullableUnrestrictedFloat(Constify(arg0)); | |||
4501 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4501); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4501; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4502 | ||||
4503 | return true; | |||
4504 | } | |||
4505 | ||||
4506 | static const JSJitInfo writableNullableUnrestrictedFloat_getterinfo = { | |||
4507 | { get_writableNullableUnrestrictedFloat }, | |||
4508 | { prototypes::id::TestExampleInterface }, | |||
4509 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4510 | JSJitInfo::Getter, | |||
4511 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4512 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
4513 | true, /* isInfallible. False in setters. */ | |||
4514 | false, /* isMovable. Not relevant for setters. */ | |||
4515 | false, /* isEliminatable. Not relevant for setters. */ | |||
4516 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4517 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4518 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4519 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4520 | }; | |||
4521 | static const JSJitInfo writableNullableUnrestrictedFloat_setterinfo = { | |||
4522 | { (JSJitGetterOp)set_writableNullableUnrestrictedFloat }, | |||
4523 | { prototypes::id::TestExampleInterface }, | |||
4524 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4525 | JSJitInfo::Setter, | |||
4526 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4527 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4528 | false, /* isInfallible. False in setters. */ | |||
4529 | false, /* isMovable. Not relevant for setters. */ | |||
4530 | false, /* isEliminatable. Not relevant for setters. */ | |||
4531 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4532 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4533 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4534 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4535 | }; | |||
4536 | ||||
4537 | MOZ_CAN_RUN_SCRIPT static bool | |||
4538 | get_writableDouble(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4539 | { | |||
4540 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4543( cx, "TestExampleInterface" , "writableDouble", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4541 | "TestExampleInterface", "writableDouble", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4543( cx, "TestExampleInterface" , "writableDouble", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4542 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4543( cx, "TestExampleInterface" , "writableDouble", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4543 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4543( cx, "TestExampleInterface" , "writableDouble", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4544 | ||||
4545 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4546 | double result(MOZ_KnownLive(self)(self)->WritableDouble()); | |||
4547 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4547); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4547; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4548 | args.rval().set(JS_NumberValue(double(result))); | |||
4549 | return true; | |||
4550 | } | |||
4551 | ||||
4552 | MOZ_CAN_RUN_SCRIPT static bool | |||
4553 | set_writableDouble(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4554 | { | |||
4555 | BindingCallContext cx(cx_, "TestExampleInterface.writableDouble setter"); | |||
4556 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4559( cx, "TestExampleInterface" , "writableDouble", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4557 | "TestExampleInterface", "writableDouble", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4559( cx, "TestExampleInterface" , "writableDouble", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4558 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4559( cx, "TestExampleInterface" , "writableDouble", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4559 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4559( cx, "TestExampleInterface" , "writableDouble", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4560 | ||||
4561 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4562 | double arg0; | |||
4563 | if (!ValueToPrimitive<double, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
4564 | return false; | |||
4565 | } else if (!std::isfinite(arg0)) { | |||
4566 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Value being assigned"); | |||
4567 | return false; | |||
4568 | } | |||
4569 | // NOTE: This assert does NOT call the function. | |||
4570 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableDouble(arg0))>, "Should be returning void here"); | |||
4571 | MOZ_KnownLive(self)(self)->SetWritableDouble(arg0); | |||
4572 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4572); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4572; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4573 | ||||
4574 | return true; | |||
4575 | } | |||
4576 | ||||
4577 | static const JSJitInfo writableDouble_getterinfo = { | |||
4578 | { get_writableDouble }, | |||
4579 | { prototypes::id::TestExampleInterface }, | |||
4580 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4581 | JSJitInfo::Getter, | |||
4582 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4583 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
4584 | true, /* isInfallible. False in setters. */ | |||
4585 | false, /* isMovable. Not relevant for setters. */ | |||
4586 | false, /* isEliminatable. Not relevant for setters. */ | |||
4587 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4588 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4589 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4590 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4591 | }; | |||
4592 | static const JSJitInfo writableDouble_setterinfo = { | |||
4593 | { (JSJitGetterOp)set_writableDouble }, | |||
4594 | { prototypes::id::TestExampleInterface }, | |||
4595 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4596 | JSJitInfo::Setter, | |||
4597 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4598 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4599 | false, /* isInfallible. False in setters. */ | |||
4600 | false, /* isMovable. Not relevant for setters. */ | |||
4601 | false, /* isEliminatable. Not relevant for setters. */ | |||
4602 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4603 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4604 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4605 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4606 | }; | |||
4607 | ||||
4608 | MOZ_CAN_RUN_SCRIPT static bool | |||
4609 | get_writableUnrestrictedDouble(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4610 | { | |||
4611 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4614( cx, "TestExampleInterface" , "writableUnrestrictedDouble", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4612 | "TestExampleInterface", "writableUnrestrictedDouble", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4614( cx, "TestExampleInterface" , "writableUnrestrictedDouble", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4613 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4614( cx, "TestExampleInterface" , "writableUnrestrictedDouble", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4614 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4614( cx, "TestExampleInterface" , "writableUnrestrictedDouble", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4615 | ||||
4616 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4617 | double result(MOZ_KnownLive(self)(self)->WritableUnrestrictedDouble()); | |||
4618 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4618); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4618; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4619 | args.rval().set(JS_NumberValue(double(result))); | |||
4620 | return true; | |||
4621 | } | |||
4622 | ||||
4623 | MOZ_CAN_RUN_SCRIPT static bool | |||
4624 | set_writableUnrestrictedDouble(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4625 | { | |||
4626 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4629( cx, "TestExampleInterface" , "writableUnrestrictedDouble", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4627 | "TestExampleInterface", "writableUnrestrictedDouble", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4629( cx, "TestExampleInterface" , "writableUnrestrictedDouble", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4628 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4629( cx, "TestExampleInterface" , "writableUnrestrictedDouble", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4629 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4629( cx, "TestExampleInterface" , "writableUnrestrictedDouble", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4630 | ||||
4631 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4632 | double arg0; | |||
4633 | if (!ValueToPrimitive<double, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
4634 | return false; | |||
4635 | } | |||
4636 | // NOTE: This assert does NOT call the function. | |||
4637 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnrestrictedDouble(arg0))>, "Should be returning void here"); | |||
4638 | MOZ_KnownLive(self)(self)->SetWritableUnrestrictedDouble(arg0); | |||
4639 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4639); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4639; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4640 | ||||
4641 | return true; | |||
4642 | } | |||
4643 | ||||
4644 | static const JSJitInfo writableUnrestrictedDouble_getterinfo = { | |||
4645 | { get_writableUnrestrictedDouble }, | |||
4646 | { prototypes::id::TestExampleInterface }, | |||
4647 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4648 | JSJitInfo::Getter, | |||
4649 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4650 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
4651 | true, /* isInfallible. False in setters. */ | |||
4652 | false, /* isMovable. Not relevant for setters. */ | |||
4653 | false, /* isEliminatable. Not relevant for setters. */ | |||
4654 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4655 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4656 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4657 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4658 | }; | |||
4659 | static const JSJitInfo writableUnrestrictedDouble_setterinfo = { | |||
4660 | { (JSJitGetterOp)set_writableUnrestrictedDouble }, | |||
4661 | { prototypes::id::TestExampleInterface }, | |||
4662 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4663 | JSJitInfo::Setter, | |||
4664 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4665 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4666 | false, /* isInfallible. False in setters. */ | |||
4667 | false, /* isMovable. Not relevant for setters. */ | |||
4668 | false, /* isEliminatable. Not relevant for setters. */ | |||
4669 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4670 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4671 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4672 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4673 | }; | |||
4674 | ||||
4675 | MOZ_CAN_RUN_SCRIPT static bool | |||
4676 | get_writableNullableDouble(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4677 | { | |||
4678 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4681( cx, "TestExampleInterface" , "writableNullableDouble", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4679 | "TestExampleInterface", "writableNullableDouble", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4681( cx, "TestExampleInterface" , "writableNullableDouble", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4680 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4681( cx, "TestExampleInterface" , "writableNullableDouble", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4681 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4681( cx, "TestExampleInterface" , "writableNullableDouble", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4682 | ||||
4683 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4684 | Nullable<double> result(MOZ_KnownLive(self)(self)->GetWritableNullableDouble()); | |||
4685 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4685); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4685; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4686 | if (result.IsNull()) { | |||
4687 | args.rval().setNull(); | |||
4688 | return true; | |||
4689 | } | |||
4690 | args.rval().set(JS_NumberValue(double(result.Value()))); | |||
4691 | return true; | |||
4692 | } | |||
4693 | ||||
4694 | MOZ_CAN_RUN_SCRIPT static bool | |||
4695 | set_writableNullableDouble(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4696 | { | |||
4697 | BindingCallContext cx(cx_, "TestExampleInterface.writableNullableDouble setter"); | |||
4698 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4701( cx, "TestExampleInterface" , "writableNullableDouble", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4699 | "TestExampleInterface", "writableNullableDouble", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4701( cx, "TestExampleInterface" , "writableNullableDouble", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4700 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4701( cx, "TestExampleInterface" , "writableNullableDouble", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
4701 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4701( cx, "TestExampleInterface" , "writableNullableDouble", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
4702 | ||||
4703 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4704 | Nullable<double> arg0; | |||
4705 | if (args[0].isNullOrUndefined()) { | |||
4706 | arg0.SetNull(); | |||
4707 | } else if (!ValueToPrimitive<double, eDefault>(cx, args[0], "Value being assigned", &arg0.SetValue())) { | |||
4708 | return false; | |||
4709 | } else if (!std::isfinite(arg0.Value())) { | |||
4710 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Value being assigned"); | |||
4711 | return false; | |||
4712 | } | |||
4713 | // NOTE: This assert does NOT call the function. | |||
4714 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableNullableDouble(Constify(arg0)))>, "Should be returning void here"); | |||
4715 | MOZ_KnownLive(self)(self)->SetWritableNullableDouble(Constify(arg0)); | |||
4716 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4716); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4716; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4717 | ||||
4718 | return true; | |||
4719 | } | |||
4720 | ||||
4721 | static const JSJitInfo writableNullableDouble_getterinfo = { | |||
4722 | { get_writableNullableDouble }, | |||
4723 | { prototypes::id::TestExampleInterface }, | |||
4724 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4725 | JSJitInfo::Getter, | |||
4726 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4727 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
4728 | true, /* isInfallible. False in setters. */ | |||
4729 | false, /* isMovable. Not relevant for setters. */ | |||
4730 | false, /* isEliminatable. Not relevant for setters. */ | |||
4731 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4732 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4733 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4734 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4735 | }; | |||
4736 | static const JSJitInfo writableNullableDouble_setterinfo = { | |||
4737 | { (JSJitGetterOp)set_writableNullableDouble }, | |||
4738 | { prototypes::id::TestExampleInterface }, | |||
4739 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4740 | JSJitInfo::Setter, | |||
4741 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4742 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4743 | false, /* isInfallible. False in setters. */ | |||
4744 | false, /* isMovable. Not relevant for setters. */ | |||
4745 | false, /* isEliminatable. Not relevant for setters. */ | |||
4746 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4747 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4748 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4749 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4750 | }; | |||
4751 | ||||
4752 | MOZ_CAN_RUN_SCRIPT static bool | |||
4753 | get_writableNullableUnrestrictedDouble(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
4754 | { | |||
4755 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4758( cx, "TestExampleInterface" , "writableNullableUnrestrictedDouble", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4756 | "TestExampleInterface", "writableNullableUnrestrictedDouble", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4758( cx, "TestExampleInterface" , "writableNullableUnrestrictedDouble", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4757 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject4758( cx, "TestExampleInterface" , "writableNullableUnrestrictedDouble", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4758 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4758( cx, "TestExampleInterface" , "writableNullableUnrestrictedDouble", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4759 | ||||
4760 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4761 | Nullable<double> result(MOZ_KnownLive(self)(self)->GetWritableNullableUnrestrictedDouble()); | |||
4762 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4762); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4762; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4763 | if (result.IsNull()) { | |||
4764 | args.rval().setNull(); | |||
4765 | return true; | |||
4766 | } | |||
4767 | args.rval().set(JS_NumberValue(double(result.Value()))); | |||
4768 | return true; | |||
4769 | } | |||
4770 | ||||
4771 | MOZ_CAN_RUN_SCRIPT static bool | |||
4772 | set_writableNullableUnrestrictedDouble(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
4773 | { | |||
4774 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4777( cx, "TestExampleInterface" , "writableNullableUnrestrictedDouble", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4775 | "TestExampleInterface", "writableNullableUnrestrictedDouble", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4777( cx, "TestExampleInterface" , "writableNullableUnrestrictedDouble", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4776 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject4777( cx, "TestExampleInterface" , "writableNullableUnrestrictedDouble", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
4777 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4777( cx, "TestExampleInterface" , "writableNullableUnrestrictedDouble", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
4778 | ||||
4779 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4780 | Nullable<double> arg0; | |||
4781 | if (args[0].isNullOrUndefined()) { | |||
4782 | arg0.SetNull(); | |||
4783 | } else if (!ValueToPrimitive<double, eDefault>(cx, args[0], "Value being assigned", &arg0.SetValue())) { | |||
4784 | return false; | |||
4785 | } | |||
4786 | // NOTE: This assert does NOT call the function. | |||
4787 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableNullableUnrestrictedDouble(Constify(arg0)))>, "Should be returning void here"); | |||
4788 | MOZ_KnownLive(self)(self)->SetWritableNullableUnrestrictedDouble(Constify(arg0)); | |||
4789 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 4789); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 4789; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
4790 | ||||
4791 | return true; | |||
4792 | } | |||
4793 | ||||
4794 | static const JSJitInfo writableNullableUnrestrictedDouble_getterinfo = { | |||
4795 | { get_writableNullableUnrestrictedDouble }, | |||
4796 | { prototypes::id::TestExampleInterface }, | |||
4797 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4798 | JSJitInfo::Getter, | |||
4799 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4800 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
4801 | true, /* isInfallible. False in setters. */ | |||
4802 | false, /* isMovable. Not relevant for setters. */ | |||
4803 | false, /* isEliminatable. Not relevant for setters. */ | |||
4804 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4805 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4806 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4807 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4808 | }; | |||
4809 | static const JSJitInfo writableNullableUnrestrictedDouble_setterinfo = { | |||
4810 | { (JSJitGetterOp)set_writableNullableUnrestrictedDouble }, | |||
4811 | { prototypes::id::TestExampleInterface }, | |||
4812 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
4813 | JSJitInfo::Setter, | |||
4814 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
4815 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
4816 | false, /* isInfallible. False in setters. */ | |||
4817 | false, /* isMovable. Not relevant for setters. */ | |||
4818 | false, /* isEliminatable. Not relevant for setters. */ | |||
4819 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
4820 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
4821 | false, /* isTypedMethod. Only relevant for methods. */ | |||
4822 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
4823 | }; | |||
4824 | ||||
4825 | MOZ_CAN_RUN_SCRIPT static bool | |||
4826 | passFloat(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
4827 | { | |||
4828 | BindingCallContext cx(cx_, "TestExampleInterface.passFloat"); | |||
4829 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject4832( cx, "TestExampleInterface" , "passFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
4830 | "TestExampleInterface", "passFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject4832( cx, "TestExampleInterface" , "passFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
4831 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject4832( cx, "TestExampleInterface" , "passFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
4832 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject4832( cx, "TestExampleInterface" , "passFloat", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
4833 | ||||
4834 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
4835 | if (!args.requireAtLeast(cx, "TestExampleInterface.passFloat", 16)) { | |||
4836 | return false; | |||
4837 | } | |||
4838 | float arg0; | |||
4839 | if (!ValueToPrimitive<float, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
4840 | return false; | |||
4841 | } else if (!std::isfinite(arg0)) { | |||
4842 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Argument 1"); | |||
4843 | return false; | |||
4844 | } | |||
4845 | float arg1; | |||
4846 | if (!ValueToPrimitive<float, eDefault>(cx, args[1], "Argument 2", &arg1)) { | |||
4847 | return false; | |||
4848 | } | |||
4849 | Nullable<float> arg2; | |||
4850 | if (args[2].isNullOrUndefined()) { | |||
4851 | arg2.SetNull(); | |||
4852 | } else if (!ValueToPrimitive<float, eDefault>(cx, args[2], "Argument 3", &arg2.SetValue())) { | |||
4853 | return false; | |||
4854 | } else if (!std::isfinite(arg2.Value())) { | |||
4855 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Argument 3"); | |||
4856 | return false; | |||
4857 | } | |||
4858 | Nullable<float> arg3; | |||
4859 | if (args[3].isNullOrUndefined()) { | |||
4860 | arg3.SetNull(); | |||
4861 | } else if (!ValueToPrimitive<float, eDefault>(cx, args[3], "Argument 4", &arg3.SetValue())) { | |||
4862 | return false; | |||
4863 | } | |||
4864 | double arg4; | |||
4865 | if (!ValueToPrimitive<double, eDefault>(cx, args[4], "Argument 5", &arg4)) { | |||
4866 | return false; | |||
4867 | } else if (!std::isfinite(arg4)) { | |||
4868 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Argument 5"); | |||
4869 | return false; | |||
4870 | } | |||
4871 | double arg5; | |||
4872 | if (!ValueToPrimitive<double, eDefault>(cx, args[5], "Argument 6", &arg5)) { | |||
4873 | return false; | |||
4874 | } | |||
4875 | Nullable<double> arg6; | |||
4876 | if (args[6].isNullOrUndefined()) { | |||
4877 | arg6.SetNull(); | |||
4878 | } else if (!ValueToPrimitive<double, eDefault>(cx, args[6], "Argument 7", &arg6.SetValue())) { | |||
4879 | return false; | |||
4880 | } else if (!std::isfinite(arg6.Value())) { | |||
4881 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Argument 7"); | |||
4882 | return false; | |||
4883 | } | |||
4884 | Nullable<double> arg7; | |||
4885 | if (args[7].isNullOrUndefined()) { | |||
4886 | arg7.SetNull(); | |||
4887 | } else if (!ValueToPrimitive<double, eDefault>(cx, args[7], "Argument 8", &arg7.SetValue())) { | |||
4888 | return false; | |||
4889 | } | |||
4890 | binding_detail::AutoSequence<float> arg8; | |||
4891 | if (args[8].isObject()) { | |||
4892 | JS::ForOfIterator iter(cx); | |||
4893 | if (!iter.init(args[8], JS::ForOfIterator::AllowNonIterable)) { | |||
4894 | return false; | |||
4895 | } | |||
4896 | if (!iter.valueIsIterable()) { | |||
4897 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 9", "sequence"); | |||
4898 | return false; | |||
4899 | } | |||
4900 | binding_detail::AutoSequence<float> &arr = arg8; | |||
4901 | JS::Rooted<JS::Value> temp(cx); | |||
4902 | while (true) { | |||
4903 | bool done; | |||
4904 | if (!iter.next(&temp, &done)) { | |||
4905 | return false; | |||
4906 | } | |||
4907 | if (done) { | |||
4908 | break; | |||
4909 | } | |||
4910 | float* slotPtr = arr.AppendElement(mozilla::fallible); | |||
4911 | if (!slotPtr) { | |||
4912 | JS_ReportOutOfMemory(cx); | |||
4913 | return false; | |||
4914 | } | |||
4915 | float& slot = *slotPtr; | |||
4916 | if (!ValueToPrimitive<float, eDefault>(cx, temp, "Element of argument 9", &slot)) { | |||
4917 | return false; | |||
4918 | } else if (!std::isfinite(slot)) { | |||
4919 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Element of argument 9"); | |||
4920 | return false; | |||
4921 | } | |||
4922 | } | |||
4923 | } else { | |||
4924 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 9", "sequence"); | |||
4925 | return false; | |||
4926 | } | |||
4927 | binding_detail::AutoSequence<float> arg9; | |||
4928 | if (args[9].isObject()) { | |||
4929 | JS::ForOfIterator iter(cx); | |||
4930 | if (!iter.init(args[9], JS::ForOfIterator::AllowNonIterable)) { | |||
4931 | return false; | |||
4932 | } | |||
4933 | if (!iter.valueIsIterable()) { | |||
4934 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 10", "sequence"); | |||
4935 | return false; | |||
4936 | } | |||
4937 | binding_detail::AutoSequence<float> &arr = arg9; | |||
4938 | JS::Rooted<JS::Value> temp(cx); | |||
4939 | while (true) { | |||
4940 | bool done; | |||
4941 | if (!iter.next(&temp, &done)) { | |||
4942 | return false; | |||
4943 | } | |||
4944 | if (done) { | |||
4945 | break; | |||
4946 | } | |||
4947 | float* slotPtr = arr.AppendElement(mozilla::fallible); | |||
4948 | if (!slotPtr) { | |||
4949 | JS_ReportOutOfMemory(cx); | |||
4950 | return false; | |||
4951 | } | |||
4952 | float& slot = *slotPtr; | |||
4953 | if (!ValueToPrimitive<float, eDefault>(cx, temp, "Element of argument 10", &slot)) { | |||
4954 | return false; | |||
4955 | } | |||
4956 | } | |||
4957 | } else { | |||
4958 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 10", "sequence"); | |||
4959 | return false; | |||
4960 | } | |||
4961 | binding_detail::AutoSequence<Nullable<float>> arg10; | |||
4962 | if (args[10].isObject()) { | |||
4963 | JS::ForOfIterator iter(cx); | |||
4964 | if (!iter.init(args[10], JS::ForOfIterator::AllowNonIterable)) { | |||
4965 | return false; | |||
4966 | } | |||
4967 | if (!iter.valueIsIterable()) { | |||
4968 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 11", "sequence"); | |||
4969 | return false; | |||
4970 | } | |||
4971 | binding_detail::AutoSequence<Nullable<float>> &arr = arg10; | |||
4972 | JS::Rooted<JS::Value> temp(cx); | |||
4973 | while (true) { | |||
4974 | bool done; | |||
4975 | if (!iter.next(&temp, &done)) { | |||
4976 | return false; | |||
4977 | } | |||
4978 | if (done) { | |||
4979 | break; | |||
4980 | } | |||
4981 | Nullable<float>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
4982 | if (!slotPtr) { | |||
4983 | JS_ReportOutOfMemory(cx); | |||
4984 | return false; | |||
4985 | } | |||
4986 | Nullable<float>& slot = *slotPtr; | |||
4987 | if (temp.isNullOrUndefined()) { | |||
4988 | slot.SetNull(); | |||
4989 | } else if (!ValueToPrimitive<float, eDefault>(cx, temp, "Element of argument 11", &slot.SetValue())) { | |||
4990 | return false; | |||
4991 | } else if (!std::isfinite(slot.Value())) { | |||
4992 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Element of argument 11"); | |||
4993 | return false; | |||
4994 | } | |||
4995 | } | |||
4996 | } else { | |||
4997 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 11", "sequence"); | |||
4998 | return false; | |||
4999 | } | |||
5000 | binding_detail::AutoSequence<Nullable<float>> arg11; | |||
5001 | if (args[11].isObject()) { | |||
5002 | JS::ForOfIterator iter(cx); | |||
5003 | if (!iter.init(args[11], JS::ForOfIterator::AllowNonIterable)) { | |||
5004 | return false; | |||
5005 | } | |||
5006 | if (!iter.valueIsIterable()) { | |||
5007 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 12", "sequence"); | |||
5008 | return false; | |||
5009 | } | |||
5010 | binding_detail::AutoSequence<Nullable<float>> &arr = arg11; | |||
5011 | JS::Rooted<JS::Value> temp(cx); | |||
5012 | while (true) { | |||
5013 | bool done; | |||
5014 | if (!iter.next(&temp, &done)) { | |||
5015 | return false; | |||
5016 | } | |||
5017 | if (done) { | |||
5018 | break; | |||
5019 | } | |||
5020 | Nullable<float>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5021 | if (!slotPtr) { | |||
5022 | JS_ReportOutOfMemory(cx); | |||
5023 | return false; | |||
5024 | } | |||
5025 | Nullable<float>& slot = *slotPtr; | |||
5026 | if (temp.isNullOrUndefined()) { | |||
5027 | slot.SetNull(); | |||
5028 | } else if (!ValueToPrimitive<float, eDefault>(cx, temp, "Element of argument 12", &slot.SetValue())) { | |||
5029 | return false; | |||
5030 | } | |||
5031 | } | |||
5032 | } else { | |||
5033 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 12", "sequence"); | |||
5034 | return false; | |||
5035 | } | |||
5036 | binding_detail::AutoSequence<double> arg12; | |||
5037 | if (args[12].isObject()) { | |||
5038 | JS::ForOfIterator iter(cx); | |||
5039 | if (!iter.init(args[12], JS::ForOfIterator::AllowNonIterable)) { | |||
5040 | return false; | |||
5041 | } | |||
5042 | if (!iter.valueIsIterable()) { | |||
5043 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 13", "sequence"); | |||
5044 | return false; | |||
5045 | } | |||
5046 | binding_detail::AutoSequence<double> &arr = arg12; | |||
5047 | JS::Rooted<JS::Value> temp(cx); | |||
5048 | while (true) { | |||
5049 | bool done; | |||
5050 | if (!iter.next(&temp, &done)) { | |||
5051 | return false; | |||
5052 | } | |||
5053 | if (done) { | |||
5054 | break; | |||
5055 | } | |||
5056 | double* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5057 | if (!slotPtr) { | |||
5058 | JS_ReportOutOfMemory(cx); | |||
5059 | return false; | |||
5060 | } | |||
5061 | double& slot = *slotPtr; | |||
5062 | if (!ValueToPrimitive<double, eDefault>(cx, temp, "Element of argument 13", &slot)) { | |||
5063 | return false; | |||
5064 | } else if (!std::isfinite(slot)) { | |||
5065 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Element of argument 13"); | |||
5066 | return false; | |||
5067 | } | |||
5068 | } | |||
5069 | } else { | |||
5070 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 13", "sequence"); | |||
5071 | return false; | |||
5072 | } | |||
5073 | binding_detail::AutoSequence<double> arg13; | |||
5074 | if (args[13].isObject()) { | |||
5075 | JS::ForOfIterator iter(cx); | |||
5076 | if (!iter.init(args[13], JS::ForOfIterator::AllowNonIterable)) { | |||
5077 | return false; | |||
5078 | } | |||
5079 | if (!iter.valueIsIterable()) { | |||
5080 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 14", "sequence"); | |||
5081 | return false; | |||
5082 | } | |||
5083 | binding_detail::AutoSequence<double> &arr = arg13; | |||
5084 | JS::Rooted<JS::Value> temp(cx); | |||
5085 | while (true) { | |||
5086 | bool done; | |||
5087 | if (!iter.next(&temp, &done)) { | |||
5088 | return false; | |||
5089 | } | |||
5090 | if (done) { | |||
5091 | break; | |||
5092 | } | |||
5093 | double* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5094 | if (!slotPtr) { | |||
5095 | JS_ReportOutOfMemory(cx); | |||
5096 | return false; | |||
5097 | } | |||
5098 | double& slot = *slotPtr; | |||
5099 | if (!ValueToPrimitive<double, eDefault>(cx, temp, "Element of argument 14", &slot)) { | |||
5100 | return false; | |||
5101 | } | |||
5102 | } | |||
5103 | } else { | |||
5104 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 14", "sequence"); | |||
5105 | return false; | |||
5106 | } | |||
5107 | binding_detail::AutoSequence<Nullable<double>> arg14; | |||
5108 | if (args[14].isObject()) { | |||
5109 | JS::ForOfIterator iter(cx); | |||
5110 | if (!iter.init(args[14], JS::ForOfIterator::AllowNonIterable)) { | |||
5111 | return false; | |||
5112 | } | |||
5113 | if (!iter.valueIsIterable()) { | |||
5114 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 15", "sequence"); | |||
5115 | return false; | |||
5116 | } | |||
5117 | binding_detail::AutoSequence<Nullable<double>> &arr = arg14; | |||
5118 | JS::Rooted<JS::Value> temp(cx); | |||
5119 | while (true) { | |||
5120 | bool done; | |||
5121 | if (!iter.next(&temp, &done)) { | |||
5122 | return false; | |||
5123 | } | |||
5124 | if (done) { | |||
5125 | break; | |||
5126 | } | |||
5127 | Nullable<double>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5128 | if (!slotPtr) { | |||
5129 | JS_ReportOutOfMemory(cx); | |||
5130 | return false; | |||
5131 | } | |||
5132 | Nullable<double>& slot = *slotPtr; | |||
5133 | if (temp.isNullOrUndefined()) { | |||
5134 | slot.SetNull(); | |||
5135 | } else if (!ValueToPrimitive<double, eDefault>(cx, temp, "Element of argument 15", &slot.SetValue())) { | |||
5136 | return false; | |||
5137 | } else if (!std::isfinite(slot.Value())) { | |||
5138 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Element of argument 15"); | |||
5139 | return false; | |||
5140 | } | |||
5141 | } | |||
5142 | } else { | |||
5143 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 15", "sequence"); | |||
5144 | return false; | |||
5145 | } | |||
5146 | binding_detail::AutoSequence<Nullable<double>> arg15; | |||
5147 | if (args[15].isObject()) { | |||
5148 | JS::ForOfIterator iter(cx); | |||
5149 | if (!iter.init(args[15], JS::ForOfIterator::AllowNonIterable)) { | |||
5150 | return false; | |||
5151 | } | |||
5152 | if (!iter.valueIsIterable()) { | |||
5153 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 16", "sequence"); | |||
5154 | return false; | |||
5155 | } | |||
5156 | binding_detail::AutoSequence<Nullable<double>> &arr = arg15; | |||
5157 | JS::Rooted<JS::Value> temp(cx); | |||
5158 | while (true) { | |||
5159 | bool done; | |||
5160 | if (!iter.next(&temp, &done)) { | |||
5161 | return false; | |||
5162 | } | |||
5163 | if (done) { | |||
5164 | break; | |||
5165 | } | |||
5166 | Nullable<double>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5167 | if (!slotPtr) { | |||
5168 | JS_ReportOutOfMemory(cx); | |||
5169 | return false; | |||
5170 | } | |||
5171 | Nullable<double>& slot = *slotPtr; | |||
5172 | if (temp.isNullOrUndefined()) { | |||
5173 | slot.SetNull(); | |||
5174 | } else if (!ValueToPrimitive<double, eDefault>(cx, temp, "Element of argument 16", &slot.SetValue())) { | |||
5175 | return false; | |||
5176 | } | |||
5177 | } | |||
5178 | } else { | |||
5179 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 16", "sequence"); | |||
5180 | return false; | |||
5181 | } | |||
5182 | // NOTE: This assert does NOT call the function. | |||
5183 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassFloat(arg0, arg1, Constify(arg2), Constify(arg3), arg4, arg5, Constify(arg6), Constify(arg7), Constify(arg8), Constify(arg9), Constify(arg10), Constify(arg11), Constify(arg12), Constify(arg13), Constify(arg14), Constify(arg15)))>, "Should be returning void here"); | |||
5184 | MOZ_KnownLive(self)(self)->PassFloat(arg0, arg1, Constify(arg2), Constify(arg3), arg4, arg5, Constify(arg6), Constify(arg7), Constify(arg8), Constify(arg9), Constify(arg10), Constify(arg11), Constify(arg12), Constify(arg13), Constify(arg14), Constify(arg15)); | |||
5185 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5185); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5185; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5186 | args.rval().setUndefined(); | |||
5187 | return true; | |||
5188 | } | |||
5189 | ||||
5190 | static const JSJitInfo passFloat_methodinfo = { | |||
5191 | { (JSJitGetterOp)passFloat }, | |||
5192 | { prototypes::id::TestExampleInterface }, | |||
5193 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5194 | JSJitInfo::Method, | |||
5195 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5196 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
5197 | false, /* isInfallible. False in setters. */ | |||
5198 | false, /* isMovable. Not relevant for setters. */ | |||
5199 | false, /* isEliminatable. Not relevant for setters. */ | |||
5200 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5201 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5202 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5203 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5204 | }; | |||
5205 | ||||
5206 | MOZ_CAN_RUN_SCRIPT static bool | |||
5207 | passLenientFloat(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
5208 | { | |||
5209 | BindingCallContext cx(cx_, "TestExampleInterface.passLenientFloat"); | |||
5210 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5213( cx, "TestExampleInterface" , "passLenientFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5211 | "TestExampleInterface", "passLenientFloat", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5213( cx, "TestExampleInterface" , "passLenientFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5212 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject5213( cx, "TestExampleInterface" , "passLenientFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5213 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5213( cx, "TestExampleInterface" , "passLenientFloat", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5214 | ||||
5215 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5216 | if (!args.requireAtLeast(cx, "TestExampleInterface.passLenientFloat", 16)) { | |||
5217 | return false; | |||
5218 | } | |||
5219 | bool foundNonFiniteFloat = false; | |||
5220 | float arg0; | |||
5221 | if (!ValueToPrimitive<float, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
5222 | return false; | |||
5223 | } else if (!std::isfinite(arg0)) { | |||
5224 | foundNonFiniteFloat = true; | |||
5225 | } | |||
5226 | float arg1; | |||
5227 | if (!ValueToPrimitive<float, eDefault>(cx, args[1], "Argument 2", &arg1)) { | |||
5228 | return false; | |||
5229 | } | |||
5230 | Nullable<float> arg2; | |||
5231 | if (args[2].isNullOrUndefined()) { | |||
5232 | arg2.SetNull(); | |||
5233 | } else if (!ValueToPrimitive<float, eDefault>(cx, args[2], "Argument 3", &arg2.SetValue())) { | |||
5234 | return false; | |||
5235 | } else if (!std::isfinite(arg2.Value())) { | |||
5236 | foundNonFiniteFloat = true; | |||
5237 | } | |||
5238 | Nullable<float> arg3; | |||
5239 | if (args[3].isNullOrUndefined()) { | |||
5240 | arg3.SetNull(); | |||
5241 | } else if (!ValueToPrimitive<float, eDefault>(cx, args[3], "Argument 4", &arg3.SetValue())) { | |||
5242 | return false; | |||
5243 | } | |||
5244 | double arg4; | |||
5245 | if (!ValueToPrimitive<double, eDefault>(cx, args[4], "Argument 5", &arg4)) { | |||
5246 | return false; | |||
5247 | } else if (!std::isfinite(arg4)) { | |||
5248 | foundNonFiniteFloat = true; | |||
5249 | } | |||
5250 | double arg5; | |||
5251 | if (!ValueToPrimitive<double, eDefault>(cx, args[5], "Argument 6", &arg5)) { | |||
5252 | return false; | |||
5253 | } | |||
5254 | Nullable<double> arg6; | |||
5255 | if (args[6].isNullOrUndefined()) { | |||
5256 | arg6.SetNull(); | |||
5257 | } else if (!ValueToPrimitive<double, eDefault>(cx, args[6], "Argument 7", &arg6.SetValue())) { | |||
5258 | return false; | |||
5259 | } else if (!std::isfinite(arg6.Value())) { | |||
5260 | foundNonFiniteFloat = true; | |||
5261 | } | |||
5262 | Nullable<double> arg7; | |||
5263 | if (args[7].isNullOrUndefined()) { | |||
5264 | arg7.SetNull(); | |||
5265 | } else if (!ValueToPrimitive<double, eDefault>(cx, args[7], "Argument 8", &arg7.SetValue())) { | |||
5266 | return false; | |||
5267 | } | |||
5268 | binding_detail::AutoSequence<float> arg8; | |||
5269 | if (args[8].isObject()) { | |||
5270 | JS::ForOfIterator iter(cx); | |||
5271 | if (!iter.init(args[8], JS::ForOfIterator::AllowNonIterable)) { | |||
5272 | return false; | |||
5273 | } | |||
5274 | if (!iter.valueIsIterable()) { | |||
5275 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 9", "sequence"); | |||
5276 | return false; | |||
5277 | } | |||
5278 | binding_detail::AutoSequence<float> &arr = arg8; | |||
5279 | JS::Rooted<JS::Value> temp(cx); | |||
5280 | while (true) { | |||
5281 | bool done; | |||
5282 | if (!iter.next(&temp, &done)) { | |||
5283 | return false; | |||
5284 | } | |||
5285 | if (done) { | |||
5286 | break; | |||
5287 | } | |||
5288 | float* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5289 | if (!slotPtr) { | |||
5290 | JS_ReportOutOfMemory(cx); | |||
5291 | return false; | |||
5292 | } | |||
5293 | float& slot = *slotPtr; | |||
5294 | if (!ValueToPrimitive<float, eDefault>(cx, temp, "Element of argument 9", &slot)) { | |||
5295 | return false; | |||
5296 | } else if (!std::isfinite(slot)) { | |||
5297 | foundNonFiniteFloat = true; | |||
5298 | } | |||
5299 | } | |||
5300 | } else { | |||
5301 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 9", "sequence"); | |||
5302 | return false; | |||
5303 | } | |||
5304 | binding_detail::AutoSequence<float> arg9; | |||
5305 | if (args[9].isObject()) { | |||
5306 | JS::ForOfIterator iter(cx); | |||
5307 | if (!iter.init(args[9], JS::ForOfIterator::AllowNonIterable)) { | |||
5308 | return false; | |||
5309 | } | |||
5310 | if (!iter.valueIsIterable()) { | |||
5311 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 10", "sequence"); | |||
5312 | return false; | |||
5313 | } | |||
5314 | binding_detail::AutoSequence<float> &arr = arg9; | |||
5315 | JS::Rooted<JS::Value> temp(cx); | |||
5316 | while (true) { | |||
5317 | bool done; | |||
5318 | if (!iter.next(&temp, &done)) { | |||
5319 | return false; | |||
5320 | } | |||
5321 | if (done) { | |||
5322 | break; | |||
5323 | } | |||
5324 | float* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5325 | if (!slotPtr) { | |||
5326 | JS_ReportOutOfMemory(cx); | |||
5327 | return false; | |||
5328 | } | |||
5329 | float& slot = *slotPtr; | |||
5330 | if (!ValueToPrimitive<float, eDefault>(cx, temp, "Element of argument 10", &slot)) { | |||
5331 | return false; | |||
5332 | } | |||
5333 | } | |||
5334 | } else { | |||
5335 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 10", "sequence"); | |||
5336 | return false; | |||
5337 | } | |||
5338 | binding_detail::AutoSequence<Nullable<float>> arg10; | |||
5339 | if (args[10].isObject()) { | |||
5340 | JS::ForOfIterator iter(cx); | |||
5341 | if (!iter.init(args[10], JS::ForOfIterator::AllowNonIterable)) { | |||
5342 | return false; | |||
5343 | } | |||
5344 | if (!iter.valueIsIterable()) { | |||
5345 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 11", "sequence"); | |||
5346 | return false; | |||
5347 | } | |||
5348 | binding_detail::AutoSequence<Nullable<float>> &arr = arg10; | |||
5349 | JS::Rooted<JS::Value> temp(cx); | |||
5350 | while (true) { | |||
5351 | bool done; | |||
5352 | if (!iter.next(&temp, &done)) { | |||
5353 | return false; | |||
5354 | } | |||
5355 | if (done) { | |||
5356 | break; | |||
5357 | } | |||
5358 | Nullable<float>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5359 | if (!slotPtr) { | |||
5360 | JS_ReportOutOfMemory(cx); | |||
5361 | return false; | |||
5362 | } | |||
5363 | Nullable<float>& slot = *slotPtr; | |||
5364 | if (temp.isNullOrUndefined()) { | |||
5365 | slot.SetNull(); | |||
5366 | } else if (!ValueToPrimitive<float, eDefault>(cx, temp, "Element of argument 11", &slot.SetValue())) { | |||
5367 | return false; | |||
5368 | } else if (!std::isfinite(slot.Value())) { | |||
5369 | foundNonFiniteFloat = true; | |||
5370 | } | |||
5371 | } | |||
5372 | } else { | |||
5373 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 11", "sequence"); | |||
5374 | return false; | |||
5375 | } | |||
5376 | binding_detail::AutoSequence<Nullable<float>> arg11; | |||
5377 | if (args[11].isObject()) { | |||
5378 | JS::ForOfIterator iter(cx); | |||
5379 | if (!iter.init(args[11], JS::ForOfIterator::AllowNonIterable)) { | |||
5380 | return false; | |||
5381 | } | |||
5382 | if (!iter.valueIsIterable()) { | |||
5383 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 12", "sequence"); | |||
5384 | return false; | |||
5385 | } | |||
5386 | binding_detail::AutoSequence<Nullable<float>> &arr = arg11; | |||
5387 | JS::Rooted<JS::Value> temp(cx); | |||
5388 | while (true) { | |||
5389 | bool done; | |||
5390 | if (!iter.next(&temp, &done)) { | |||
5391 | return false; | |||
5392 | } | |||
5393 | if (done) { | |||
5394 | break; | |||
5395 | } | |||
5396 | Nullable<float>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5397 | if (!slotPtr) { | |||
5398 | JS_ReportOutOfMemory(cx); | |||
5399 | return false; | |||
5400 | } | |||
5401 | Nullable<float>& slot = *slotPtr; | |||
5402 | if (temp.isNullOrUndefined()) { | |||
5403 | slot.SetNull(); | |||
5404 | } else if (!ValueToPrimitive<float, eDefault>(cx, temp, "Element of argument 12", &slot.SetValue())) { | |||
5405 | return false; | |||
5406 | } | |||
5407 | } | |||
5408 | } else { | |||
5409 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 12", "sequence"); | |||
5410 | return false; | |||
5411 | } | |||
5412 | binding_detail::AutoSequence<double> arg12; | |||
5413 | if (args[12].isObject()) { | |||
5414 | JS::ForOfIterator iter(cx); | |||
5415 | if (!iter.init(args[12], JS::ForOfIterator::AllowNonIterable)) { | |||
5416 | return false; | |||
5417 | } | |||
5418 | if (!iter.valueIsIterable()) { | |||
5419 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 13", "sequence"); | |||
5420 | return false; | |||
5421 | } | |||
5422 | binding_detail::AutoSequence<double> &arr = arg12; | |||
5423 | JS::Rooted<JS::Value> temp(cx); | |||
5424 | while (true) { | |||
5425 | bool done; | |||
5426 | if (!iter.next(&temp, &done)) { | |||
5427 | return false; | |||
5428 | } | |||
5429 | if (done) { | |||
5430 | break; | |||
5431 | } | |||
5432 | double* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5433 | if (!slotPtr) { | |||
5434 | JS_ReportOutOfMemory(cx); | |||
5435 | return false; | |||
5436 | } | |||
5437 | double& slot = *slotPtr; | |||
5438 | if (!ValueToPrimitive<double, eDefault>(cx, temp, "Element of argument 13", &slot)) { | |||
5439 | return false; | |||
5440 | } else if (!std::isfinite(slot)) { | |||
5441 | foundNonFiniteFloat = true; | |||
5442 | } | |||
5443 | } | |||
5444 | } else { | |||
5445 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 13", "sequence"); | |||
5446 | return false; | |||
5447 | } | |||
5448 | binding_detail::AutoSequence<double> arg13; | |||
5449 | if (args[13].isObject()) { | |||
5450 | JS::ForOfIterator iter(cx); | |||
5451 | if (!iter.init(args[13], JS::ForOfIterator::AllowNonIterable)) { | |||
5452 | return false; | |||
5453 | } | |||
5454 | if (!iter.valueIsIterable()) { | |||
5455 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 14", "sequence"); | |||
5456 | return false; | |||
5457 | } | |||
5458 | binding_detail::AutoSequence<double> &arr = arg13; | |||
5459 | JS::Rooted<JS::Value> temp(cx); | |||
5460 | while (true) { | |||
5461 | bool done; | |||
5462 | if (!iter.next(&temp, &done)) { | |||
5463 | return false; | |||
5464 | } | |||
5465 | if (done) { | |||
5466 | break; | |||
5467 | } | |||
5468 | double* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5469 | if (!slotPtr) { | |||
5470 | JS_ReportOutOfMemory(cx); | |||
5471 | return false; | |||
5472 | } | |||
5473 | double& slot = *slotPtr; | |||
5474 | if (!ValueToPrimitive<double, eDefault>(cx, temp, "Element of argument 14", &slot)) { | |||
5475 | return false; | |||
5476 | } | |||
5477 | } | |||
5478 | } else { | |||
5479 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 14", "sequence"); | |||
5480 | return false; | |||
5481 | } | |||
5482 | binding_detail::AutoSequence<Nullable<double>> arg14; | |||
5483 | if (args[14].isObject()) { | |||
5484 | JS::ForOfIterator iter(cx); | |||
5485 | if (!iter.init(args[14], JS::ForOfIterator::AllowNonIterable)) { | |||
5486 | return false; | |||
5487 | } | |||
5488 | if (!iter.valueIsIterable()) { | |||
5489 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 15", "sequence"); | |||
5490 | return false; | |||
5491 | } | |||
5492 | binding_detail::AutoSequence<Nullable<double>> &arr = arg14; | |||
5493 | JS::Rooted<JS::Value> temp(cx); | |||
5494 | while (true) { | |||
5495 | bool done; | |||
5496 | if (!iter.next(&temp, &done)) { | |||
5497 | return false; | |||
5498 | } | |||
5499 | if (done) { | |||
5500 | break; | |||
5501 | } | |||
5502 | Nullable<double>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5503 | if (!slotPtr) { | |||
5504 | JS_ReportOutOfMemory(cx); | |||
5505 | return false; | |||
5506 | } | |||
5507 | Nullable<double>& slot = *slotPtr; | |||
5508 | if (temp.isNullOrUndefined()) { | |||
5509 | slot.SetNull(); | |||
5510 | } else if (!ValueToPrimitive<double, eDefault>(cx, temp, "Element of argument 15", &slot.SetValue())) { | |||
5511 | return false; | |||
5512 | } else if (!std::isfinite(slot.Value())) { | |||
5513 | foundNonFiniteFloat = true; | |||
5514 | } | |||
5515 | } | |||
5516 | } else { | |||
5517 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 15", "sequence"); | |||
5518 | return false; | |||
5519 | } | |||
5520 | binding_detail::AutoSequence<Nullable<double>> arg15; | |||
5521 | if (args[15].isObject()) { | |||
5522 | JS::ForOfIterator iter(cx); | |||
5523 | if (!iter.init(args[15], JS::ForOfIterator::AllowNonIterable)) { | |||
5524 | return false; | |||
5525 | } | |||
5526 | if (!iter.valueIsIterable()) { | |||
5527 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 16", "sequence"); | |||
5528 | return false; | |||
5529 | } | |||
5530 | binding_detail::AutoSequence<Nullable<double>> &arr = arg15; | |||
5531 | JS::Rooted<JS::Value> temp(cx); | |||
5532 | while (true) { | |||
5533 | bool done; | |||
5534 | if (!iter.next(&temp, &done)) { | |||
5535 | return false; | |||
5536 | } | |||
5537 | if (done) { | |||
5538 | break; | |||
5539 | } | |||
5540 | Nullable<double>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
5541 | if (!slotPtr) { | |||
5542 | JS_ReportOutOfMemory(cx); | |||
5543 | return false; | |||
5544 | } | |||
5545 | Nullable<double>& slot = *slotPtr; | |||
5546 | if (temp.isNullOrUndefined()) { | |||
5547 | slot.SetNull(); | |||
5548 | } else if (!ValueToPrimitive<double, eDefault>(cx, temp, "Element of argument 16", &slot.SetValue())) { | |||
5549 | return false; | |||
5550 | } | |||
5551 | } | |||
5552 | } else { | |||
5553 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 16", "sequence"); | |||
5554 | return false; | |||
5555 | } | |||
5556 | if (foundNonFiniteFloat) { | |||
5557 | args.rval().setUndefined(); | |||
5558 | return true; | |||
5559 | } | |||
5560 | // NOTE: This assert does NOT call the function. | |||
5561 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassLenientFloat(arg0, arg1, Constify(arg2), Constify(arg3), arg4, arg5, Constify(arg6), Constify(arg7), Constify(arg8), Constify(arg9), Constify(arg10), Constify(arg11), Constify(arg12), Constify(arg13), Constify(arg14), Constify(arg15)))>, "Should be returning void here"); | |||
5562 | MOZ_KnownLive(self)(self)->PassLenientFloat(arg0, arg1, Constify(arg2), Constify(arg3), arg4, arg5, Constify(arg6), Constify(arg7), Constify(arg8), Constify(arg9), Constify(arg10), Constify(arg11), Constify(arg12), Constify(arg13), Constify(arg14), Constify(arg15)); | |||
5563 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5563); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5563; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5564 | args.rval().setUndefined(); | |||
5565 | return true; | |||
5566 | } | |||
5567 | ||||
5568 | static const JSJitInfo passLenientFloat_methodinfo = { | |||
5569 | { (JSJitGetterOp)passLenientFloat }, | |||
5570 | { prototypes::id::TestExampleInterface }, | |||
5571 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5572 | JSJitInfo::Method, | |||
5573 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5574 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
5575 | false, /* isInfallible. False in setters. */ | |||
5576 | false, /* isMovable. Not relevant for setters. */ | |||
5577 | false, /* isEliminatable. Not relevant for setters. */ | |||
5578 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5579 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5580 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5581 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5582 | }; | |||
5583 | ||||
5584 | MOZ_CAN_RUN_SCRIPT static bool | |||
5585 | get_lenientFloatAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
5586 | { | |||
5587 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5590( cx, "TestExampleInterface" , "lenientFloatAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5588 | "TestExampleInterface", "lenientFloatAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5590( cx, "TestExampleInterface" , "lenientFloatAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5589 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject5590( cx, "TestExampleInterface" , "lenientFloatAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5590 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5590( cx, "TestExampleInterface" , "lenientFloatAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5591 | ||||
5592 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5593 | float result(MOZ_KnownLive(self)(self)->LenientFloatAttr()); | |||
5594 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5594); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5594; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5595 | args.rval().set(JS_NumberValue(double(result))); | |||
5596 | return true; | |||
5597 | } | |||
5598 | ||||
5599 | MOZ_CAN_RUN_SCRIPT static bool | |||
5600 | set_lenientFloatAttr(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
5601 | { | |||
5602 | BindingCallContext cx(cx_, "TestExampleInterface.lenientFloatAttr setter"); | |||
5603 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5606( cx, "TestExampleInterface" , "lenientFloatAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5604 | "TestExampleInterface", "lenientFloatAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5606( cx, "TestExampleInterface" , "lenientFloatAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5605 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject5606( cx, "TestExampleInterface" , "lenientFloatAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5606 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5606( cx, "TestExampleInterface" , "lenientFloatAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5607 | ||||
5608 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5609 | bool foundNonFiniteFloat = false; | |||
5610 | float arg0; | |||
5611 | if (!ValueToPrimitive<float, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
5612 | return false; | |||
5613 | } else if (!std::isfinite(arg0)) { | |||
5614 | foundNonFiniteFloat = true; | |||
5615 | } | |||
5616 | if (foundNonFiniteFloat) { | |||
5617 | return true; | |||
5618 | } | |||
5619 | // NOTE: This assert does NOT call the function. | |||
5620 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetLenientFloatAttr(arg0))>, "Should be returning void here"); | |||
5621 | MOZ_KnownLive(self)(self)->SetLenientFloatAttr(arg0); | |||
5622 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5622); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5622; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5623 | ||||
5624 | return true; | |||
5625 | } | |||
5626 | ||||
5627 | static const JSJitInfo lenientFloatAttr_getterinfo = { | |||
5628 | { get_lenientFloatAttr }, | |||
5629 | { prototypes::id::TestExampleInterface }, | |||
5630 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5631 | JSJitInfo::Getter, | |||
5632 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5633 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
5634 | true, /* isInfallible. False in setters. */ | |||
5635 | false, /* isMovable. Not relevant for setters. */ | |||
5636 | false, /* isEliminatable. Not relevant for setters. */ | |||
5637 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5638 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5639 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5640 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5641 | }; | |||
5642 | static const JSJitInfo lenientFloatAttr_setterinfo = { | |||
5643 | { (JSJitGetterOp)set_lenientFloatAttr }, | |||
5644 | { prototypes::id::TestExampleInterface }, | |||
5645 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5646 | JSJitInfo::Setter, | |||
5647 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5648 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
5649 | false, /* isInfallible. False in setters. */ | |||
5650 | false, /* isMovable. Not relevant for setters. */ | |||
5651 | false, /* isEliminatable. Not relevant for setters. */ | |||
5652 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5653 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5654 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5655 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5656 | }; | |||
5657 | ||||
5658 | MOZ_CAN_RUN_SCRIPT static bool | |||
5659 | get_lenientDoubleAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
5660 | { | |||
5661 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5664( cx, "TestExampleInterface" , "lenientDoubleAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5662 | "TestExampleInterface", "lenientDoubleAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5664( cx, "TestExampleInterface" , "lenientDoubleAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5663 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject5664( cx, "TestExampleInterface" , "lenientDoubleAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5664 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5664( cx, "TestExampleInterface" , "lenientDoubleAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5665 | ||||
5666 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5667 | double result(MOZ_KnownLive(self)(self)->LenientDoubleAttr()); | |||
5668 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5668); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5668; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5669 | args.rval().set(JS_NumberValue(double(result))); | |||
5670 | return true; | |||
5671 | } | |||
5672 | ||||
5673 | MOZ_CAN_RUN_SCRIPT static bool | |||
5674 | set_lenientDoubleAttr(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
5675 | { | |||
5676 | BindingCallContext cx(cx_, "TestExampleInterface.lenientDoubleAttr setter"); | |||
5677 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5680( cx, "TestExampleInterface" , "lenientDoubleAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5678 | "TestExampleInterface", "lenientDoubleAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5680( cx, "TestExampleInterface" , "lenientDoubleAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5679 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject5680( cx, "TestExampleInterface" , "lenientDoubleAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5680 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5680( cx, "TestExampleInterface" , "lenientDoubleAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5681 | ||||
5682 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5683 | bool foundNonFiniteFloat = false; | |||
5684 | double arg0; | |||
5685 | if (!ValueToPrimitive<double, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
5686 | return false; | |||
5687 | } else if (!std::isfinite(arg0)) { | |||
5688 | foundNonFiniteFloat = true; | |||
5689 | } | |||
5690 | if (foundNonFiniteFloat) { | |||
5691 | return true; | |||
5692 | } | |||
5693 | // NOTE: This assert does NOT call the function. | |||
5694 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetLenientDoubleAttr(arg0))>, "Should be returning void here"); | |||
5695 | MOZ_KnownLive(self)(self)->SetLenientDoubleAttr(arg0); | |||
5696 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5696); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5696; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5697 | ||||
5698 | return true; | |||
5699 | } | |||
5700 | ||||
5701 | static const JSJitInfo lenientDoubleAttr_getterinfo = { | |||
5702 | { get_lenientDoubleAttr }, | |||
5703 | { prototypes::id::TestExampleInterface }, | |||
5704 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5705 | JSJitInfo::Getter, | |||
5706 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5707 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
5708 | true, /* isInfallible. False in setters. */ | |||
5709 | false, /* isMovable. Not relevant for setters. */ | |||
5710 | false, /* isEliminatable. Not relevant for setters. */ | |||
5711 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5712 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5713 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5714 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5715 | }; | |||
5716 | static const JSJitInfo lenientDoubleAttr_setterinfo = { | |||
5717 | { (JSJitGetterOp)set_lenientDoubleAttr }, | |||
5718 | { prototypes::id::TestExampleInterface }, | |||
5719 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5720 | JSJitInfo::Setter, | |||
5721 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5722 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
5723 | false, /* isInfallible. False in setters. */ | |||
5724 | false, /* isMovable. Not relevant for setters. */ | |||
5725 | false, /* isEliminatable. Not relevant for setters. */ | |||
5726 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5727 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5728 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5729 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5730 | }; | |||
5731 | ||||
5732 | MOZ_CAN_RUN_SCRIPT static bool | |||
5733 | receiveSelf(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
5734 | { | |||
5735 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5738( cx, "TestExampleInterface" , "receiveSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5736 | "TestExampleInterface", "receiveSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5738( cx, "TestExampleInterface" , "receiveSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5737 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject5738( cx, "TestExampleInterface" , "receiveSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5738 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5738( cx, "TestExampleInterface" , "receiveSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5739 | ||||
5740 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5741 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->ReceiveSelf())); | |||
5742 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5742); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5742; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5743 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
5744 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5744); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 5744; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
5745 | return false; | |||
5746 | } | |||
5747 | return true; | |||
5748 | } | |||
5749 | ||||
5750 | static const JSJitInfo receiveSelf_methodinfo = { | |||
5751 | { (JSJitGetterOp)receiveSelf }, | |||
5752 | { prototypes::id::TestExampleInterface }, | |||
5753 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5754 | JSJitInfo::Method, | |||
5755 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5756 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
5757 | false, /* isInfallible. False in setters. */ | |||
5758 | false, /* isMovable. Not relevant for setters. */ | |||
5759 | false, /* isEliminatable. Not relevant for setters. */ | |||
5760 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5761 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5762 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5763 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5764 | }; | |||
5765 | ||||
5766 | MOZ_CAN_RUN_SCRIPT static bool | |||
5767 | receiveNullableSelf(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
5768 | { | |||
5769 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5772( cx, "TestExampleInterface" , "receiveNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5770 | "TestExampleInterface", "receiveNullableSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5772( cx, "TestExampleInterface" , "receiveNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5771 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject5772( cx, "TestExampleInterface" , "receiveNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5772 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5772( cx, "TestExampleInterface" , "receiveNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5773 | ||||
5774 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5775 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->ReceiveNullableSelf())); | |||
5776 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5776); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5776; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5777 | if (!result) { | |||
5778 | args.rval().setNull(); | |||
5779 | return true; | |||
5780 | } | |||
5781 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
5782 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5782); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 5782; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
5783 | return false; | |||
5784 | } | |||
5785 | return true; | |||
5786 | } | |||
5787 | ||||
5788 | static const JSJitInfo receiveNullableSelf_methodinfo = { | |||
5789 | { (JSJitGetterOp)receiveNullableSelf }, | |||
5790 | { prototypes::id::TestExampleInterface }, | |||
5791 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5792 | JSJitInfo::Method, | |||
5793 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5794 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
5795 | false, /* isInfallible. False in setters. */ | |||
5796 | false, /* isMovable. Not relevant for setters. */ | |||
5797 | false, /* isEliminatable. Not relevant for setters. */ | |||
5798 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5799 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5800 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5801 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5802 | }; | |||
5803 | ||||
5804 | MOZ_CAN_RUN_SCRIPT static bool | |||
5805 | receiveWeakSelf(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
5806 | { | |||
5807 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5810( cx, "TestExampleInterface" , "receiveWeakSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5808 | "TestExampleInterface", "receiveWeakSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5810( cx, "TestExampleInterface" , "receiveWeakSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5809 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject5810( cx, "TestExampleInterface" , "receiveWeakSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5810 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5810( cx, "TestExampleInterface" , "receiveWeakSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5811 | ||||
5812 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5813 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->ReceiveWeakSelf())); | |||
5814 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5814); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5814; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5815 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
5816 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5816); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 5816; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
5817 | return false; | |||
5818 | } | |||
5819 | return true; | |||
5820 | } | |||
5821 | ||||
5822 | static const JSJitInfo receiveWeakSelf_methodinfo = { | |||
5823 | { (JSJitGetterOp)receiveWeakSelf }, | |||
5824 | { prototypes::id::TestExampleInterface }, | |||
5825 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5826 | JSJitInfo::Method, | |||
5827 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5828 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
5829 | false, /* isInfallible. False in setters. */ | |||
5830 | false, /* isMovable. Not relevant for setters. */ | |||
5831 | false, /* isEliminatable. Not relevant for setters. */ | |||
5832 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5833 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5834 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5835 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5836 | }; | |||
5837 | ||||
5838 | MOZ_CAN_RUN_SCRIPT static bool | |||
5839 | receiveWeakNullableSelf(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
5840 | { | |||
5841 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5844( cx, "TestExampleInterface" , "receiveWeakNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5842 | "TestExampleInterface", "receiveWeakNullableSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5844( cx, "TestExampleInterface" , "receiveWeakNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5843 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject5844( cx, "TestExampleInterface" , "receiveWeakNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5844 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5844( cx, "TestExampleInterface" , "receiveWeakNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5845 | ||||
5846 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5847 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->ReceiveWeakNullableSelf())); | |||
5848 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5848); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5848; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5849 | if (!result) { | |||
5850 | args.rval().setNull(); | |||
5851 | return true; | |||
5852 | } | |||
5853 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
5854 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5854); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 5854; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
5855 | return false; | |||
5856 | } | |||
5857 | return true; | |||
5858 | } | |||
5859 | ||||
5860 | static const JSJitInfo receiveWeakNullableSelf_methodinfo = { | |||
5861 | { (JSJitGetterOp)receiveWeakNullableSelf }, | |||
5862 | { prototypes::id::TestExampleInterface }, | |||
5863 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5864 | JSJitInfo::Method, | |||
5865 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5866 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
5867 | false, /* isInfallible. False in setters. */ | |||
5868 | false, /* isMovable. Not relevant for setters. */ | |||
5869 | false, /* isEliminatable. Not relevant for setters. */ | |||
5870 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5871 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5872 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5873 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5874 | }; | |||
5875 | ||||
5876 | MOZ_CAN_RUN_SCRIPT static bool | |||
5877 | passSelf(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
5878 | { | |||
5879 | BindingCallContext cx(cx_, "TestExampleInterface.passSelf"); | |||
5880 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5883( cx, "TestExampleInterface" , "passSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
5881 | "TestExampleInterface", "passSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5883( cx, "TestExampleInterface" , "passSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
5882 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject5883( cx, "TestExampleInterface" , "passSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
5883 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5883( cx, "TestExampleInterface" , "passSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
5884 | ||||
5885 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5886 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSelf", 1)) { | |||
5887 | return false; | |||
5888 | } | |||
5889 | NonNull<mozilla::dom::TestInterface> arg0; | |||
5890 | if (args[0].isObject()) { | |||
5891 | { | |||
5892 | // Our JSContext should be in the right global to do unwrapping in. | |||
5893 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
5894 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
5895 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
5896 | return false; | |||
5897 | } | |||
5898 | } | |||
5899 | } else { | |||
5900 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
5901 | return false; | |||
5902 | } | |||
5903 | // NOTE: This assert does NOT call the function. | |||
5904 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSelf(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
5905 | MOZ_KnownLive(self)(self)->PassSelf(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
5906 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5906); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5906; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5907 | args.rval().setUndefined(); | |||
5908 | return true; | |||
5909 | } | |||
5910 | ||||
5911 | static const JSJitInfo passSelf_methodinfo = { | |||
5912 | { (JSJitGetterOp)passSelf }, | |||
5913 | { prototypes::id::TestExampleInterface }, | |||
5914 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5915 | JSJitInfo::Method, | |||
5916 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5917 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
5918 | false, /* isInfallible. False in setters. */ | |||
5919 | false, /* isMovable. Not relevant for setters. */ | |||
5920 | false, /* isEliminatable. Not relevant for setters. */ | |||
5921 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5922 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5923 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5924 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5925 | }; | |||
5926 | ||||
5927 | MOZ_CAN_RUN_SCRIPT static bool | |||
5928 | passNullableSelf(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
5929 | { | |||
5930 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableSelf"); | |||
5931 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5934( cx, "TestExampleInterface" , "passNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5932 | "TestExampleInterface", "passNullableSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5934( cx, "TestExampleInterface" , "passNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5933 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject5934( cx, "TestExampleInterface" , "passNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5934 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5934( cx, "TestExampleInterface" , "passNullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5935 | ||||
5936 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5937 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableSelf", 1)) { | |||
5938 | return false; | |||
5939 | } | |||
5940 | mozilla::dom::TestInterface* arg0; | |||
5941 | if (args[0].isObject()) { | |||
5942 | { | |||
5943 | // Our JSContext should be in the right global to do unwrapping in. | |||
5944 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
5945 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
5946 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
5947 | return false; | |||
5948 | } | |||
5949 | } | |||
5950 | } else if (args[0].isNullOrUndefined()) { | |||
5951 | arg0 = nullptr; | |||
5952 | } else { | |||
5953 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
5954 | return false; | |||
5955 | } | |||
5956 | // NOTE: This assert does NOT call the function. | |||
5957 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableSelf(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
5958 | MOZ_KnownLive(self)(self)->PassNullableSelf(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
5959 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5959); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5959; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5960 | args.rval().setUndefined(); | |||
5961 | return true; | |||
5962 | } | |||
5963 | ||||
5964 | static const JSJitInfo passNullableSelf_methodinfo = { | |||
5965 | { (JSJitGetterOp)passNullableSelf }, | |||
5966 | { prototypes::id::TestExampleInterface }, | |||
5967 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
5968 | JSJitInfo::Method, | |||
5969 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
5970 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
5971 | false, /* isInfallible. False in setters. */ | |||
5972 | false, /* isMovable. Not relevant for setters. */ | |||
5973 | false, /* isEliminatable. Not relevant for setters. */ | |||
5974 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
5975 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
5976 | false, /* isTypedMethod. Only relevant for methods. */ | |||
5977 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
5978 | }; | |||
5979 | ||||
5980 | MOZ_CAN_RUN_SCRIPT static bool | |||
5981 | get_nonNullSelf(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
5982 | { | |||
5983 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject5986( cx, "TestExampleInterface" , "nonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5984 | "TestExampleInterface", "nonNullSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject5986( cx, "TestExampleInterface" , "nonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5985 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject5986( cx, "TestExampleInterface" , "nonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
5986 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject5986( cx, "TestExampleInterface" , "nonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
5987 | ||||
5988 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
5989 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->NonNullSelf())); | |||
5990 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5990); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 5990; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
5991 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
5992 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 5992); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 5992; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
5993 | return false; | |||
5994 | } | |||
5995 | return true; | |||
5996 | } | |||
5997 | ||||
5998 | MOZ_CAN_RUN_SCRIPT static bool | |||
5999 | set_nonNullSelf(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
6000 | { | |||
6001 | BindingCallContext cx(cx_, "TestExampleInterface.nonNullSelf setter"); | |||
6002 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6005( cx, "TestExampleInterface" , "nonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6003 | "TestExampleInterface", "nonNullSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6005( cx, "TestExampleInterface" , "nonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6004 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject6005( cx, "TestExampleInterface" , "nonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6005 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6005( cx, "TestExampleInterface" , "nonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6006 | ||||
6007 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6008 | NonNull<mozilla::dom::TestInterface> arg0; | |||
6009 | if (args[0].isObject()) { | |||
6010 | { | |||
6011 | // Our JSContext should be in the right global to do unwrapping in. | |||
6012 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
6013 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
6014 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "TestInterface"); | |||
6015 | return false; | |||
6016 | } | |||
6017 | } | |||
6018 | } else { | |||
6019 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
6020 | return false; | |||
6021 | } | |||
6022 | // NOTE: This assert does NOT call the function. | |||
6023 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNonNullSelf(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
6024 | MOZ_KnownLive(self)(self)->SetNonNullSelf(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
6025 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6025); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6025; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6026 | ||||
6027 | return true; | |||
6028 | } | |||
6029 | ||||
6030 | static const JSJitInfo nonNullSelf_getterinfo = { | |||
6031 | { get_nonNullSelf }, | |||
6032 | { prototypes::id::TestExampleInterface }, | |||
6033 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6034 | JSJitInfo::Getter, | |||
6035 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6036 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
6037 | false, /* isInfallible. False in setters. */ | |||
6038 | false, /* isMovable. Not relevant for setters. */ | |||
6039 | false, /* isEliminatable. Not relevant for setters. */ | |||
6040 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6041 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6042 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6043 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6044 | }; | |||
6045 | static const JSJitInfo nonNullSelf_setterinfo = { | |||
6046 | { (JSJitGetterOp)set_nonNullSelf }, | |||
6047 | { prototypes::id::TestExampleInterface }, | |||
6048 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6049 | JSJitInfo::Setter, | |||
6050 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6051 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
6052 | false, /* isInfallible. False in setters. */ | |||
6053 | false, /* isMovable. Not relevant for setters. */ | |||
6054 | false, /* isEliminatable. Not relevant for setters. */ | |||
6055 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6056 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6057 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6058 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6059 | }; | |||
6060 | ||||
6061 | MOZ_CAN_RUN_SCRIPT static bool | |||
6062 | get_nullableSelf(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
6063 | { | |||
6064 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6067( cx, "TestExampleInterface" , "nullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6065 | "TestExampleInterface", "nullableSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6067( cx, "TestExampleInterface" , "nullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6066 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject6067( cx, "TestExampleInterface" , "nullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6067 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6067( cx, "TestExampleInterface" , "nullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6068 | ||||
6069 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6070 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->GetNullableSelf())); | |||
6071 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6071); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6071; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6072 | if (!result) { | |||
6073 | args.rval().setNull(); | |||
6074 | return true; | |||
6075 | } | |||
6076 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
6077 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6077); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 6077; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6078 | return false; | |||
6079 | } | |||
6080 | return true; | |||
6081 | } | |||
6082 | ||||
6083 | MOZ_CAN_RUN_SCRIPT static bool | |||
6084 | set_nullableSelf(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
6085 | { | |||
6086 | BindingCallContext cx(cx_, "TestExampleInterface.nullableSelf setter"); | |||
6087 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6090( cx, "TestExampleInterface" , "nullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6088 | "TestExampleInterface", "nullableSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6090( cx, "TestExampleInterface" , "nullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6089 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject6090( cx, "TestExampleInterface" , "nullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6090 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6090( cx, "TestExampleInterface" , "nullableSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6091 | ||||
6092 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6093 | mozilla::dom::TestInterface* arg0; | |||
6094 | if (args[0].isObject()) { | |||
6095 | { | |||
6096 | // Our JSContext should be in the right global to do unwrapping in. | |||
6097 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
6098 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
6099 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "TestInterface"); | |||
6100 | return false; | |||
6101 | } | |||
6102 | } | |||
6103 | } else if (args[0].isNullOrUndefined()) { | |||
6104 | arg0 = nullptr; | |||
6105 | } else { | |||
6106 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
6107 | return false; | |||
6108 | } | |||
6109 | // NOTE: This assert does NOT call the function. | |||
6110 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNullableSelf(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
6111 | MOZ_KnownLive(self)(self)->SetNullableSelf(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
6112 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6112); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6112; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6113 | ||||
6114 | return true; | |||
6115 | } | |||
6116 | ||||
6117 | static const JSJitInfo nullableSelf_getterinfo = { | |||
6118 | { get_nullableSelf }, | |||
6119 | { prototypes::id::TestExampleInterface }, | |||
6120 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6121 | JSJitInfo::Getter, | |||
6122 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6123 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
6124 | false, /* isInfallible. False in setters. */ | |||
6125 | false, /* isMovable. Not relevant for setters. */ | |||
6126 | false, /* isEliminatable. Not relevant for setters. */ | |||
6127 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6128 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6129 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6130 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6131 | }; | |||
6132 | static const JSJitInfo nullableSelf_setterinfo = { | |||
6133 | { (JSJitGetterOp)set_nullableSelf }, | |||
6134 | { prototypes::id::TestExampleInterface }, | |||
6135 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6136 | JSJitInfo::Setter, | |||
6137 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6138 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
6139 | false, /* isInfallible. False in setters. */ | |||
6140 | false, /* isMovable. Not relevant for setters. */ | |||
6141 | false, /* isEliminatable. Not relevant for setters. */ | |||
6142 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6143 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6144 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6145 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6146 | }; | |||
6147 | ||||
6148 | MOZ_CAN_RUN_SCRIPT static bool | |||
6149 | get_cachedSelf(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
6150 | { | |||
6151 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6154( cx, "TestExampleInterface" , "cachedSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6152 | "TestExampleInterface", "cachedSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6154( cx, "TestExampleInterface" , "cachedSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6153 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject6154( cx, "TestExampleInterface" , "cachedSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6154 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6154( cx, "TestExampleInterface" , "cachedSelf", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6155 | ||||
6156 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6157 | // Have to either root across the getter call or reget after. | |||
6158 | JS::Rooted<JSObject*> slotStorage(cx, js::UncheckedUnwrap(obj, /* stopAtWindowProxy = */ false)); | |||
6159 | MOZ_ASSERT(IsDOMObject(slotStorage))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsDOMObject(slotStorage))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsDOMObject(slotStorage)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("IsDOMObject(slotStorage)" , "../TestExampleGenBinding.cpp", 6159); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "IsDOMObject(slotStorage)" ")"); do { *((volatile int*)__null) = 6159; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6160 | const size_t slotIndex = (DOM_INSTANCE_RESERVED_SLOTS1 + 3); | |||
6161 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 6161); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 6161; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
6162 | { | |||
6163 | // Scope for cachedVal | |||
6164 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
6165 | if (!cachedVal.isUndefined()) { | |||
6166 | args.rval().set(cachedVal); | |||
6167 | // The cached value is in the compartment of slotStorage, | |||
6168 | // so wrap into the caller compartment as needed. | |||
6169 | return MaybeWrapValue(cx, args.rval()); | |||
6170 | } | |||
6171 | } | |||
6172 | ||||
6173 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->CachedSelf())); | |||
6174 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6174); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6174; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6175 | { | |||
6176 | JS::Rooted<JSObject*> conversionScope(cx, slotStorage); | |||
6177 | JSAutoRealm ar(cx, conversionScope); | |||
6178 | do { // block we break out of when done wrapping | |||
6179 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
6180 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6180); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 6180; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6181 | return false; | |||
6182 | } | |||
6183 | break; | |||
6184 | } while (false); | |||
6185 | } | |||
6186 | { // And now store things in the realm of our slotStorage. | |||
6187 | JSAutoRealm ar(cx, slotStorage); | |||
6188 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
6189 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
6190 | if (!MaybeWrapValue(cx, &storedVal)) { | |||
6191 | return false; | |||
6192 | } | |||
6193 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
6194 | PreserveWrapper(self); | |||
6195 | } | |||
6196 | // And now make sure args.rval() is in the caller realm. | |||
6197 | return MaybeWrapValue(cx, args.rval()); | |||
6198 | } | |||
6199 | ||||
6200 | static const JSJitInfo cachedSelf_getterinfo = { | |||
6201 | { get_cachedSelf }, | |||
6202 | { prototypes::id::TestExampleInterface }, | |||
6203 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6204 | JSJitInfo::Getter, | |||
6205 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
6206 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
6207 | false, /* isInfallible. False in setters. */ | |||
6208 | true, /* isMovable. Not relevant for setters. */ | |||
6209 | true, /* isEliminatable. Not relevant for setters. */ | |||
6210 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6211 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6212 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6213 | (DOM_INSTANCE_RESERVED_SLOTS1 + 3) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6214 | }; | |||
6215 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 3) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
6216 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 3) < 22, "There is no slot for us"); | |||
6217 | ||||
6218 | MOZ_CAN_RUN_SCRIPT static bool | |||
6219 | passOptionalSelf(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6220 | { | |||
6221 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalSelf"); | |||
6222 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6225( cx, "TestExampleInterface" , "passOptionalSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6223 | "TestExampleInterface", "passOptionalSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6225( cx, "TestExampleInterface" , "passOptionalSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6224 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6225( cx, "TestExampleInterface" , "passOptionalSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6225 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6225( cx, "TestExampleInterface" , "passOptionalSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6226 | ||||
6227 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6228 | Optional<mozilla::dom::TestInterface*> arg0; | |||
6229 | if (args.hasDefined(0)) { | |||
6230 | arg0.Construct(); | |||
6231 | if (args[0].isObject()) { | |||
6232 | { | |||
6233 | // Our JSContext should be in the right global to do unwrapping in. | |||
6234 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0.Value(), cx); | |||
6235 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
6236 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
6237 | return false; | |||
6238 | } | |||
6239 | } | |||
6240 | } else if (args[0].isNullOrUndefined()) { | |||
6241 | arg0.Value() = nullptr; | |||
6242 | } else { | |||
6243 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
6244 | return false; | |||
6245 | } | |||
6246 | } | |||
6247 | // NOTE: This assert does NOT call the function. | |||
6248 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSelf(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
6249 | MOZ_KnownLive(self)(self)->PassOptionalSelf(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
6250 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6250); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6250; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6251 | args.rval().setUndefined(); | |||
6252 | return true; | |||
6253 | } | |||
6254 | ||||
6255 | static const JSJitInfo passOptionalSelf_methodinfo = { | |||
6256 | { (JSJitGetterOp)passOptionalSelf }, | |||
6257 | { prototypes::id::TestExampleInterface }, | |||
6258 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6259 | JSJitInfo::Method, | |||
6260 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6261 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
6262 | false, /* isInfallible. False in setters. */ | |||
6263 | false, /* isMovable. Not relevant for setters. */ | |||
6264 | false, /* isEliminatable. Not relevant for setters. */ | |||
6265 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6266 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6267 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6268 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6269 | }; | |||
6270 | ||||
6271 | MOZ_CAN_RUN_SCRIPT static bool | |||
6272 | passOptionalNonNullSelf(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6273 | { | |||
6274 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNonNullSelf"); | |||
6275 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6278( cx, "TestExampleInterface" , "passOptionalNonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6276 | "TestExampleInterface", "passOptionalNonNullSelf", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6278( cx, "TestExampleInterface" , "passOptionalNonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6277 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6278( cx, "TestExampleInterface" , "passOptionalNonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6278 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6278( cx, "TestExampleInterface" , "passOptionalNonNullSelf", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6279 | ||||
6280 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6281 | Optional<NonNull<mozilla::dom::TestInterface>> arg0; | |||
6282 | if (args.hasDefined(0)) { | |||
6283 | arg0.Construct(); | |||
6284 | if (args[0].isObject()) { | |||
6285 | { | |||
6286 | // Our JSContext should be in the right global to do unwrapping in. | |||
6287 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0.Value(), cx); | |||
6288 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
6289 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
6290 | return false; | |||
6291 | } | |||
6292 | } | |||
6293 | } else { | |||
6294 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
6295 | return false; | |||
6296 | } | |||
6297 | } | |||
6298 | // NOTE: This assert does NOT call the function. | |||
6299 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNonNullSelf(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))))>, "Should be returning void here"); | |||
6300 | MOZ_KnownLive(self)(self)->PassOptionalNonNullSelf(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))); | |||
6301 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6301); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6301; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6302 | args.rval().setUndefined(); | |||
6303 | return true; | |||
6304 | } | |||
6305 | ||||
6306 | static const JSJitInfo passOptionalNonNullSelf_methodinfo = { | |||
6307 | { (JSJitGetterOp)passOptionalNonNullSelf }, | |||
6308 | { prototypes::id::TestExampleInterface }, | |||
6309 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6310 | JSJitInfo::Method, | |||
6311 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6312 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
6313 | false, /* isInfallible. False in setters. */ | |||
6314 | false, /* isMovable. Not relevant for setters. */ | |||
6315 | false, /* isEliminatable. Not relevant for setters. */ | |||
6316 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6317 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6318 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6319 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6320 | }; | |||
6321 | ||||
6322 | MOZ_CAN_RUN_SCRIPT static bool | |||
6323 | passOptionalSelfWithDefault(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6324 | { | |||
6325 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalSelfWithDefault"); | |||
6326 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6329( cx, "TestExampleInterface" , "passOptionalSelfWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6327 | "TestExampleInterface", "passOptionalSelfWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6329( cx, "TestExampleInterface" , "passOptionalSelfWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6328 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6329( cx, "TestExampleInterface" , "passOptionalSelfWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6329 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6329( cx, "TestExampleInterface" , "passOptionalSelfWithDefault", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
6330 | ||||
6331 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6332 | mozilla::dom::TestInterface* arg0; | |||
6333 | if (args.hasDefined(0)) { | |||
6334 | if (args[0].isObject()) { | |||
6335 | { | |||
6336 | // Our JSContext should be in the right global to do unwrapping in. | |||
6337 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
6338 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
6339 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
6340 | return false; | |||
6341 | } | |||
6342 | } | |||
6343 | } else if (args[0].isNullOrUndefined()) { | |||
6344 | arg0 = nullptr; | |||
6345 | } else { | |||
6346 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
6347 | return false; | |||
6348 | } | |||
6349 | } else { | |||
6350 | arg0 = nullptr; | |||
6351 | } | |||
6352 | // NOTE: This assert does NOT call the function. | |||
6353 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSelfWithDefault(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
6354 | MOZ_KnownLive(self)(self)->PassOptionalSelfWithDefault(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
6355 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6355); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6355; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6356 | args.rval().setUndefined(); | |||
6357 | return true; | |||
6358 | } | |||
6359 | ||||
6360 | static const JSJitInfo passOptionalSelfWithDefault_methodinfo = { | |||
6361 | { (JSJitGetterOp)passOptionalSelfWithDefault }, | |||
6362 | { prototypes::id::TestExampleInterface }, | |||
6363 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6364 | JSJitInfo::Method, | |||
6365 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6366 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
6367 | false, /* isInfallible. False in setters. */ | |||
6368 | false, /* isMovable. Not relevant for setters. */ | |||
6369 | false, /* isEliminatable. Not relevant for setters. */ | |||
6370 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6371 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6372 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6373 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6374 | }; | |||
6375 | ||||
6376 | MOZ_CAN_RUN_SCRIPT static bool | |||
6377 | receiveNonWrapperCacheInterface(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6378 | { | |||
6379 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6382( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6380 | "TestExampleInterface", "receiveNonWrapperCacheInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6382( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6381 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6382( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6382 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6382( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
6383 | ||||
6384 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6385 | auto result(StrongOrRawPtr<mozilla::dom::TestNonWrapperCacheInterface>(MOZ_KnownLive(self)(self)->ReceiveNonWrapperCacheInterface())); | |||
6386 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6386); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6386; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6387 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
6388 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
6389 | if (!WrapNewBindingNonWrapperCachedObject(cx, obj, result, args.rval())) { | |||
6390 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6390); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 6390; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6391 | return false; | |||
6392 | } | |||
6393 | return true; | |||
6394 | } | |||
6395 | ||||
6396 | static const JSJitInfo receiveNonWrapperCacheInterface_methodinfo = { | |||
6397 | { (JSJitGetterOp)receiveNonWrapperCacheInterface }, | |||
6398 | { prototypes::id::TestExampleInterface }, | |||
6399 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6400 | JSJitInfo::Method, | |||
6401 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6402 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
6403 | false, /* isInfallible. False in setters. */ | |||
6404 | false, /* isMovable. Not relevant for setters. */ | |||
6405 | false, /* isEliminatable. Not relevant for setters. */ | |||
6406 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6407 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6408 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6409 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6410 | }; | |||
6411 | ||||
6412 | MOZ_CAN_RUN_SCRIPT static bool | |||
6413 | receiveNullableNonWrapperCacheInterface(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6414 | { | |||
6415 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6418( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6416 | "TestExampleInterface", "receiveNullableNonWrapperCacheInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6418( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6417 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6418( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6418 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6418( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
6419 | ||||
6420 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6421 | auto result(StrongOrRawPtr<mozilla::dom::TestNonWrapperCacheInterface>(MOZ_KnownLive(self)(self)->ReceiveNullableNonWrapperCacheInterface())); | |||
6422 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6422); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6422; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6423 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
6424 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
6425 | if (!result) { | |||
6426 | args.rval().setNull(); | |||
6427 | return true; | |||
6428 | } | |||
6429 | if (!WrapNewBindingNonWrapperCachedObject(cx, obj, result, args.rval())) { | |||
6430 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6430); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 6430; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6431 | return false; | |||
6432 | } | |||
6433 | return true; | |||
6434 | } | |||
6435 | ||||
6436 | static const JSJitInfo receiveNullableNonWrapperCacheInterface_methodinfo = { | |||
6437 | { (JSJitGetterOp)receiveNullableNonWrapperCacheInterface }, | |||
6438 | { prototypes::id::TestExampleInterface }, | |||
6439 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6440 | JSJitInfo::Method, | |||
6441 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6442 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
6443 | false, /* isInfallible. False in setters. */ | |||
6444 | false, /* isMovable. Not relevant for setters. */ | |||
6445 | false, /* isEliminatable. Not relevant for setters. */ | |||
6446 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6447 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6448 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6449 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6450 | }; | |||
6451 | ||||
6452 | MOZ_CAN_RUN_SCRIPT static bool | |||
6453 | receiveNonWrapperCacheInterfaceSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6454 | { | |||
6455 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6458( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6456 | "TestExampleInterface", "receiveNonWrapperCacheInterfaceSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6458( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6457 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6458( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6458 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6458( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
6459 | ||||
6460 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6461 | nsTArray<StrongPtrForMember<mozilla::dom::TestNonWrapperCacheInterface>> result; | |||
6462 | // NOTE: This assert does NOT call the function. | |||
6463 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNonWrapperCacheInterfaceSequence(result))>, "Should be returning void here"); | |||
6464 | MOZ_KnownLive(self)(self)->ReceiveNonWrapperCacheInterfaceSequence(result); | |||
6465 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6465); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6465; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6466 | ||||
6467 | uint32_t length = result.Length(); | |||
6468 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
6469 | if (!returnArray) { | |||
6470 | return false; | |||
6471 | } | |||
6472 | // Scope for 'tmp' | |||
6473 | { | |||
6474 | JS::Rooted<JS::Value> tmp(cx); | |||
6475 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
6476 | // Control block to let us common up the JS_DefineElement calls when there | |||
6477 | // are different ways to succeed at wrapping the object. | |||
6478 | do { | |||
6479 | if (!WrapNewBindingNonWrapperCachedObject(cx, returnArray, result[sequenceIdx0], &tmp)) { | |||
6480 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6480); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 6480; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6481 | return false; | |||
6482 | } | |||
6483 | break; | |||
6484 | } while (false); | |||
6485 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
6486 | JSPROP_ENUMERATE)) { | |||
6487 | return false; | |||
6488 | } | |||
6489 | } | |||
6490 | } | |||
6491 | args.rval().setObject(*returnArray); | |||
6492 | return true; | |||
6493 | } | |||
6494 | ||||
6495 | static const JSJitInfo receiveNonWrapperCacheInterfaceSequence_methodinfo = { | |||
6496 | { (JSJitGetterOp)receiveNonWrapperCacheInterfaceSequence }, | |||
6497 | { prototypes::id::TestExampleInterface }, | |||
6498 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6499 | JSJitInfo::Method, | |||
6500 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6501 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
6502 | false, /* isInfallible. False in setters. */ | |||
6503 | false, /* isMovable. Not relevant for setters. */ | |||
6504 | false, /* isEliminatable. Not relevant for setters. */ | |||
6505 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6506 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6507 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6508 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6509 | }; | |||
6510 | ||||
6511 | MOZ_CAN_RUN_SCRIPT static bool | |||
6512 | receiveNullableNonWrapperCacheInterfaceSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6513 | { | |||
6514 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6517( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6515 | "TestExampleInterface", "receiveNullableNonWrapperCacheInterfaceSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6517( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6516 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6517( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6517 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6517( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
6518 | ||||
6519 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6520 | nsTArray<StrongPtrForMember<mozilla::dom::TestNonWrapperCacheInterface>> result; | |||
6521 | // NOTE: This assert does NOT call the function. | |||
6522 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableNonWrapperCacheInterfaceSequence(result))>, "Should be returning void here"); | |||
6523 | MOZ_KnownLive(self)(self)->ReceiveNullableNonWrapperCacheInterfaceSequence(result); | |||
6524 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6524); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6524; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6525 | ||||
6526 | uint32_t length = result.Length(); | |||
6527 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
6528 | if (!returnArray) { | |||
6529 | return false; | |||
6530 | } | |||
6531 | // Scope for 'tmp' | |||
6532 | { | |||
6533 | JS::Rooted<JS::Value> tmp(cx); | |||
6534 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
6535 | // Control block to let us common up the JS_DefineElement calls when there | |||
6536 | // are different ways to succeed at wrapping the object. | |||
6537 | do { | |||
6538 | if (!result[sequenceIdx0]) { | |||
6539 | tmp.setNull(); | |||
6540 | break; | |||
6541 | } | |||
6542 | if (!WrapNewBindingNonWrapperCachedObject(cx, returnArray, result[sequenceIdx0], &tmp)) { | |||
6543 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6543); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 6543; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6544 | return false; | |||
6545 | } | |||
6546 | break; | |||
6547 | } while (false); | |||
6548 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
6549 | JSPROP_ENUMERATE)) { | |||
6550 | return false; | |||
6551 | } | |||
6552 | } | |||
6553 | } | |||
6554 | args.rval().setObject(*returnArray); | |||
6555 | return true; | |||
6556 | } | |||
6557 | ||||
6558 | static const JSJitInfo receiveNullableNonWrapperCacheInterfaceSequence_methodinfo = { | |||
6559 | { (JSJitGetterOp)receiveNullableNonWrapperCacheInterfaceSequence }, | |||
6560 | { prototypes::id::TestExampleInterface }, | |||
6561 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6562 | JSJitInfo::Method, | |||
6563 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6564 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
6565 | false, /* isInfallible. False in setters. */ | |||
6566 | false, /* isMovable. Not relevant for setters. */ | |||
6567 | false, /* isEliminatable. Not relevant for setters. */ | |||
6568 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6569 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6570 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6571 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6572 | }; | |||
6573 | ||||
6574 | MOZ_CAN_RUN_SCRIPT static bool | |||
6575 | receiveNonWrapperCacheInterfaceNullableSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6576 | { | |||
6577 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6580( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterfaceNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6578 | "TestExampleInterface", "receiveNonWrapperCacheInterfaceNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6580( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterfaceNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6579 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6580( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterfaceNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6580 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6580( cx, "TestExampleInterface" , "receiveNonWrapperCacheInterfaceNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
6581 | ||||
6582 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6583 | Nullable<nsTArray<StrongPtrForMember<mozilla::dom::TestNonWrapperCacheInterface>>> result; | |||
6584 | // NOTE: This assert does NOT call the function. | |||
6585 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNonWrapperCacheInterfaceNullableSequence(result))>, "Should be returning void here"); | |||
6586 | MOZ_KnownLive(self)(self)->ReceiveNonWrapperCacheInterfaceNullableSequence(result); | |||
6587 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6587); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6587; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6588 | ||||
6589 | if (result.IsNull()) { | |||
6590 | args.rval().setNull(); | |||
6591 | return true; | |||
6592 | } | |||
6593 | ||||
6594 | uint32_t length = result.Value().Length(); | |||
6595 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
6596 | if (!returnArray) { | |||
6597 | return false; | |||
6598 | } | |||
6599 | // Scope for 'tmp' | |||
6600 | { | |||
6601 | JS::Rooted<JS::Value> tmp(cx); | |||
6602 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
6603 | // Control block to let us common up the JS_DefineElement calls when there | |||
6604 | // are different ways to succeed at wrapping the object. | |||
6605 | do { | |||
6606 | if (!WrapNewBindingNonWrapperCachedObject(cx, returnArray, result.Value()[sequenceIdx0], &tmp)) { | |||
6607 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6607); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 6607; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6608 | return false; | |||
6609 | } | |||
6610 | break; | |||
6611 | } while (false); | |||
6612 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
6613 | JSPROP_ENUMERATE)) { | |||
6614 | return false; | |||
6615 | } | |||
6616 | } | |||
6617 | } | |||
6618 | args.rval().setObject(*returnArray); | |||
6619 | return true; | |||
6620 | } | |||
6621 | ||||
6622 | static const JSJitInfo receiveNonWrapperCacheInterfaceNullableSequence_methodinfo = { | |||
6623 | { (JSJitGetterOp)receiveNonWrapperCacheInterfaceNullableSequence }, | |||
6624 | { prototypes::id::TestExampleInterface }, | |||
6625 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6626 | JSJitInfo::Method, | |||
6627 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6628 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
6629 | false, /* isInfallible. False in setters. */ | |||
6630 | false, /* isMovable. Not relevant for setters. */ | |||
6631 | false, /* isEliminatable. Not relevant for setters. */ | |||
6632 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6633 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6634 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6635 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6636 | }; | |||
6637 | ||||
6638 | MOZ_CAN_RUN_SCRIPT static bool | |||
6639 | receiveNullableNonWrapperCacheInterfaceNullableSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6640 | { | |||
6641 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6644( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterfaceNullableSequence", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
6642 | "TestExampleInterface", "receiveNullableNonWrapperCacheInterfaceNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6644( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterfaceNullableSequence", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
6643 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6644( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterfaceNullableSequence", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
6644 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6644( cx, "TestExampleInterface" , "receiveNullableNonWrapperCacheInterfaceNullableSequence", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
6645 | ||||
6646 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6647 | Nullable<nsTArray<StrongPtrForMember<mozilla::dom::TestNonWrapperCacheInterface>>> result; | |||
6648 | // NOTE: This assert does NOT call the function. | |||
6649 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableNonWrapperCacheInterfaceNullableSequence(result))>, "Should be returning void here"); | |||
6650 | MOZ_KnownLive(self)(self)->ReceiveNullableNonWrapperCacheInterfaceNullableSequence(result); | |||
6651 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6651); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6651; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6652 | ||||
6653 | if (result.IsNull()) { | |||
6654 | args.rval().setNull(); | |||
6655 | return true; | |||
6656 | } | |||
6657 | ||||
6658 | uint32_t length = result.Value().Length(); | |||
6659 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
6660 | if (!returnArray) { | |||
6661 | return false; | |||
6662 | } | |||
6663 | // Scope for 'tmp' | |||
6664 | { | |||
6665 | JS::Rooted<JS::Value> tmp(cx); | |||
6666 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
6667 | // Control block to let us common up the JS_DefineElement calls when there | |||
6668 | // are different ways to succeed at wrapping the object. | |||
6669 | do { | |||
6670 | if (!result.Value()[sequenceIdx0]) { | |||
6671 | tmp.setNull(); | |||
6672 | break; | |||
6673 | } | |||
6674 | if (!WrapNewBindingNonWrapperCachedObject(cx, returnArray, result.Value()[sequenceIdx0], &tmp)) { | |||
6675 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6675); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 6675; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
6676 | return false; | |||
6677 | } | |||
6678 | break; | |||
6679 | } while (false); | |||
6680 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
6681 | JSPROP_ENUMERATE)) { | |||
6682 | return false; | |||
6683 | } | |||
6684 | } | |||
6685 | } | |||
6686 | args.rval().setObject(*returnArray); | |||
6687 | return true; | |||
6688 | } | |||
6689 | ||||
6690 | static const JSJitInfo receiveNullableNonWrapperCacheInterfaceNullableSequence_methodinfo = { | |||
6691 | { (JSJitGetterOp)receiveNullableNonWrapperCacheInterfaceNullableSequence }, | |||
6692 | { prototypes::id::TestExampleInterface }, | |||
6693 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6694 | JSJitInfo::Method, | |||
6695 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6696 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
6697 | false, /* isInfallible. False in setters. */ | |||
6698 | false, /* isMovable. Not relevant for setters. */ | |||
6699 | false, /* isEliminatable. Not relevant for setters. */ | |||
6700 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6701 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6702 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6703 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6704 | }; | |||
6705 | ||||
6706 | MOZ_CAN_RUN_SCRIPT static bool | |||
6707 | receiveExternal(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6708 | { | |||
6709 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6712( cx, "TestExampleInterface" , "receiveExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6710 | "TestExampleInterface", "receiveExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6712( cx, "TestExampleInterface" , "receiveExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6711 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6712( cx, "TestExampleInterface" , "receiveExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6712 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6712( cx, "TestExampleInterface" , "receiveExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6713 | ||||
6714 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6715 | auto result(StrongOrRawPtr<mozilla::dom::TestExternalInterface>(MOZ_KnownLive(self)(self)->ReceiveExternal())); | |||
6716 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6716); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6716; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6717 | if (!WrapObject(cx, result, args.rval())) { | |||
6718 | return false; | |||
6719 | } | |||
6720 | return true; | |||
6721 | } | |||
6722 | ||||
6723 | static const JSJitInfo receiveExternal_methodinfo = { | |||
6724 | { (JSJitGetterOp)receiveExternal }, | |||
6725 | { prototypes::id::TestExampleInterface }, | |||
6726 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6727 | JSJitInfo::Method, | |||
6728 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6729 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
6730 | false, /* isInfallible. False in setters. */ | |||
6731 | false, /* isMovable. Not relevant for setters. */ | |||
6732 | false, /* isEliminatable. Not relevant for setters. */ | |||
6733 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6734 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6735 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6736 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6737 | }; | |||
6738 | ||||
6739 | MOZ_CAN_RUN_SCRIPT static bool | |||
6740 | receiveNullableExternal(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6741 | { | |||
6742 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6745( cx, "TestExampleInterface" , "receiveNullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6743 | "TestExampleInterface", "receiveNullableExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6745( cx, "TestExampleInterface" , "receiveNullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6744 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6745( cx, "TestExampleInterface" , "receiveNullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6745 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6745( cx, "TestExampleInterface" , "receiveNullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6746 | ||||
6747 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6748 | auto result(StrongOrRawPtr<mozilla::dom::TestExternalInterface>(MOZ_KnownLive(self)(self)->ReceiveNullableExternal())); | |||
6749 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6749); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6749; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6750 | if (!result) { | |||
6751 | args.rval().setNull(); | |||
6752 | return true; | |||
6753 | } | |||
6754 | if (!WrapObject(cx, result, args.rval())) { | |||
6755 | return false; | |||
6756 | } | |||
6757 | return true; | |||
6758 | } | |||
6759 | ||||
6760 | static const JSJitInfo receiveNullableExternal_methodinfo = { | |||
6761 | { (JSJitGetterOp)receiveNullableExternal }, | |||
6762 | { prototypes::id::TestExampleInterface }, | |||
6763 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6764 | JSJitInfo::Method, | |||
6765 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6766 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
6767 | false, /* isInfallible. False in setters. */ | |||
6768 | false, /* isMovable. Not relevant for setters. */ | |||
6769 | false, /* isEliminatable. Not relevant for setters. */ | |||
6770 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6771 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6772 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6773 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6774 | }; | |||
6775 | ||||
6776 | MOZ_CAN_RUN_SCRIPT static bool | |||
6777 | receiveWeakExternal(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6778 | { | |||
6779 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6782( cx, "TestExampleInterface" , "receiveWeakExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6780 | "TestExampleInterface", "receiveWeakExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6782( cx, "TestExampleInterface" , "receiveWeakExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6781 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6782( cx, "TestExampleInterface" , "receiveWeakExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6782 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6782( cx, "TestExampleInterface" , "receiveWeakExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6783 | ||||
6784 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6785 | auto result(StrongOrRawPtr<mozilla::dom::TestExternalInterface>(MOZ_KnownLive(self)(self)->ReceiveWeakExternal())); | |||
6786 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6786); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6786; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6787 | if (!WrapObject(cx, result, args.rval())) { | |||
6788 | return false; | |||
6789 | } | |||
6790 | return true; | |||
6791 | } | |||
6792 | ||||
6793 | static const JSJitInfo receiveWeakExternal_methodinfo = { | |||
6794 | { (JSJitGetterOp)receiveWeakExternal }, | |||
6795 | { prototypes::id::TestExampleInterface }, | |||
6796 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6797 | JSJitInfo::Method, | |||
6798 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6799 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
6800 | false, /* isInfallible. False in setters. */ | |||
6801 | false, /* isMovable. Not relevant for setters. */ | |||
6802 | false, /* isEliminatable. Not relevant for setters. */ | |||
6803 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6804 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6805 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6806 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6807 | }; | |||
6808 | ||||
6809 | MOZ_CAN_RUN_SCRIPT static bool | |||
6810 | receiveWeakNullableExternal(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6811 | { | |||
6812 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6815( cx, "TestExampleInterface" , "receiveWeakNullableExternal", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6813 | "TestExampleInterface", "receiveWeakNullableExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6815( cx, "TestExampleInterface" , "receiveWeakNullableExternal", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6814 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6815( cx, "TestExampleInterface" , "receiveWeakNullableExternal", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
6815 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6815( cx, "TestExampleInterface" , "receiveWeakNullableExternal", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
6816 | ||||
6817 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6818 | auto result(StrongOrRawPtr<mozilla::dom::TestExternalInterface>(MOZ_KnownLive(self)(self)->ReceiveWeakNullableExternal())); | |||
6819 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6819); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6819; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6820 | if (!result) { | |||
6821 | args.rval().setNull(); | |||
6822 | return true; | |||
6823 | } | |||
6824 | if (!WrapObject(cx, result, args.rval())) { | |||
6825 | return false; | |||
6826 | } | |||
6827 | return true; | |||
6828 | } | |||
6829 | ||||
6830 | static const JSJitInfo receiveWeakNullableExternal_methodinfo = { | |||
6831 | { (JSJitGetterOp)receiveWeakNullableExternal }, | |||
6832 | { prototypes::id::TestExampleInterface }, | |||
6833 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6834 | JSJitInfo::Method, | |||
6835 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6836 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
6837 | false, /* isInfallible. False in setters. */ | |||
6838 | false, /* isMovable. Not relevant for setters. */ | |||
6839 | false, /* isEliminatable. Not relevant for setters. */ | |||
6840 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6841 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6842 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6843 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6844 | }; | |||
6845 | ||||
6846 | MOZ_CAN_RUN_SCRIPT static bool | |||
6847 | passExternal(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6848 | { | |||
6849 | BindingCallContext cx(cx_, "TestExampleInterface.passExternal"); | |||
6850 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6853( cx, "TestExampleInterface" , "passExternal", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6851 | "TestExampleInterface", "passExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6853( cx, "TestExampleInterface" , "passExternal", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6852 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6853( cx, "TestExampleInterface" , "passExternal", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6853 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6853( cx, "TestExampleInterface" , "passExternal", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6854 | ||||
6855 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6856 | if (!args.requireAtLeast(cx, "TestExampleInterface.passExternal", 1)) { | |||
6857 | return false; | |||
6858 | } | |||
6859 | mozilla::dom::TestExternalInterface* arg0; | |||
6860 | RefPtr<mozilla::dom::TestExternalInterface> arg0_holder; | |||
6861 | if (args[0].isObject()) { | |||
6862 | JS::Rooted<JSObject*> source(cx, &args[0].toObject()); | |||
6863 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder )))), 0)))) { | |||
6864 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestExternalInterface"); | |||
6865 | return false; | |||
6866 | } | |||
6867 | MOZ_ASSERT(arg0_holder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(arg0_holder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(arg0_holder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("arg0_holder", "../TestExampleGenBinding.cpp" , 6867); AnnotateMozCrashReason("MOZ_ASSERT" "(" "arg0_holder" ")"); do { *((volatile int*)__null) = 6867; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
6868 | arg0 = arg0_holder; | |||
6869 | } else { | |||
6870 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
6871 | return false; | |||
6872 | } | |||
6873 | // NOTE: This assert does NOT call the function. | |||
6874 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassExternal(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
6875 | MOZ_KnownLive(self)(self)->PassExternal(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
6876 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6876); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6876; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6877 | args.rval().setUndefined(); | |||
6878 | return true; | |||
6879 | } | |||
6880 | ||||
6881 | static const JSJitInfo passExternal_methodinfo = { | |||
6882 | { (JSJitGetterOp)passExternal }, | |||
6883 | { prototypes::id::TestExampleInterface }, | |||
6884 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6885 | JSJitInfo::Method, | |||
6886 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6887 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
6888 | false, /* isInfallible. False in setters. */ | |||
6889 | false, /* isMovable. Not relevant for setters. */ | |||
6890 | false, /* isEliminatable. Not relevant for setters. */ | |||
6891 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6892 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6893 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6894 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6895 | }; | |||
6896 | ||||
6897 | MOZ_CAN_RUN_SCRIPT static bool | |||
6898 | passNullableExternal(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
6899 | { | |||
6900 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableExternal"); | |||
6901 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6904( cx, "TestExampleInterface" , "passNullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6902 | "TestExampleInterface", "passNullableExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6904( cx, "TestExampleInterface" , "passNullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6903 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject6904( cx, "TestExampleInterface" , "passNullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6904 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6904( cx, "TestExampleInterface" , "passNullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6905 | ||||
6906 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6907 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableExternal", 1)) { | |||
6908 | return false; | |||
6909 | } | |||
6910 | mozilla::dom::TestExternalInterface* arg0; | |||
6911 | RefPtr<mozilla::dom::TestExternalInterface> arg0_holder; | |||
6912 | if (args[0].isObject()) { | |||
6913 | JS::Rooted<JSObject*> source(cx, &args[0].toObject()); | |||
6914 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder )))), 0)))) { | |||
6915 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestExternalInterface"); | |||
6916 | return false; | |||
6917 | } | |||
6918 | MOZ_ASSERT(arg0_holder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(arg0_holder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(arg0_holder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("arg0_holder", "../TestExampleGenBinding.cpp" , 6918); AnnotateMozCrashReason("MOZ_ASSERT" "(" "arg0_holder" ")"); do { *((volatile int*)__null) = 6918; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
6919 | arg0 = arg0_holder; | |||
6920 | } else if (args[0].isNullOrUndefined()) { | |||
6921 | arg0 = nullptr; | |||
6922 | } else { | |||
6923 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
6924 | return false; | |||
6925 | } | |||
6926 | // NOTE: This assert does NOT call the function. | |||
6927 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableExternal(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
6928 | MOZ_KnownLive(self)(self)->PassNullableExternal(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
6929 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6929); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6929; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6930 | args.rval().setUndefined(); | |||
6931 | return true; | |||
6932 | } | |||
6933 | ||||
6934 | static const JSJitInfo passNullableExternal_methodinfo = { | |||
6935 | { (JSJitGetterOp)passNullableExternal }, | |||
6936 | { prototypes::id::TestExampleInterface }, | |||
6937 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
6938 | JSJitInfo::Method, | |||
6939 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
6940 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
6941 | false, /* isInfallible. False in setters. */ | |||
6942 | false, /* isMovable. Not relevant for setters. */ | |||
6943 | false, /* isEliminatable. Not relevant for setters. */ | |||
6944 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
6945 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
6946 | false, /* isTypedMethod. Only relevant for methods. */ | |||
6947 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
6948 | }; | |||
6949 | ||||
6950 | MOZ_CAN_RUN_SCRIPT static bool | |||
6951 | get_nonNullExternal(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
6952 | { | |||
6953 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6956( cx, "TestExampleInterface" , "nonNullExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6954 | "TestExampleInterface", "nonNullExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6956( cx, "TestExampleInterface" , "nonNullExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6955 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject6956( cx, "TestExampleInterface" , "nonNullExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6956 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6956( cx, "TestExampleInterface" , "nonNullExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6957 | ||||
6958 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6959 | auto result(StrongOrRawPtr<mozilla::dom::TestExternalInterface>(MOZ_KnownLive(self)(self)->NonNullExternal())); | |||
6960 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6960); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6960; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6961 | if (!WrapObject(cx, result, args.rval())) { | |||
6962 | return false; | |||
6963 | } | |||
6964 | return true; | |||
6965 | } | |||
6966 | ||||
6967 | MOZ_CAN_RUN_SCRIPT static bool | |||
6968 | set_nonNullExternal(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
6969 | { | |||
6970 | BindingCallContext cx(cx_, "TestExampleInterface.nonNullExternal setter"); | |||
6971 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject6974( cx, "TestExampleInterface" , "nonNullExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6972 | "TestExampleInterface", "nonNullExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject6974( cx, "TestExampleInterface" , "nonNullExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6973 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject6974( cx, "TestExampleInterface" , "nonNullExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
6974 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject6974( cx, "TestExampleInterface" , "nonNullExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
6975 | ||||
6976 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
6977 | mozilla::dom::TestExternalInterface* arg0; | |||
6978 | RefPtr<mozilla::dom::TestExternalInterface> arg0_holder; | |||
6979 | if (args[0].isObject()) { | |||
6980 | JS::Rooted<JSObject*> source(cx, &args[0].toObject()); | |||
6981 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder )))), 0)))) { | |||
6982 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "TestExternalInterface"); | |||
6983 | return false; | |||
6984 | } | |||
6985 | MOZ_ASSERT(arg0_holder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(arg0_holder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(arg0_holder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("arg0_holder", "../TestExampleGenBinding.cpp" , 6985); AnnotateMozCrashReason("MOZ_ASSERT" "(" "arg0_holder" ")"); do { *((volatile int*)__null) = 6985; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
6986 | arg0 = arg0_holder; | |||
6987 | } else { | |||
6988 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
6989 | return false; | |||
6990 | } | |||
6991 | // NOTE: This assert does NOT call the function. | |||
6992 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNonNullExternal(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
6993 | MOZ_KnownLive(self)(self)->SetNonNullExternal(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
6994 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 6994); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 6994; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
6995 | ||||
6996 | return true; | |||
6997 | } | |||
6998 | ||||
6999 | static const JSJitInfo nonNullExternal_getterinfo = { | |||
7000 | { get_nonNullExternal }, | |||
7001 | { prototypes::id::TestExampleInterface }, | |||
7002 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7003 | JSJitInfo::Getter, | |||
7004 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7005 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
7006 | false, /* isInfallible. False in setters. */ | |||
7007 | false, /* isMovable. Not relevant for setters. */ | |||
7008 | false, /* isEliminatable. Not relevant for setters. */ | |||
7009 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7010 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7011 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7012 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7013 | }; | |||
7014 | static const JSJitInfo nonNullExternal_setterinfo = { | |||
7015 | { (JSJitGetterOp)set_nonNullExternal }, | |||
7016 | { prototypes::id::TestExampleInterface }, | |||
7017 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7018 | JSJitInfo::Setter, | |||
7019 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7020 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7021 | false, /* isInfallible. False in setters. */ | |||
7022 | false, /* isMovable. Not relevant for setters. */ | |||
7023 | false, /* isEliminatable. Not relevant for setters. */ | |||
7024 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7025 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7026 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7027 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7028 | }; | |||
7029 | ||||
7030 | MOZ_CAN_RUN_SCRIPT static bool | |||
7031 | get_nullableExternal(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
7032 | { | |||
7033 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7036( cx, "TestExampleInterface" , "nullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7034 | "TestExampleInterface", "nullableExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7036( cx, "TestExampleInterface" , "nullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7035 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject7036( cx, "TestExampleInterface" , "nullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7036 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7036( cx, "TestExampleInterface" , "nullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
7037 | ||||
7038 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7039 | auto result(StrongOrRawPtr<mozilla::dom::TestExternalInterface>(MOZ_KnownLive(self)(self)->GetNullableExternal())); | |||
7040 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7040); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7040; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7041 | if (!result) { | |||
7042 | args.rval().setNull(); | |||
7043 | return true; | |||
7044 | } | |||
7045 | if (!WrapObject(cx, result, args.rval())) { | |||
7046 | return false; | |||
7047 | } | |||
7048 | return true; | |||
7049 | } | |||
7050 | ||||
7051 | MOZ_CAN_RUN_SCRIPT static bool | |||
7052 | set_nullableExternal(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
7053 | { | |||
7054 | BindingCallContext cx(cx_, "TestExampleInterface.nullableExternal setter"); | |||
7055 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7058( cx, "TestExampleInterface" , "nullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7056 | "TestExampleInterface", "nullableExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7058( cx, "TestExampleInterface" , "nullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7057 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject7058( cx, "TestExampleInterface" , "nullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7058 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7058( cx, "TestExampleInterface" , "nullableExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
7059 | ||||
7060 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7061 | mozilla::dom::TestExternalInterface* arg0; | |||
7062 | RefPtr<mozilla::dom::TestExternalInterface> arg0_holder; | |||
7063 | if (args[0].isObject()) { | |||
7064 | JS::Rooted<JSObject*> source(cx, &args[0].toObject()); | |||
7065 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder )))), 0)))) { | |||
7066 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "TestExternalInterface"); | |||
7067 | return false; | |||
7068 | } | |||
7069 | MOZ_ASSERT(arg0_holder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(arg0_holder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(arg0_holder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("arg0_holder", "../TestExampleGenBinding.cpp" , 7069); AnnotateMozCrashReason("MOZ_ASSERT" "(" "arg0_holder" ")"); do { *((volatile int*)__null) = 7069; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
7070 | arg0 = arg0_holder; | |||
7071 | } else if (args[0].isNullOrUndefined()) { | |||
7072 | arg0 = nullptr; | |||
7073 | } else { | |||
7074 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
7075 | return false; | |||
7076 | } | |||
7077 | // NOTE: This assert does NOT call the function. | |||
7078 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNullableExternal(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
7079 | MOZ_KnownLive(self)(self)->SetNullableExternal(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
7080 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7080); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7080; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7081 | ||||
7082 | return true; | |||
7083 | } | |||
7084 | ||||
7085 | static const JSJitInfo nullableExternal_getterinfo = { | |||
7086 | { get_nullableExternal }, | |||
7087 | { prototypes::id::TestExampleInterface }, | |||
7088 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7089 | JSJitInfo::Getter, | |||
7090 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7091 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
7092 | false, /* isInfallible. False in setters. */ | |||
7093 | false, /* isMovable. Not relevant for setters. */ | |||
7094 | false, /* isEliminatable. Not relevant for setters. */ | |||
7095 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7096 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7097 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7098 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7099 | }; | |||
7100 | static const JSJitInfo nullableExternal_setterinfo = { | |||
7101 | { (JSJitGetterOp)set_nullableExternal }, | |||
7102 | { prototypes::id::TestExampleInterface }, | |||
7103 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7104 | JSJitInfo::Setter, | |||
7105 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7106 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7107 | false, /* isInfallible. False in setters. */ | |||
7108 | false, /* isMovable. Not relevant for setters. */ | |||
7109 | false, /* isEliminatable. Not relevant for setters. */ | |||
7110 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7111 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7112 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7113 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7114 | }; | |||
7115 | ||||
7116 | MOZ_CAN_RUN_SCRIPT static bool | |||
7117 | passOptionalExternal(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7118 | { | |||
7119 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalExternal"); | |||
7120 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7123( cx, "TestExampleInterface" , "passOptionalExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7121 | "TestExampleInterface", "passOptionalExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7123( cx, "TestExampleInterface" , "passOptionalExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7122 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7123( cx, "TestExampleInterface" , "passOptionalExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7123 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7123( cx, "TestExampleInterface" , "passOptionalExternal", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
7124 | ||||
7125 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7126 | Optional<mozilla::dom::TestExternalInterface*> arg0; | |||
7127 | Maybe<RefPtr<mozilla::dom::TestExternalInterface>> arg0_holder; | |||
7128 | if (args.hasDefined(0)) { | |||
7129 | arg0.Construct(); | |||
7130 | arg0_holder.emplace(); | |||
7131 | if (args[0].isObject()) { | |||
7132 | JS::Rooted<JSObject*> source(cx, &args[0].toObject()); | |||
7133 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder.ref())))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder .ref())))), 0)))) { | |||
7134 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestExternalInterface"); | |||
7135 | return false; | |||
7136 | } | |||
7137 | MOZ_ASSERT(arg0_holder.ref())do { static_assert( mozilla::detail::AssertionConditionType< decltype(arg0_holder.ref())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(arg0_holder.ref()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("arg0_holder.ref()" , "../TestExampleGenBinding.cpp", 7137); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "arg0_holder.ref()" ")"); do { *((volatile int *)__null) = 7137; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
7138 | arg0.Value() = arg0_holder.ref(); | |||
7139 | } else if (args[0].isNullOrUndefined()) { | |||
7140 | arg0.Value() = nullptr; | |||
7141 | } else { | |||
7142 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
7143 | return false; | |||
7144 | } | |||
7145 | } | |||
7146 | // NOTE: This assert does NOT call the function. | |||
7147 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalExternal(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
7148 | MOZ_KnownLive(self)(self)->PassOptionalExternal(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
7149 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7149); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7149; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7150 | args.rval().setUndefined(); | |||
7151 | return true; | |||
7152 | } | |||
7153 | ||||
7154 | static const JSJitInfo passOptionalExternal_methodinfo = { | |||
7155 | { (JSJitGetterOp)passOptionalExternal }, | |||
7156 | { prototypes::id::TestExampleInterface }, | |||
7157 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7158 | JSJitInfo::Method, | |||
7159 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7160 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7161 | false, /* isInfallible. False in setters. */ | |||
7162 | false, /* isMovable. Not relevant for setters. */ | |||
7163 | false, /* isEliminatable. Not relevant for setters. */ | |||
7164 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7165 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7166 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7167 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7168 | }; | |||
7169 | ||||
7170 | MOZ_CAN_RUN_SCRIPT static bool | |||
7171 | passOptionalNonNullExternal(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7172 | { | |||
7173 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNonNullExternal"); | |||
7174 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7177( cx, "TestExampleInterface" , "passOptionalNonNullExternal", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7175 | "TestExampleInterface", "passOptionalNonNullExternal", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7177( cx, "TestExampleInterface" , "passOptionalNonNullExternal", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7176 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7177( cx, "TestExampleInterface" , "passOptionalNonNullExternal", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7177 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7177( cx, "TestExampleInterface" , "passOptionalNonNullExternal", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7178 | ||||
7179 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7180 | Optional<mozilla::dom::TestExternalInterface*> arg0; | |||
7181 | Maybe<RefPtr<mozilla::dom::TestExternalInterface>> arg0_holder; | |||
7182 | if (args.hasDefined(0)) { | |||
7183 | arg0.Construct(); | |||
7184 | arg0_holder.emplace(); | |||
7185 | if (args[0].isObject()) { | |||
7186 | JS::Rooted<JSObject*> source(cx, &args[0].toObject()); | |||
7187 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder.ref())))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder .ref())))), 0)))) { | |||
7188 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestExternalInterface"); | |||
7189 | return false; | |||
7190 | } | |||
7191 | MOZ_ASSERT(arg0_holder.ref())do { static_assert( mozilla::detail::AssertionConditionType< decltype(arg0_holder.ref())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(arg0_holder.ref()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("arg0_holder.ref()" , "../TestExampleGenBinding.cpp", 7191); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "arg0_holder.ref()" ")"); do { *((volatile int *)__null) = 7191; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
7192 | arg0.Value() = arg0_holder.ref(); | |||
7193 | } else { | |||
7194 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
7195 | return false; | |||
7196 | } | |||
7197 | } | |||
7198 | // NOTE: This assert does NOT call the function. | |||
7199 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNonNullExternal(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))))>, "Should be returning void here"); | |||
7200 | MOZ_KnownLive(self)(self)->PassOptionalNonNullExternal(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))); | |||
7201 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7201); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7201; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7202 | args.rval().setUndefined(); | |||
7203 | return true; | |||
7204 | } | |||
7205 | ||||
7206 | static const JSJitInfo passOptionalNonNullExternal_methodinfo = { | |||
7207 | { (JSJitGetterOp)passOptionalNonNullExternal }, | |||
7208 | { prototypes::id::TestExampleInterface }, | |||
7209 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7210 | JSJitInfo::Method, | |||
7211 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7212 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7213 | false, /* isInfallible. False in setters. */ | |||
7214 | false, /* isMovable. Not relevant for setters. */ | |||
7215 | false, /* isEliminatable. Not relevant for setters. */ | |||
7216 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7217 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7218 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7219 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7220 | }; | |||
7221 | ||||
7222 | MOZ_CAN_RUN_SCRIPT static bool | |||
7223 | passOptionalExternalWithDefault(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7224 | { | |||
7225 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalExternalWithDefault"); | |||
7226 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7229( cx, "TestExampleInterface" , "passOptionalExternalWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7227 | "TestExampleInterface", "passOptionalExternalWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7229( cx, "TestExampleInterface" , "passOptionalExternalWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7228 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7229( cx, "TestExampleInterface" , "passOptionalExternalWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7229 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7229( cx, "TestExampleInterface" , "passOptionalExternalWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7230 | ||||
7231 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7232 | mozilla::dom::TestExternalInterface* arg0; | |||
7233 | RefPtr<mozilla::dom::TestExternalInterface> arg0_holder; | |||
7234 | if (args.hasDefined(0)) { | |||
7235 | if (args[0].isObject()) { | |||
7236 | JS::Rooted<JSObject*> source(cx, &args[0].toObject()); | |||
7237 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(arg0_holder )))), 0)))) { | |||
7238 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestExternalInterface"); | |||
7239 | return false; | |||
7240 | } | |||
7241 | MOZ_ASSERT(arg0_holder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(arg0_holder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(arg0_holder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("arg0_holder", "../TestExampleGenBinding.cpp" , 7241); AnnotateMozCrashReason("MOZ_ASSERT" "(" "arg0_holder" ")"); do { *((volatile int*)__null) = 7241; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
7242 | arg0 = arg0_holder; | |||
7243 | } else if (args[0].isNullOrUndefined()) { | |||
7244 | arg0 = nullptr; | |||
7245 | } else { | |||
7246 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
7247 | return false; | |||
7248 | } | |||
7249 | } else { | |||
7250 | arg0 = nullptr; | |||
7251 | } | |||
7252 | // NOTE: This assert does NOT call the function. | |||
7253 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalExternalWithDefault(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
7254 | MOZ_KnownLive(self)(self)->PassOptionalExternalWithDefault(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
7255 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7255); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7255; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7256 | args.rval().setUndefined(); | |||
7257 | return true; | |||
7258 | } | |||
7259 | ||||
7260 | static const JSJitInfo passOptionalExternalWithDefault_methodinfo = { | |||
7261 | { (JSJitGetterOp)passOptionalExternalWithDefault }, | |||
7262 | { prototypes::id::TestExampleInterface }, | |||
7263 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7264 | JSJitInfo::Method, | |||
7265 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7266 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7267 | false, /* isInfallible. False in setters. */ | |||
7268 | false, /* isMovable. Not relevant for setters. */ | |||
7269 | false, /* isEliminatable. Not relevant for setters. */ | |||
7270 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7271 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7272 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7273 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7274 | }; | |||
7275 | ||||
7276 | MOZ_CAN_RUN_SCRIPT static bool | |||
7277 | receiveCallbackInterface(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7278 | { | |||
7279 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7282( cx, "TestExampleInterface" , "receiveCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7280 | "TestExampleInterface", "receiveCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7282( cx, "TestExampleInterface" , "receiveCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7281 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7282( cx, "TestExampleInterface" , "receiveCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7282 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7282( cx, "TestExampleInterface" , "receiveCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7283 | ||||
7284 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7285 | auto result(StrongOrRawPtr<mozilla::dom::TestCallbackInterface>(MOZ_KnownLive(self)(self)->ReceiveCallbackInterface())); | |||
7286 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7286); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7286; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7287 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
7288 | if (!MaybeWrapObjectValue(cx, args.rval())) { | |||
7289 | return false; | |||
7290 | } | |||
7291 | return true; | |||
7292 | } | |||
7293 | ||||
7294 | static const JSJitInfo receiveCallbackInterface_methodinfo = { | |||
7295 | { (JSJitGetterOp)receiveCallbackInterface }, | |||
7296 | { prototypes::id::TestExampleInterface }, | |||
7297 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7298 | JSJitInfo::Method, | |||
7299 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7300 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
7301 | false, /* isInfallible. False in setters. */ | |||
7302 | false, /* isMovable. Not relevant for setters. */ | |||
7303 | false, /* isEliminatable. Not relevant for setters. */ | |||
7304 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7305 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7306 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7307 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7308 | }; | |||
7309 | ||||
7310 | MOZ_CAN_RUN_SCRIPT static bool | |||
7311 | receiveNullableCallbackInterface(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7312 | { | |||
7313 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7316( cx, "TestExampleInterface" , "receiveNullableCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7314 | "TestExampleInterface", "receiveNullableCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7316( cx, "TestExampleInterface" , "receiveNullableCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7315 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7316( cx, "TestExampleInterface" , "receiveNullableCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7316 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7316( cx, "TestExampleInterface" , "receiveNullableCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7317 | ||||
7318 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7319 | auto result(StrongOrRawPtr<mozilla::dom::TestCallbackInterface>(MOZ_KnownLive(self)(self)->ReceiveNullableCallbackInterface())); | |||
7320 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7320); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7320; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7321 | if (result) { | |||
7322 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
7323 | if (!MaybeWrapObjectOrNullValue(cx, args.rval())) { | |||
7324 | return false; | |||
7325 | } | |||
7326 | return true; | |||
7327 | } else { | |||
7328 | args.rval().setNull(); | |||
7329 | return true; | |||
7330 | } | |||
7331 | } | |||
7332 | ||||
7333 | static const JSJitInfo receiveNullableCallbackInterface_methodinfo = { | |||
7334 | { (JSJitGetterOp)receiveNullableCallbackInterface }, | |||
7335 | { prototypes::id::TestExampleInterface }, | |||
7336 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7337 | JSJitInfo::Method, | |||
7338 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7339 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
7340 | false, /* isInfallible. False in setters. */ | |||
7341 | false, /* isMovable. Not relevant for setters. */ | |||
7342 | false, /* isEliminatable. Not relevant for setters. */ | |||
7343 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7344 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7345 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7346 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7347 | }; | |||
7348 | ||||
7349 | MOZ_CAN_RUN_SCRIPT static bool | |||
7350 | receiveWeakCallbackInterface(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7351 | { | |||
7352 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7355( cx, "TestExampleInterface" , "receiveWeakCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7353 | "TestExampleInterface", "receiveWeakCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7355( cx, "TestExampleInterface" , "receiveWeakCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7354 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7355( cx, "TestExampleInterface" , "receiveWeakCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7355 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7355( cx, "TestExampleInterface" , "receiveWeakCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7356 | ||||
7357 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7358 | auto result(StrongOrRawPtr<mozilla::dom::TestCallbackInterface>(MOZ_KnownLive(self)(self)->ReceiveWeakCallbackInterface())); | |||
7359 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7359); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7359; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7360 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
7361 | if (!MaybeWrapObjectValue(cx, args.rval())) { | |||
7362 | return false; | |||
7363 | } | |||
7364 | return true; | |||
7365 | } | |||
7366 | ||||
7367 | static const JSJitInfo receiveWeakCallbackInterface_methodinfo = { | |||
7368 | { (JSJitGetterOp)receiveWeakCallbackInterface }, | |||
7369 | { prototypes::id::TestExampleInterface }, | |||
7370 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7371 | JSJitInfo::Method, | |||
7372 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7373 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
7374 | false, /* isInfallible. False in setters. */ | |||
7375 | false, /* isMovable. Not relevant for setters. */ | |||
7376 | false, /* isEliminatable. Not relevant for setters. */ | |||
7377 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7378 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7379 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7380 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7381 | }; | |||
7382 | ||||
7383 | MOZ_CAN_RUN_SCRIPT static bool | |||
7384 | receiveWeakNullableCallbackInterface(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7385 | { | |||
7386 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7389( cx, "TestExampleInterface" , "receiveWeakNullableCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7387 | "TestExampleInterface", "receiveWeakNullableCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7389( cx, "TestExampleInterface" , "receiveWeakNullableCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7388 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7389( cx, "TestExampleInterface" , "receiveWeakNullableCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7389 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7389( cx, "TestExampleInterface" , "receiveWeakNullableCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7390 | ||||
7391 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7392 | auto result(StrongOrRawPtr<mozilla::dom::TestCallbackInterface>(MOZ_KnownLive(self)(self)->ReceiveWeakNullableCallbackInterface())); | |||
7393 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7393); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7393; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7394 | if (result) { | |||
7395 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
7396 | if (!MaybeWrapObjectOrNullValue(cx, args.rval())) { | |||
7397 | return false; | |||
7398 | } | |||
7399 | return true; | |||
7400 | } else { | |||
7401 | args.rval().setNull(); | |||
7402 | return true; | |||
7403 | } | |||
7404 | } | |||
7405 | ||||
7406 | static const JSJitInfo receiveWeakNullableCallbackInterface_methodinfo = { | |||
7407 | { (JSJitGetterOp)receiveWeakNullableCallbackInterface }, | |||
7408 | { prototypes::id::TestExampleInterface }, | |||
7409 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7410 | JSJitInfo::Method, | |||
7411 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7412 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
7413 | false, /* isInfallible. False in setters. */ | |||
7414 | false, /* isMovable. Not relevant for setters. */ | |||
7415 | false, /* isEliminatable. Not relevant for setters. */ | |||
7416 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7417 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7418 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7419 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7420 | }; | |||
7421 | ||||
7422 | MOZ_CAN_RUN_SCRIPT static bool | |||
7423 | passCallbackInterface(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7424 | { | |||
7425 | BindingCallContext cx(cx_, "TestExampleInterface.passCallbackInterface"); | |||
7426 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7429( cx, "TestExampleInterface" , "passCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7427 | "TestExampleInterface", "passCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7429( cx, "TestExampleInterface" , "passCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7428 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7429( cx, "TestExampleInterface" , "passCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7429 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7429( cx, "TestExampleInterface" , "passCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
7430 | ||||
7431 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7432 | if (!args.requireAtLeast(cx, "TestExampleInterface.passCallbackInterface", 1)) { | |||
7433 | return false; | |||
7434 | } | |||
7435 | RootedCallback<OwningNonNull<binding_detail::FastTestCallbackInterface>> arg0(cx); | |||
7436 | if (args[0].isObject()) { | |||
7437 | { // scope for tempRoot and tempGlobalRoot if needed | |||
7438 | arg0 = new binding_detail::FastTestCallbackInterface(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
7439 | } | |||
7440 | } else { | |||
7441 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
7442 | return false; | |||
7443 | } | |||
7444 | // NOTE: This assert does NOT call the function. | |||
7445 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassCallbackInterface(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
7446 | MOZ_KnownLive(self)(self)->PassCallbackInterface(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
7447 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7447); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7447; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7448 | args.rval().setUndefined(); | |||
7449 | return true; | |||
7450 | } | |||
7451 | ||||
7452 | static const JSJitInfo passCallbackInterface_methodinfo = { | |||
7453 | { (JSJitGetterOp)passCallbackInterface }, | |||
7454 | { prototypes::id::TestExampleInterface }, | |||
7455 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7456 | JSJitInfo::Method, | |||
7457 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7458 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7459 | false, /* isInfallible. False in setters. */ | |||
7460 | false, /* isMovable. Not relevant for setters. */ | |||
7461 | false, /* isEliminatable. Not relevant for setters. */ | |||
7462 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7463 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7464 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7465 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7466 | }; | |||
7467 | ||||
7468 | MOZ_CAN_RUN_SCRIPT static bool | |||
7469 | passNullableCallbackInterface(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7470 | { | |||
7471 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableCallbackInterface"); | |||
7472 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7475( cx, "TestExampleInterface" , "passNullableCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7473 | "TestExampleInterface", "passNullableCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7475( cx, "TestExampleInterface" , "passNullableCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7474 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7475( cx, "TestExampleInterface" , "passNullableCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7475 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7475( cx, "TestExampleInterface" , "passNullableCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7476 | ||||
7477 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7478 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableCallbackInterface", 1)) { | |||
7479 | return false; | |||
7480 | } | |||
7481 | RootedCallback<RefPtr<binding_detail::FastTestCallbackInterface>> arg0(cx); | |||
7482 | if (args[0].isObject()) { | |||
7483 | { // scope for tempRoot and tempGlobalRoot if needed | |||
7484 | arg0 = new binding_detail::FastTestCallbackInterface(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
7485 | } | |||
7486 | } else if (args[0].isNullOrUndefined()) { | |||
7487 | arg0 = nullptr; | |||
7488 | } else { | |||
7489 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
7490 | return false; | |||
7491 | } | |||
7492 | // NOTE: This assert does NOT call the function. | |||
7493 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableCallbackInterface(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
7494 | MOZ_KnownLive(self)(self)->PassNullableCallbackInterface(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
7495 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7495); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7495; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7496 | args.rval().setUndefined(); | |||
7497 | return true; | |||
7498 | } | |||
7499 | ||||
7500 | static const JSJitInfo passNullableCallbackInterface_methodinfo = { | |||
7501 | { (JSJitGetterOp)passNullableCallbackInterface }, | |||
7502 | { prototypes::id::TestExampleInterface }, | |||
7503 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7504 | JSJitInfo::Method, | |||
7505 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7506 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7507 | false, /* isInfallible. False in setters. */ | |||
7508 | false, /* isMovable. Not relevant for setters. */ | |||
7509 | false, /* isEliminatable. Not relevant for setters. */ | |||
7510 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7511 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7512 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7513 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7514 | }; | |||
7515 | ||||
7516 | MOZ_CAN_RUN_SCRIPT static bool | |||
7517 | get_nonNullCallbackInterface(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
7518 | { | |||
7519 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7522( cx, "TestExampleInterface" , "nonNullCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7520 | "TestExampleInterface", "nonNullCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7522( cx, "TestExampleInterface" , "nonNullCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7521 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject7522( cx, "TestExampleInterface" , "nonNullCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7522 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7522( cx, "TestExampleInterface" , "nonNullCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7523 | ||||
7524 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7525 | auto result(StrongOrRawPtr<mozilla::dom::TestCallbackInterface>(MOZ_KnownLive(self)(self)->NonNullCallbackInterface())); | |||
7526 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7526); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7526; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7527 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
7528 | if (!MaybeWrapObjectValue(cx, args.rval())) { | |||
7529 | return false; | |||
7530 | } | |||
7531 | return true; | |||
7532 | } | |||
7533 | ||||
7534 | MOZ_CAN_RUN_SCRIPT static bool | |||
7535 | set_nonNullCallbackInterface(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
7536 | { | |||
7537 | BindingCallContext cx(cx_, "TestExampleInterface.nonNullCallbackInterface setter"); | |||
7538 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7541( cx, "TestExampleInterface" , "nonNullCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7539 | "TestExampleInterface", "nonNullCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7541( cx, "TestExampleInterface" , "nonNullCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7540 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject7541( cx, "TestExampleInterface" , "nonNullCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7541 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7541( cx, "TestExampleInterface" , "nonNullCallbackInterface", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7542 | ||||
7543 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7544 | RootedCallback<OwningNonNull<binding_detail::FastTestCallbackInterface>> arg0(cx); | |||
7545 | if (args[0].isObject()) { | |||
7546 | { // scope for tempRoot and tempGlobalRoot if needed | |||
7547 | arg0 = new binding_detail::FastTestCallbackInterface(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
7548 | } | |||
7549 | } else { | |||
7550 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
7551 | return false; | |||
7552 | } | |||
7553 | // NOTE: This assert does NOT call the function. | |||
7554 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNonNullCallbackInterface(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
7555 | MOZ_KnownLive(self)(self)->SetNonNullCallbackInterface(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
7556 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7556); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7556; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7557 | ||||
7558 | return true; | |||
7559 | } | |||
7560 | ||||
7561 | static const JSJitInfo nonNullCallbackInterface_getterinfo = { | |||
7562 | { get_nonNullCallbackInterface }, | |||
7563 | { prototypes::id::TestExampleInterface }, | |||
7564 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7565 | JSJitInfo::Getter, | |||
7566 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7567 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
7568 | false, /* isInfallible. False in setters. */ | |||
7569 | false, /* isMovable. Not relevant for setters. */ | |||
7570 | false, /* isEliminatable. Not relevant for setters. */ | |||
7571 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7572 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7573 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7574 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7575 | }; | |||
7576 | static const JSJitInfo nonNullCallbackInterface_setterinfo = { | |||
7577 | { (JSJitGetterOp)set_nonNullCallbackInterface }, | |||
7578 | { prototypes::id::TestExampleInterface }, | |||
7579 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7580 | JSJitInfo::Setter, | |||
7581 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7582 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7583 | false, /* isInfallible. False in setters. */ | |||
7584 | false, /* isMovable. Not relevant for setters. */ | |||
7585 | false, /* isEliminatable. Not relevant for setters. */ | |||
7586 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7587 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7588 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7589 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7590 | }; | |||
7591 | ||||
7592 | MOZ_CAN_RUN_SCRIPT static bool | |||
7593 | get_nullableCallbackInterface(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
7594 | { | |||
7595 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7598( cx, "TestExampleInterface" , "nullableCallbackInterface", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7596 | "TestExampleInterface", "nullableCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7598( cx, "TestExampleInterface" , "nullableCallbackInterface", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7597 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject7598( cx, "TestExampleInterface" , "nullableCallbackInterface", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7598 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7598( cx, "TestExampleInterface" , "nullableCallbackInterface", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7599 | ||||
7600 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7601 | auto result(StrongOrRawPtr<mozilla::dom::TestCallbackInterface>(MOZ_KnownLive(self)(self)->GetNullableCallbackInterface())); | |||
7602 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7602); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7602; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7603 | if (result) { | |||
7604 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
7605 | if (!MaybeWrapObjectOrNullValue(cx, args.rval())) { | |||
7606 | return false; | |||
7607 | } | |||
7608 | return true; | |||
7609 | } else { | |||
7610 | args.rval().setNull(); | |||
7611 | return true; | |||
7612 | } | |||
7613 | } | |||
7614 | ||||
7615 | MOZ_CAN_RUN_SCRIPT static bool | |||
7616 | set_nullableCallbackInterface(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
7617 | { | |||
7618 | BindingCallContext cx(cx_, "TestExampleInterface.nullableCallbackInterface setter"); | |||
7619 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7622( cx, "TestExampleInterface" , "nullableCallbackInterface", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7620 | "TestExampleInterface", "nullableCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7622( cx, "TestExampleInterface" , "nullableCallbackInterface", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7621 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject7622( cx, "TestExampleInterface" , "nullableCallbackInterface", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7622 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7622( cx, "TestExampleInterface" , "nullableCallbackInterface", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7623 | ||||
7624 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7625 | RootedCallback<RefPtr<binding_detail::FastTestCallbackInterface>> arg0(cx); | |||
7626 | if (args[0].isObject()) { | |||
7627 | { // scope for tempRoot and tempGlobalRoot if needed | |||
7628 | arg0 = new binding_detail::FastTestCallbackInterface(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
7629 | } | |||
7630 | } else if (args[0].isNullOrUndefined()) { | |||
7631 | arg0 = nullptr; | |||
7632 | } else { | |||
7633 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
7634 | return false; | |||
7635 | } | |||
7636 | // NOTE: This assert does NOT call the function. | |||
7637 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNullableCallbackInterface(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
7638 | MOZ_KnownLive(self)(self)->SetNullableCallbackInterface(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
7639 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7639); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7639; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7640 | ||||
7641 | return true; | |||
7642 | } | |||
7643 | ||||
7644 | static const JSJitInfo nullableCallbackInterface_getterinfo = { | |||
7645 | { get_nullableCallbackInterface }, | |||
7646 | { prototypes::id::TestExampleInterface }, | |||
7647 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7648 | JSJitInfo::Getter, | |||
7649 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7650 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
7651 | false, /* isInfallible. False in setters. */ | |||
7652 | false, /* isMovable. Not relevant for setters. */ | |||
7653 | false, /* isEliminatable. Not relevant for setters. */ | |||
7654 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7655 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7656 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7657 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7658 | }; | |||
7659 | static const JSJitInfo nullableCallbackInterface_setterinfo = { | |||
7660 | { (JSJitGetterOp)set_nullableCallbackInterface }, | |||
7661 | { prototypes::id::TestExampleInterface }, | |||
7662 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7663 | JSJitInfo::Setter, | |||
7664 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7665 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7666 | false, /* isInfallible. False in setters. */ | |||
7667 | false, /* isMovable. Not relevant for setters. */ | |||
7668 | false, /* isEliminatable. Not relevant for setters. */ | |||
7669 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7670 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7671 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7672 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7673 | }; | |||
7674 | ||||
7675 | MOZ_CAN_RUN_SCRIPT static bool | |||
7676 | passOptionalCallbackInterface(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7677 | { | |||
7678 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalCallbackInterface"); | |||
7679 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7682( cx, "TestExampleInterface" , "passOptionalCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7680 | "TestExampleInterface", "passOptionalCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7682( cx, "TestExampleInterface" , "passOptionalCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7681 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7682( cx, "TestExampleInterface" , "passOptionalCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7682 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7682( cx, "TestExampleInterface" , "passOptionalCallbackInterface", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7683 | ||||
7684 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7685 | Optional<RefPtr<TestCallbackInterface>> arg0; | |||
7686 | if (args.hasDefined(0)) { | |||
7687 | arg0.Construct(); | |||
7688 | if (args[0].isObject()) { | |||
7689 | { // scope for tempRoot and tempGlobalRoot if needed | |||
7690 | JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject()); | |||
7691 | JS::Rooted<JSObject*> tempGlobalRoot(cx, JS::CurrentGlobalOrNull(cx)); | |||
7692 | arg0.Value() = new TestCallbackInterface(cx, tempRoot, tempGlobalRoot, GetIncumbentGlobal()); | |||
7693 | } | |||
7694 | } else if (args[0].isNullOrUndefined()) { | |||
7695 | arg0.Value() = nullptr; | |||
7696 | } else { | |||
7697 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
7698 | return false; | |||
7699 | } | |||
7700 | } | |||
7701 | // NOTE: This assert does NOT call the function. | |||
7702 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalCallbackInterface(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
7703 | MOZ_KnownLive(self)(self)->PassOptionalCallbackInterface(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
7704 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7704); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7704; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7705 | args.rval().setUndefined(); | |||
7706 | return true; | |||
7707 | } | |||
7708 | ||||
7709 | static const JSJitInfo passOptionalCallbackInterface_methodinfo = { | |||
7710 | { (JSJitGetterOp)passOptionalCallbackInterface }, | |||
7711 | { prototypes::id::TestExampleInterface }, | |||
7712 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7713 | JSJitInfo::Method, | |||
7714 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7715 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7716 | false, /* isInfallible. False in setters. */ | |||
7717 | false, /* isMovable. Not relevant for setters. */ | |||
7718 | false, /* isEliminatable. Not relevant for setters. */ | |||
7719 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7720 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7721 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7722 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7723 | }; | |||
7724 | ||||
7725 | MOZ_CAN_RUN_SCRIPT static bool | |||
7726 | passOptionalNonNullCallbackInterface(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7727 | { | |||
7728 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNonNullCallbackInterface"); | |||
7729 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7732( cx, "TestExampleInterface" , "passOptionalNonNullCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7730 | "TestExampleInterface", "passOptionalNonNullCallbackInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7732( cx, "TestExampleInterface" , "passOptionalNonNullCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7731 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7732( cx, "TestExampleInterface" , "passOptionalNonNullCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7732 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7732( cx, "TestExampleInterface" , "passOptionalNonNullCallbackInterface", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7733 | ||||
7734 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7735 | Optional<OwningNonNull<TestCallbackInterface>> arg0; | |||
7736 | if (args.hasDefined(0)) { | |||
7737 | arg0.Construct(); | |||
7738 | if (args[0].isObject()) { | |||
7739 | { // scope for tempRoot and tempGlobalRoot if needed | |||
7740 | JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject()); | |||
7741 | JS::Rooted<JSObject*> tempGlobalRoot(cx, JS::CurrentGlobalOrNull(cx)); | |||
7742 | arg0.Value() = new TestCallbackInterface(cx, tempRoot, tempGlobalRoot, GetIncumbentGlobal()); | |||
7743 | } | |||
7744 | } else { | |||
7745 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
7746 | return false; | |||
7747 | } | |||
7748 | } | |||
7749 | // NOTE: This assert does NOT call the function. | |||
7750 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNonNullCallbackInterface(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))))>, "Should be returning void here"); | |||
7751 | MOZ_KnownLive(self)(self)->PassOptionalNonNullCallbackInterface(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))); | |||
7752 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7752); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7752; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7753 | args.rval().setUndefined(); | |||
7754 | return true; | |||
7755 | } | |||
7756 | ||||
7757 | static const JSJitInfo passOptionalNonNullCallbackInterface_methodinfo = { | |||
7758 | { (JSJitGetterOp)passOptionalNonNullCallbackInterface }, | |||
7759 | { prototypes::id::TestExampleInterface }, | |||
7760 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7761 | JSJitInfo::Method, | |||
7762 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7763 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7764 | false, /* isInfallible. False in setters. */ | |||
7765 | false, /* isMovable. Not relevant for setters. */ | |||
7766 | false, /* isEliminatable. Not relevant for setters. */ | |||
7767 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7768 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7769 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7770 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7771 | }; | |||
7772 | ||||
7773 | MOZ_CAN_RUN_SCRIPT static bool | |||
7774 | passOptionalCallbackInterfaceWithDefault(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
7775 | { | |||
7776 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalCallbackInterfaceWithDefault"); | |||
7777 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7780( cx, "TestExampleInterface" , "passOptionalCallbackInterfaceWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7778 | "TestExampleInterface", "passOptionalCallbackInterfaceWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7780( cx, "TestExampleInterface" , "passOptionalCallbackInterfaceWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7779 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject7780( cx, "TestExampleInterface" , "passOptionalCallbackInterfaceWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7780 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7780( cx, "TestExampleInterface" , "passOptionalCallbackInterfaceWithDefault", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7781 | ||||
7782 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7783 | RootedCallback<RefPtr<binding_detail::FastTestCallbackInterface>> arg0(cx); | |||
7784 | if (args.hasDefined(0)) { | |||
7785 | if (args[0].isObject()) { | |||
7786 | { // scope for tempRoot and tempGlobalRoot if needed | |||
7787 | arg0 = new binding_detail::FastTestCallbackInterface(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
7788 | } | |||
7789 | } else if (args[0].isNullOrUndefined()) { | |||
7790 | arg0 = nullptr; | |||
7791 | } else { | |||
7792 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
7793 | return false; | |||
7794 | } | |||
7795 | } else { | |||
7796 | arg0 = nullptr; | |||
7797 | } | |||
7798 | // NOTE: This assert does NOT call the function. | |||
7799 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalCallbackInterfaceWithDefault(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
7800 | MOZ_KnownLive(self)(self)->PassOptionalCallbackInterfaceWithDefault(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
7801 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7801); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7801; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7802 | args.rval().setUndefined(); | |||
7803 | return true; | |||
7804 | } | |||
7805 | ||||
7806 | static const JSJitInfo passOptionalCallbackInterfaceWithDefault_methodinfo = { | |||
7807 | { (JSJitGetterOp)passOptionalCallbackInterfaceWithDefault }, | |||
7808 | { prototypes::id::TestExampleInterface }, | |||
7809 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7810 | JSJitInfo::Method, | |||
7811 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
7812 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
7813 | false, /* isInfallible. False in setters. */ | |||
7814 | false, /* isMovable. Not relevant for setters. */ | |||
7815 | false, /* isEliminatable. Not relevant for setters. */ | |||
7816 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7817 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7818 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7819 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7820 | }; | |||
7821 | ||||
7822 | MOZ_CAN_RUN_SCRIPT static bool | |||
7823 | get_readonlySequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
7824 | { | |||
7825 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7828( cx, "TestExampleInterface" , "readonlySequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7826 | "TestExampleInterface", "readonlySequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7828( cx, "TestExampleInterface" , "readonlySequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7827 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject7828( cx, "TestExampleInterface" , "readonlySequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
7828 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7828( cx, "TestExampleInterface" , "readonlySequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
7829 | ||||
7830 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7831 | // Have to either root across the getter call or reget after. | |||
7832 | bool isXray; | |||
7833 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
7834 | if (!slotStorage) { | |||
7835 | return false; | |||
7836 | } | |||
7837 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 4) : (DOM_INSTANCE_RESERVED_SLOTS1 + 4); | |||
7838 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 7838); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 7838; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
7839 | { | |||
7840 | // Scope for cachedVal | |||
7841 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
7842 | if (!cachedVal.isUndefined()) { | |||
7843 | args.rval().set(cachedVal); | |||
7844 | // The cached value is in the compartment of slotStorage, | |||
7845 | // so wrap into the caller compartment as needed. | |||
7846 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
7847 | } | |||
7848 | } | |||
7849 | ||||
7850 | nsTArray<int32_t> result; | |||
7851 | // NOTE: This assert does NOT call the function. | |||
7852 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlySequence(result))>, "Should be returning void here"); | |||
7853 | MOZ_KnownLive(self)(self)->GetReadonlySequence(result); | |||
7854 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7854); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7854; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7855 | { | |||
7856 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
7857 | JSAutoRealm ar(cx, conversionScope); | |||
7858 | do { // block we break out of when done wrapping | |||
7859 | ||||
7860 | uint32_t length = result.Length(); | |||
7861 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
7862 | if (!returnArray) { | |||
7863 | return false; | |||
7864 | } | |||
7865 | // Scope for 'tmp' | |||
7866 | { | |||
7867 | JS::Rooted<JS::Value> tmp(cx); | |||
7868 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
7869 | // Control block to let us common up the JS_DefineElement calls when there | |||
7870 | // are different ways to succeed at wrapping the object. | |||
7871 | do { | |||
7872 | tmp.setInt32(int32_t(result[sequenceIdx0])); | |||
7873 | break; | |||
7874 | } while (false); | |||
7875 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
7876 | JSPROP_ENUMERATE)) { | |||
7877 | return false; | |||
7878 | } | |||
7879 | } | |||
7880 | } | |||
7881 | args.rval().setObject(*returnArray); | |||
7882 | break; | |||
7883 | } while (false); | |||
7884 | } | |||
7885 | { // And now store things in the realm of our slotStorage. | |||
7886 | JSAutoRealm ar(cx, slotStorage); | |||
7887 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
7888 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
7889 | if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) { | |||
7890 | return false; | |||
7891 | } | |||
7892 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
7893 | if (!isXray) { | |||
7894 | // In the Xray case we don't need to do this, because getting the | |||
7895 | // expando object already preserved our wrapper. | |||
7896 | PreserveWrapper(self); | |||
7897 | } | |||
7898 | } | |||
7899 | // And now make sure args.rval() is in the caller realm. | |||
7900 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
7901 | } | |||
7902 | ||||
7903 | static const JSJitInfo readonlySequence_getterinfo = { | |||
7904 | { get_readonlySequence }, | |||
7905 | { prototypes::id::TestExampleInterface }, | |||
7906 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
7907 | JSJitInfo::Getter, | |||
7908 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
7909 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
7910 | false, /* isInfallible. False in setters. */ | |||
7911 | true, /* isMovable. Not relevant for setters. */ | |||
7912 | true, /* isEliminatable. Not relevant for setters. */ | |||
7913 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
7914 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
7915 | false, /* isTypedMethod. Only relevant for methods. */ | |||
7916 | (DOM_INSTANCE_RESERVED_SLOTS1 + 4) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
7917 | }; | |||
7918 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 4) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
7919 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 4) < 22, "There is no slot for us"); | |||
7920 | ||||
7921 | MOZ_CAN_RUN_SCRIPT static bool | |||
7922 | get_readonlySequenceOfDictionaries(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
7923 | { | |||
7924 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject7927( cx, "TestExampleInterface" , "readonlySequenceOfDictionaries", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7925 | "TestExampleInterface", "readonlySequenceOfDictionaries", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject7927( cx, "TestExampleInterface" , "readonlySequenceOfDictionaries", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7926 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject7927( cx, "TestExampleInterface" , "readonlySequenceOfDictionaries", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
7927 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject7927( cx, "TestExampleInterface" , "readonlySequenceOfDictionaries", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
7928 | ||||
7929 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
7930 | // Have to either root across the getter call or reget after. | |||
7931 | bool isXray; | |||
7932 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
7933 | if (!slotStorage) { | |||
7934 | return false; | |||
7935 | } | |||
7936 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 5) : (DOM_INSTANCE_RESERVED_SLOTS1 + 5); | |||
7937 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 7937); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 7937; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
7938 | { | |||
7939 | // Scope for cachedVal | |||
7940 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
7941 | if (!cachedVal.isUndefined()) { | |||
7942 | args.rval().set(cachedVal); | |||
7943 | // The cached value is in the compartment of slotStorage, | |||
7944 | // so wrap into the caller compartment as needed. | |||
7945 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
7946 | } | |||
7947 | } | |||
7948 | ||||
7949 | nsTArray<Dict> result; | |||
7950 | SequenceRooter<Dict > resultRooter(cx, &result); | |||
7951 | // NOTE: This assert does NOT call the function. | |||
7952 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlySequenceOfDictionaries(cx, result))>, "Should be returning void here"); | |||
7953 | MOZ_KnownLive(self)(self)->GetReadonlySequenceOfDictionaries(cx, result); | |||
7954 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 7954); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 7954; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
7955 | { | |||
7956 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
7957 | JSAutoRealm ar(cx, conversionScope); | |||
7958 | do { // block we break out of when done wrapping | |||
7959 | ||||
7960 | uint32_t length = result.Length(); | |||
7961 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
7962 | if (!returnArray) { | |||
7963 | return false; | |||
7964 | } | |||
7965 | // Scope for 'tmp' | |||
7966 | { | |||
7967 | JS::Rooted<JS::Value> tmp(cx); | |||
7968 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
7969 | // Control block to let us common up the JS_DefineElement calls when there | |||
7970 | // are different ways to succeed at wrapping the object. | |||
7971 | do { | |||
7972 | if (!result[sequenceIdx0].ToObjectInternal(cx, &tmp)) { | |||
7973 | return false; | |||
7974 | } | |||
7975 | break; | |||
7976 | } while (false); | |||
7977 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
7978 | JSPROP_ENUMERATE)) { | |||
7979 | return false; | |||
7980 | } | |||
7981 | } | |||
7982 | } | |||
7983 | args.rval().setObject(*returnArray); | |||
7984 | break; | |||
7985 | } while (false); | |||
7986 | } | |||
7987 | { // And now store things in the realm of our slotStorage. | |||
7988 | JSAutoRealm ar(cx, slotStorage); | |||
7989 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
7990 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
7991 | if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) { | |||
7992 | return false; | |||
7993 | } | |||
7994 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
7995 | if (!isXray) { | |||
7996 | // In the Xray case we don't need to do this, because getting the | |||
7997 | // expando object already preserved our wrapper. | |||
7998 | PreserveWrapper(self); | |||
7999 | } | |||
8000 | } | |||
8001 | // And now make sure args.rval() is in the caller realm. | |||
8002 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
8003 | } | |||
8004 | ||||
8005 | static const JSJitInfo readonlySequenceOfDictionaries_getterinfo = { | |||
8006 | { get_readonlySequenceOfDictionaries }, | |||
8007 | { prototypes::id::TestExampleInterface }, | |||
8008 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8009 | JSJitInfo::Getter, | |||
8010 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
8011 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
8012 | false, /* isInfallible. False in setters. */ | |||
8013 | true, /* isMovable. Not relevant for setters. */ | |||
8014 | true, /* isEliminatable. Not relevant for setters. */ | |||
8015 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8016 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8017 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8018 | (DOM_INSTANCE_RESERVED_SLOTS1 + 5) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8019 | }; | |||
8020 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 5) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
8021 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 5) < 22, "There is no slot for us"); | |||
8022 | ||||
8023 | MOZ_CAN_RUN_SCRIPT static bool | |||
8024 | get_readonlyNullableSequenceOfDictionaries(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
8025 | { | |||
8026 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8029( cx, "TestExampleInterface" , "readonlyNullableSequenceOfDictionaries", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8027 | "TestExampleInterface", "readonlyNullableSequenceOfDictionaries", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8029( cx, "TestExampleInterface" , "readonlyNullableSequenceOfDictionaries", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8028 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject8029( cx, "TestExampleInterface" , "readonlyNullableSequenceOfDictionaries", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8029 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8029( cx, "TestExampleInterface" , "readonlyNullableSequenceOfDictionaries", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
8030 | ||||
8031 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8032 | // Have to either root across the getter call or reget after. | |||
8033 | bool isXray; | |||
8034 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
8035 | if (!slotStorage) { | |||
8036 | return false; | |||
8037 | } | |||
8038 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 6) : (DOM_INSTANCE_RESERVED_SLOTS1 + 6); | |||
8039 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 8039); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 8039; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
8040 | { | |||
8041 | // Scope for cachedVal | |||
8042 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
8043 | if (!cachedVal.isUndefined()) { | |||
8044 | args.rval().set(cachedVal); | |||
8045 | // The cached value is in the compartment of slotStorage, | |||
8046 | // so wrap into the caller compartment as needed. | |||
8047 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
8048 | } | |||
8049 | } | |||
8050 | ||||
8051 | Nullable<nsTArray<Dict>> result; | |||
8052 | SequenceRooter<Dict > resultRooter(cx, &result); | |||
8053 | // NOTE: This assert does NOT call the function. | |||
8054 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlyNullableSequenceOfDictionaries(cx, result))>, "Should be returning void here"); | |||
8055 | MOZ_KnownLive(self)(self)->GetReadonlyNullableSequenceOfDictionaries(cx, result); | |||
8056 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8056); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8056; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8057 | { | |||
8058 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
8059 | JSAutoRealm ar(cx, conversionScope); | |||
8060 | do { // block we break out of when done wrapping | |||
8061 | ||||
8062 | if (result.IsNull()) { | |||
8063 | args.rval().setNull(); | |||
8064 | break; | |||
8065 | } | |||
8066 | ||||
8067 | uint32_t length = result.Value().Length(); | |||
8068 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
8069 | if (!returnArray) { | |||
8070 | return false; | |||
8071 | } | |||
8072 | // Scope for 'tmp' | |||
8073 | { | |||
8074 | JS::Rooted<JS::Value> tmp(cx); | |||
8075 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
8076 | // Control block to let us common up the JS_DefineElement calls when there | |||
8077 | // are different ways to succeed at wrapping the object. | |||
8078 | do { | |||
8079 | if (!result.Value()[sequenceIdx0].ToObjectInternal(cx, &tmp)) { | |||
8080 | return false; | |||
8081 | } | |||
8082 | break; | |||
8083 | } while (false); | |||
8084 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
8085 | JSPROP_ENUMERATE)) { | |||
8086 | return false; | |||
8087 | } | |||
8088 | } | |||
8089 | } | |||
8090 | args.rval().setObject(*returnArray); | |||
8091 | break; | |||
8092 | } while (false); | |||
8093 | } | |||
8094 | { // And now store things in the realm of our slotStorage. | |||
8095 | JSAutoRealm ar(cx, slotStorage); | |||
8096 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
8097 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
8098 | if (!MaybeWrapNonDOMObjectOrNullValue(cx, &storedVal)) { | |||
8099 | return false; | |||
8100 | } | |||
8101 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
8102 | if (!isXray) { | |||
8103 | // In the Xray case we don't need to do this, because getting the | |||
8104 | // expando object already preserved our wrapper. | |||
8105 | PreserveWrapper(self); | |||
8106 | } | |||
8107 | } | |||
8108 | // And now make sure args.rval() is in the caller realm. | |||
8109 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
8110 | } | |||
8111 | ||||
8112 | static const JSJitInfo readonlyNullableSequenceOfDictionaries_getterinfo = { | |||
8113 | { get_readonlyNullableSequenceOfDictionaries }, | |||
8114 | { prototypes::id::TestExampleInterface }, | |||
8115 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8116 | JSJitInfo::Getter, | |||
8117 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
8118 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
8119 | false, /* isInfallible. False in setters. */ | |||
8120 | true, /* isMovable. Not relevant for setters. */ | |||
8121 | true, /* isEliminatable. Not relevant for setters. */ | |||
8122 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8123 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8124 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8125 | (DOM_INSTANCE_RESERVED_SLOTS1 + 6) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8126 | }; | |||
8127 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 6) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
8128 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 6) < 22, "There is no slot for us"); | |||
8129 | ||||
8130 | MOZ_CAN_RUN_SCRIPT static bool | |||
8131 | get_readonlyFrozenSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
8132 | { | |||
8133 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8136( cx, "TestExampleInterface" , "readonlyFrozenSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8134 | "TestExampleInterface", "readonlyFrozenSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8136( cx, "TestExampleInterface" , "readonlyFrozenSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8135 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject8136( cx, "TestExampleInterface" , "readonlyFrozenSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8136 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8136( cx, "TestExampleInterface" , "readonlyFrozenSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
8137 | ||||
8138 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8139 | // Have to either root across the getter call or reget after. | |||
8140 | bool isXray; | |||
8141 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
8142 | if (!slotStorage) { | |||
8143 | return false; | |||
8144 | } | |||
8145 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 7) : (DOM_INSTANCE_RESERVED_SLOTS1 + 7); | |||
8146 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 8146); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 8146; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
8147 | { | |||
8148 | // Scope for cachedVal | |||
8149 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
8150 | if (!cachedVal.isUndefined()) { | |||
8151 | args.rval().set(cachedVal); | |||
8152 | // The cached value is in the compartment of slotStorage, | |||
8153 | // so wrap into the caller compartment as needed. | |||
8154 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
8155 | } | |||
8156 | } | |||
8157 | ||||
8158 | nsTArray<int32_t> result; | |||
8159 | // NOTE: This assert does NOT call the function. | |||
8160 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlyFrozenSequence(result))>, "Should be returning void here"); | |||
8161 | MOZ_KnownLive(self)(self)->GetReadonlyFrozenSequence(result); | |||
8162 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8162); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8162; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8163 | { | |||
8164 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
8165 | JSAutoRealm ar(cx, conversionScope); | |||
8166 | do { // block we break out of when done wrapping | |||
8167 | ||||
8168 | uint32_t length = result.Length(); | |||
8169 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
8170 | if (!returnArray) { | |||
8171 | return false; | |||
8172 | } | |||
8173 | // Scope for 'tmp' | |||
8174 | { | |||
8175 | JS::Rooted<JS::Value> tmp(cx); | |||
8176 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
8177 | // Control block to let us common up the JS_DefineElement calls when there | |||
8178 | // are different ways to succeed at wrapping the object. | |||
8179 | do { | |||
8180 | tmp.setInt32(int32_t(result[sequenceIdx0])); | |||
8181 | break; | |||
8182 | } while (false); | |||
8183 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
8184 | JSPROP_ENUMERATE)) { | |||
8185 | return false; | |||
8186 | } | |||
8187 | } | |||
8188 | } | |||
8189 | args.rval().setObject(*returnArray); | |||
8190 | break; | |||
8191 | } while (false); | |||
8192 | JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject()); | |||
8193 | if (!JS_FreezeObject(cx, rvalObj)) { | |||
8194 | return false; | |||
8195 | } | |||
8196 | } | |||
8197 | { // And now store things in the realm of our slotStorage. | |||
8198 | JSAutoRealm ar(cx, slotStorage); | |||
8199 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
8200 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
8201 | if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) { | |||
8202 | return false; | |||
8203 | } | |||
8204 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
8205 | if (!isXray) { | |||
8206 | // In the Xray case we don't need to do this, because getting the | |||
8207 | // expando object already preserved our wrapper. | |||
8208 | PreserveWrapper(self); | |||
8209 | } | |||
8210 | } | |||
8211 | // And now make sure args.rval() is in the caller realm. | |||
8212 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
8213 | } | |||
8214 | ||||
8215 | static const JSJitInfo readonlyFrozenSequence_getterinfo = { | |||
8216 | { get_readonlyFrozenSequence }, | |||
8217 | { prototypes::id::TestExampleInterface }, | |||
8218 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8219 | JSJitInfo::Getter, | |||
8220 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
8221 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
8222 | false, /* isInfallible. False in setters. */ | |||
8223 | true, /* isMovable. Not relevant for setters. */ | |||
8224 | true, /* isEliminatable. Not relevant for setters. */ | |||
8225 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8226 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8227 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8228 | (DOM_INSTANCE_RESERVED_SLOTS1 + 7) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8229 | }; | |||
8230 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 7) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
8231 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 7) < 22, "There is no slot for us"); | |||
8232 | ||||
8233 | MOZ_CAN_RUN_SCRIPT static bool | |||
8234 | get_readonlyFrozenNullableSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
8235 | { | |||
8236 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8239( cx, "TestExampleInterface" , "readonlyFrozenNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8237 | "TestExampleInterface", "readonlyFrozenNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8239( cx, "TestExampleInterface" , "readonlyFrozenNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8238 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject8239( cx, "TestExampleInterface" , "readonlyFrozenNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8239 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8239( cx, "TestExampleInterface" , "readonlyFrozenNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
8240 | ||||
8241 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8242 | // Have to either root across the getter call or reget after. | |||
8243 | bool isXray; | |||
8244 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
8245 | if (!slotStorage) { | |||
8246 | return false; | |||
8247 | } | |||
8248 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 8) : (DOM_INSTANCE_RESERVED_SLOTS1 + 8); | |||
8249 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 8249); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 8249; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
8250 | { | |||
8251 | // Scope for cachedVal | |||
8252 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
8253 | if (!cachedVal.isUndefined()) { | |||
8254 | args.rval().set(cachedVal); | |||
8255 | // The cached value is in the compartment of slotStorage, | |||
8256 | // so wrap into the caller compartment as needed. | |||
8257 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
8258 | } | |||
8259 | } | |||
8260 | ||||
8261 | Nullable<nsTArray<int32_t>> result; | |||
8262 | // NOTE: This assert does NOT call the function. | |||
8263 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlyFrozenNullableSequence(result))>, "Should be returning void here"); | |||
8264 | MOZ_KnownLive(self)(self)->GetReadonlyFrozenNullableSequence(result); | |||
8265 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8265); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8265; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8266 | { | |||
8267 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
8268 | JSAutoRealm ar(cx, conversionScope); | |||
8269 | do { // block we break out of when done wrapping | |||
8270 | ||||
8271 | if (result.IsNull()) { | |||
8272 | args.rval().setNull(); | |||
8273 | break; | |||
8274 | } | |||
8275 | ||||
8276 | uint32_t length = result.Value().Length(); | |||
8277 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
8278 | if (!returnArray) { | |||
8279 | return false; | |||
8280 | } | |||
8281 | // Scope for 'tmp' | |||
8282 | { | |||
8283 | JS::Rooted<JS::Value> tmp(cx); | |||
8284 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
8285 | // Control block to let us common up the JS_DefineElement calls when there | |||
8286 | // are different ways to succeed at wrapping the object. | |||
8287 | do { | |||
8288 | tmp.setInt32(int32_t(result.Value()[sequenceIdx0])); | |||
8289 | break; | |||
8290 | } while (false); | |||
8291 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
8292 | JSPROP_ENUMERATE)) { | |||
8293 | return false; | |||
8294 | } | |||
8295 | } | |||
8296 | } | |||
8297 | args.rval().setObject(*returnArray); | |||
8298 | break; | |||
8299 | } while (false); | |||
8300 | if (args.rval().isObject()) { | |||
8301 | JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject()); | |||
8302 | if (!JS_FreezeObject(cx, rvalObj)) { | |||
8303 | return false; | |||
8304 | } | |||
8305 | } | |||
8306 | } | |||
8307 | { // And now store things in the realm of our slotStorage. | |||
8308 | JSAutoRealm ar(cx, slotStorage); | |||
8309 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
8310 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
8311 | if (!MaybeWrapNonDOMObjectOrNullValue(cx, &storedVal)) { | |||
8312 | return false; | |||
8313 | } | |||
8314 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
8315 | if (!isXray) { | |||
8316 | // In the Xray case we don't need to do this, because getting the | |||
8317 | // expando object already preserved our wrapper. | |||
8318 | PreserveWrapper(self); | |||
8319 | } | |||
8320 | } | |||
8321 | // And now make sure args.rval() is in the caller realm. | |||
8322 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
8323 | } | |||
8324 | ||||
8325 | static const JSJitInfo readonlyFrozenNullableSequence_getterinfo = { | |||
8326 | { get_readonlyFrozenNullableSequence }, | |||
8327 | { prototypes::id::TestExampleInterface }, | |||
8328 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8329 | JSJitInfo::Getter, | |||
8330 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
8331 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
8332 | false, /* isInfallible. False in setters. */ | |||
8333 | true, /* isMovable. Not relevant for setters. */ | |||
8334 | true, /* isEliminatable. Not relevant for setters. */ | |||
8335 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8336 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8337 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8338 | (DOM_INSTANCE_RESERVED_SLOTS1 + 8) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8339 | }; | |||
8340 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 8) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
8341 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 8) < 22, "There is no slot for us"); | |||
8342 | ||||
8343 | MOZ_CAN_RUN_SCRIPT static bool | |||
8344 | receiveSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8345 | { | |||
8346 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8349( cx, "TestExampleInterface" , "receiveSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8347 | "TestExampleInterface", "receiveSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8349( cx, "TestExampleInterface" , "receiveSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8348 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8349( cx, "TestExampleInterface" , "receiveSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8349 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8349( cx, "TestExampleInterface" , "receiveSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
8350 | ||||
8351 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8352 | nsTArray<int32_t> result; | |||
8353 | // NOTE: This assert does NOT call the function. | |||
8354 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveSequence(result))>, "Should be returning void here"); | |||
8355 | MOZ_KnownLive(self)(self)->ReceiveSequence(result); | |||
8356 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8356); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8356; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8357 | ||||
8358 | uint32_t length = result.Length(); | |||
8359 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
8360 | if (!returnArray) { | |||
8361 | return false; | |||
8362 | } | |||
8363 | // Scope for 'tmp' | |||
8364 | { | |||
8365 | JS::Rooted<JS::Value> tmp(cx); | |||
8366 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
8367 | // Control block to let us common up the JS_DefineElement calls when there | |||
8368 | // are different ways to succeed at wrapping the object. | |||
8369 | do { | |||
8370 | tmp.setInt32(int32_t(result[sequenceIdx0])); | |||
8371 | break; | |||
8372 | } while (false); | |||
8373 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
8374 | JSPROP_ENUMERATE)) { | |||
8375 | return false; | |||
8376 | } | |||
8377 | } | |||
8378 | } | |||
8379 | args.rval().setObject(*returnArray); | |||
8380 | return true; | |||
8381 | } | |||
8382 | ||||
8383 | static const JSJitInfo receiveSequence_methodinfo = { | |||
8384 | { (JSJitGetterOp)receiveSequence }, | |||
8385 | { prototypes::id::TestExampleInterface }, | |||
8386 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8387 | JSJitInfo::Method, | |||
8388 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8389 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
8390 | false, /* isInfallible. False in setters. */ | |||
8391 | false, /* isMovable. Not relevant for setters. */ | |||
8392 | false, /* isEliminatable. Not relevant for setters. */ | |||
8393 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8394 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8395 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8396 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8397 | }; | |||
8398 | ||||
8399 | MOZ_CAN_RUN_SCRIPT static bool | |||
8400 | receiveNullableSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8401 | { | |||
8402 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8405( cx, "TestExampleInterface" , "receiveNullableSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8403 | "TestExampleInterface", "receiveNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8405( cx, "TestExampleInterface" , "receiveNullableSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8404 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8405( cx, "TestExampleInterface" , "receiveNullableSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8405 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8405( cx, "TestExampleInterface" , "receiveNullableSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
8406 | ||||
8407 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8408 | Nullable<nsTArray<int32_t>> result; | |||
8409 | // NOTE: This assert does NOT call the function. | |||
8410 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableSequence(result))>, "Should be returning void here"); | |||
8411 | MOZ_KnownLive(self)(self)->ReceiveNullableSequence(result); | |||
8412 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8412); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8412; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8413 | ||||
8414 | if (result.IsNull()) { | |||
8415 | args.rval().setNull(); | |||
8416 | return true; | |||
8417 | } | |||
8418 | ||||
8419 | uint32_t length = result.Value().Length(); | |||
8420 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
8421 | if (!returnArray) { | |||
8422 | return false; | |||
8423 | } | |||
8424 | // Scope for 'tmp' | |||
8425 | { | |||
8426 | JS::Rooted<JS::Value> tmp(cx); | |||
8427 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
8428 | // Control block to let us common up the JS_DefineElement calls when there | |||
8429 | // are different ways to succeed at wrapping the object. | |||
8430 | do { | |||
8431 | tmp.setInt32(int32_t(result.Value()[sequenceIdx0])); | |||
8432 | break; | |||
8433 | } while (false); | |||
8434 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
8435 | JSPROP_ENUMERATE)) { | |||
8436 | return false; | |||
8437 | } | |||
8438 | } | |||
8439 | } | |||
8440 | args.rval().setObject(*returnArray); | |||
8441 | return true; | |||
8442 | } | |||
8443 | ||||
8444 | static const JSJitInfo receiveNullableSequence_methodinfo = { | |||
8445 | { (JSJitGetterOp)receiveNullableSequence }, | |||
8446 | { prototypes::id::TestExampleInterface }, | |||
8447 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8448 | JSJitInfo::Method, | |||
8449 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8450 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
8451 | false, /* isInfallible. False in setters. */ | |||
8452 | false, /* isMovable. Not relevant for setters. */ | |||
8453 | false, /* isEliminatable. Not relevant for setters. */ | |||
8454 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8455 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8456 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8457 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8458 | }; | |||
8459 | ||||
8460 | MOZ_CAN_RUN_SCRIPT static bool | |||
8461 | receiveSequenceOfNullableInts(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8462 | { | |||
8463 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8466( cx, "TestExampleInterface" , "receiveSequenceOfNullableInts", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8464 | "TestExampleInterface", "receiveSequenceOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8466( cx, "TestExampleInterface" , "receiveSequenceOfNullableInts", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8465 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8466( cx, "TestExampleInterface" , "receiveSequenceOfNullableInts", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8466 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8466( cx, "TestExampleInterface" , "receiveSequenceOfNullableInts", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
8467 | ||||
8468 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8469 | nsTArray<Nullable<int32_t>> result; | |||
8470 | // NOTE: This assert does NOT call the function. | |||
8471 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveSequenceOfNullableInts(result))>, "Should be returning void here"); | |||
8472 | MOZ_KnownLive(self)(self)->ReceiveSequenceOfNullableInts(result); | |||
8473 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8473); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8473; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8474 | ||||
8475 | uint32_t length = result.Length(); | |||
8476 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
8477 | if (!returnArray) { | |||
8478 | return false; | |||
8479 | } | |||
8480 | // Scope for 'tmp' | |||
8481 | { | |||
8482 | JS::Rooted<JS::Value> tmp(cx); | |||
8483 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
8484 | // Control block to let us common up the JS_DefineElement calls when there | |||
8485 | // are different ways to succeed at wrapping the object. | |||
8486 | do { | |||
8487 | if (result[sequenceIdx0].IsNull()) { | |||
8488 | tmp.setNull(); | |||
8489 | break; | |||
8490 | } | |||
8491 | tmp.setInt32(int32_t(result[sequenceIdx0].Value())); | |||
8492 | break; | |||
8493 | } while (false); | |||
8494 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
8495 | JSPROP_ENUMERATE)) { | |||
8496 | return false; | |||
8497 | } | |||
8498 | } | |||
8499 | } | |||
8500 | args.rval().setObject(*returnArray); | |||
8501 | return true; | |||
8502 | } | |||
8503 | ||||
8504 | static const JSJitInfo receiveSequenceOfNullableInts_methodinfo = { | |||
8505 | { (JSJitGetterOp)receiveSequenceOfNullableInts }, | |||
8506 | { prototypes::id::TestExampleInterface }, | |||
8507 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8508 | JSJitInfo::Method, | |||
8509 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8510 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
8511 | false, /* isInfallible. False in setters. */ | |||
8512 | false, /* isMovable. Not relevant for setters. */ | |||
8513 | false, /* isEliminatable. Not relevant for setters. */ | |||
8514 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8515 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8516 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8517 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8518 | }; | |||
8519 | ||||
8520 | MOZ_CAN_RUN_SCRIPT static bool | |||
8521 | receiveNullableSequenceOfNullableInts(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8522 | { | |||
8523 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8526( cx, "TestExampleInterface" , "receiveNullableSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8524 | "TestExampleInterface", "receiveNullableSequenceOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8526( cx, "TestExampleInterface" , "receiveNullableSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8525 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8526( cx, "TestExampleInterface" , "receiveNullableSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8526 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8526( cx, "TestExampleInterface" , "receiveNullableSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
8527 | ||||
8528 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8529 | Nullable<nsTArray<Nullable<int32_t>>> result; | |||
8530 | // NOTE: This assert does NOT call the function. | |||
8531 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableSequenceOfNullableInts(result))>, "Should be returning void here"); | |||
8532 | MOZ_KnownLive(self)(self)->ReceiveNullableSequenceOfNullableInts(result); | |||
8533 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8533); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8533; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8534 | ||||
8535 | if (result.IsNull()) { | |||
8536 | args.rval().setNull(); | |||
8537 | return true; | |||
8538 | } | |||
8539 | ||||
8540 | uint32_t length = result.Value().Length(); | |||
8541 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
8542 | if (!returnArray) { | |||
8543 | return false; | |||
8544 | } | |||
8545 | // Scope for 'tmp' | |||
8546 | { | |||
8547 | JS::Rooted<JS::Value> tmp(cx); | |||
8548 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
8549 | // Control block to let us common up the JS_DefineElement calls when there | |||
8550 | // are different ways to succeed at wrapping the object. | |||
8551 | do { | |||
8552 | if (result.Value()[sequenceIdx0].IsNull()) { | |||
8553 | tmp.setNull(); | |||
8554 | break; | |||
8555 | } | |||
8556 | tmp.setInt32(int32_t(result.Value()[sequenceIdx0].Value())); | |||
8557 | break; | |||
8558 | } while (false); | |||
8559 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
8560 | JSPROP_ENUMERATE)) { | |||
8561 | return false; | |||
8562 | } | |||
8563 | } | |||
8564 | } | |||
8565 | args.rval().setObject(*returnArray); | |||
8566 | return true; | |||
8567 | } | |||
8568 | ||||
8569 | static const JSJitInfo receiveNullableSequenceOfNullableInts_methodinfo = { | |||
8570 | { (JSJitGetterOp)receiveNullableSequenceOfNullableInts }, | |||
8571 | { prototypes::id::TestExampleInterface }, | |||
8572 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8573 | JSJitInfo::Method, | |||
8574 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8575 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
8576 | false, /* isInfallible. False in setters. */ | |||
8577 | false, /* isMovable. Not relevant for setters. */ | |||
8578 | false, /* isEliminatable. Not relevant for setters. */ | |||
8579 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8580 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8581 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8582 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8583 | }; | |||
8584 | ||||
8585 | MOZ_CAN_RUN_SCRIPT static bool | |||
8586 | passSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8587 | { | |||
8588 | BindingCallContext cx(cx_, "TestExampleInterface.passSequence"); | |||
8589 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8592( cx, "TestExampleInterface" , "passSequence", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8590 | "TestExampleInterface", "passSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8592( cx, "TestExampleInterface" , "passSequence", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8591 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8592( cx, "TestExampleInterface" , "passSequence", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8592 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8592( cx, "TestExampleInterface" , "passSequence", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
8593 | ||||
8594 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8595 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequence", 1)) { | |||
8596 | return false; | |||
8597 | } | |||
8598 | binding_detail::AutoSequence<int32_t> arg0; | |||
8599 | if (args[0].isObject()) { | |||
8600 | JS::ForOfIterator iter(cx); | |||
8601 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
8602 | return false; | |||
8603 | } | |||
8604 | if (!iter.valueIsIterable()) { | |||
8605 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8606 | return false; | |||
8607 | } | |||
8608 | binding_detail::AutoSequence<int32_t> &arr = arg0; | |||
8609 | JS::Rooted<JS::Value> temp(cx); | |||
8610 | while (true) { | |||
8611 | bool done; | |||
8612 | if (!iter.next(&temp, &done)) { | |||
8613 | return false; | |||
8614 | } | |||
8615 | if (done) { | |||
8616 | break; | |||
8617 | } | |||
8618 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
8619 | if (!slotPtr) { | |||
8620 | JS_ReportOutOfMemory(cx); | |||
8621 | return false; | |||
8622 | } | |||
8623 | int32_t& slot = *slotPtr; | |||
8624 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
8625 | return false; | |||
8626 | } | |||
8627 | } | |||
8628 | } else { | |||
8629 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8630 | return false; | |||
8631 | } | |||
8632 | // NOTE: This assert does NOT call the function. | |||
8633 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequence(Constify(arg0)))>, "Should be returning void here"); | |||
8634 | MOZ_KnownLive(self)(self)->PassSequence(Constify(arg0)); | |||
8635 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8635); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8635; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8636 | args.rval().setUndefined(); | |||
8637 | return true; | |||
8638 | } | |||
8639 | ||||
8640 | static const JSJitInfo passSequence_methodinfo = { | |||
8641 | { (JSJitGetterOp)passSequence }, | |||
8642 | { prototypes::id::TestExampleInterface }, | |||
8643 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8644 | JSJitInfo::Method, | |||
8645 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8646 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
8647 | false, /* isInfallible. False in setters. */ | |||
8648 | false, /* isMovable. Not relevant for setters. */ | |||
8649 | false, /* isEliminatable. Not relevant for setters. */ | |||
8650 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8651 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8652 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8653 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8654 | }; | |||
8655 | ||||
8656 | MOZ_CAN_RUN_SCRIPT static bool | |||
8657 | passNullableSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8658 | { | |||
8659 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableSequence"); | |||
8660 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8663( cx, "TestExampleInterface" , "passNullableSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8661 | "TestExampleInterface", "passNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8663( cx, "TestExampleInterface" , "passNullableSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8662 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8663( cx, "TestExampleInterface" , "passNullableSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
8663 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8663( cx, "TestExampleInterface" , "passNullableSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
8664 | ||||
8665 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8666 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableSequence", 1)) { | |||
8667 | return false; | |||
8668 | } | |||
8669 | Nullable<Sequence<int32_t>> arg0; | |||
8670 | if (args[0].isObject()) { | |||
8671 | JS::ForOfIterator iter(cx); | |||
8672 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
8673 | return false; | |||
8674 | } | |||
8675 | if (!iter.valueIsIterable()) { | |||
8676 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8677 | return false; | |||
8678 | } | |||
8679 | Sequence<int32_t> &arr = arg0.SetValue(); | |||
8680 | JS::Rooted<JS::Value> temp(cx); | |||
8681 | while (true) { | |||
8682 | bool done; | |||
8683 | if (!iter.next(&temp, &done)) { | |||
8684 | return false; | |||
8685 | } | |||
8686 | if (done) { | |||
8687 | break; | |||
8688 | } | |||
8689 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
8690 | if (!slotPtr) { | |||
8691 | JS_ReportOutOfMemory(cx); | |||
8692 | return false; | |||
8693 | } | |||
8694 | int32_t& slot = *slotPtr; | |||
8695 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
8696 | return false; | |||
8697 | } | |||
8698 | } | |||
8699 | } else if (args[0].isNullOrUndefined()) { | |||
8700 | arg0.SetNull(); | |||
8701 | } else { | |||
8702 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8703 | return false; | |||
8704 | } | |||
8705 | // NOTE: This assert does NOT call the function. | |||
8706 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableSequence(Constify(arg0)))>, "Should be returning void here"); | |||
8707 | MOZ_KnownLive(self)(self)->PassNullableSequence(Constify(arg0)); | |||
8708 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8708); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8708; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8709 | args.rval().setUndefined(); | |||
8710 | return true; | |||
8711 | } | |||
8712 | ||||
8713 | static const JSJitInfo passNullableSequence_methodinfo = { | |||
8714 | { (JSJitGetterOp)passNullableSequence }, | |||
8715 | { prototypes::id::TestExampleInterface }, | |||
8716 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8717 | JSJitInfo::Method, | |||
8718 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8719 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
8720 | false, /* isInfallible. False in setters. */ | |||
8721 | false, /* isMovable. Not relevant for setters. */ | |||
8722 | false, /* isEliminatable. Not relevant for setters. */ | |||
8723 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8724 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8725 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8726 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8727 | }; | |||
8728 | ||||
8729 | MOZ_CAN_RUN_SCRIPT static bool | |||
8730 | passSequenceOfNullableInts(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8731 | { | |||
8732 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfNullableInts"); | |||
8733 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8736( cx, "TestExampleInterface" , "passSequenceOfNullableInts", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8734 | "TestExampleInterface", "passSequenceOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8736( cx, "TestExampleInterface" , "passSequenceOfNullableInts", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8735 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8736( cx, "TestExampleInterface" , "passSequenceOfNullableInts", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8736 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8736( cx, "TestExampleInterface" , "passSequenceOfNullableInts", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
8737 | ||||
8738 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8739 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfNullableInts", 1)) { | |||
8740 | return false; | |||
8741 | } | |||
8742 | binding_detail::AutoSequence<Nullable<int32_t>> arg0; | |||
8743 | if (args[0].isObject()) { | |||
8744 | JS::ForOfIterator iter(cx); | |||
8745 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
8746 | return false; | |||
8747 | } | |||
8748 | if (!iter.valueIsIterable()) { | |||
8749 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8750 | return false; | |||
8751 | } | |||
8752 | binding_detail::AutoSequence<Nullable<int32_t>> &arr = arg0; | |||
8753 | JS::Rooted<JS::Value> temp(cx); | |||
8754 | while (true) { | |||
8755 | bool done; | |||
8756 | if (!iter.next(&temp, &done)) { | |||
8757 | return false; | |||
8758 | } | |||
8759 | if (done) { | |||
8760 | break; | |||
8761 | } | |||
8762 | Nullable<int32_t>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
8763 | if (!slotPtr) { | |||
8764 | JS_ReportOutOfMemory(cx); | |||
8765 | return false; | |||
8766 | } | |||
8767 | Nullable<int32_t>& slot = *slotPtr; | |||
8768 | if (temp.isNullOrUndefined()) { | |||
8769 | slot.SetNull(); | |||
8770 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot.SetValue())) { | |||
8771 | return false; | |||
8772 | } | |||
8773 | } | |||
8774 | } else { | |||
8775 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8776 | return false; | |||
8777 | } | |||
8778 | // NOTE: This assert does NOT call the function. | |||
8779 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfNullableInts(Constify(arg0)))>, "Should be returning void here"); | |||
8780 | MOZ_KnownLive(self)(self)->PassSequenceOfNullableInts(Constify(arg0)); | |||
8781 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8781); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8781; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8782 | args.rval().setUndefined(); | |||
8783 | return true; | |||
8784 | } | |||
8785 | ||||
8786 | static const JSJitInfo passSequenceOfNullableInts_methodinfo = { | |||
8787 | { (JSJitGetterOp)passSequenceOfNullableInts }, | |||
8788 | { prototypes::id::TestExampleInterface }, | |||
8789 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8790 | JSJitInfo::Method, | |||
8791 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8792 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
8793 | false, /* isInfallible. False in setters. */ | |||
8794 | false, /* isMovable. Not relevant for setters. */ | |||
8795 | false, /* isEliminatable. Not relevant for setters. */ | |||
8796 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8797 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8798 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8799 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8800 | }; | |||
8801 | ||||
8802 | MOZ_CAN_RUN_SCRIPT static bool | |||
8803 | passOptionalSequenceOfNullableInts(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8804 | { | |||
8805 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalSequenceOfNullableInts"); | |||
8806 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8809( cx, "TestExampleInterface" , "passOptionalSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8807 | "TestExampleInterface", "passOptionalSequenceOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8809( cx, "TestExampleInterface" , "passOptionalSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8808 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8809( cx, "TestExampleInterface" , "passOptionalSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8809 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8809( cx, "TestExampleInterface" , "passOptionalSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
8810 | ||||
8811 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8812 | Optional<Sequence<Nullable<int32_t>>> arg0; | |||
8813 | if (args.hasDefined(0)) { | |||
8814 | arg0.Construct(); | |||
8815 | if (args[0].isObject()) { | |||
8816 | JS::ForOfIterator iter(cx); | |||
8817 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
8818 | return false; | |||
8819 | } | |||
8820 | if (!iter.valueIsIterable()) { | |||
8821 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8822 | return false; | |||
8823 | } | |||
8824 | Sequence<Nullable<int32_t>> &arr = arg0.Value(); | |||
8825 | JS::Rooted<JS::Value> temp(cx); | |||
8826 | while (true) { | |||
8827 | bool done; | |||
8828 | if (!iter.next(&temp, &done)) { | |||
8829 | return false; | |||
8830 | } | |||
8831 | if (done) { | |||
8832 | break; | |||
8833 | } | |||
8834 | Nullable<int32_t>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
8835 | if (!slotPtr) { | |||
8836 | JS_ReportOutOfMemory(cx); | |||
8837 | return false; | |||
8838 | } | |||
8839 | Nullable<int32_t>& slot = *slotPtr; | |||
8840 | if (temp.isNullOrUndefined()) { | |||
8841 | slot.SetNull(); | |||
8842 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot.SetValue())) { | |||
8843 | return false; | |||
8844 | } | |||
8845 | } | |||
8846 | } else { | |||
8847 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8848 | return false; | |||
8849 | } | |||
8850 | } | |||
8851 | // NOTE: This assert does NOT call the function. | |||
8852 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSequenceOfNullableInts(Constify(arg0)))>, "Should be returning void here"); | |||
8853 | MOZ_KnownLive(self)(self)->PassOptionalSequenceOfNullableInts(Constify(arg0)); | |||
8854 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8854); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8854; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8855 | args.rval().setUndefined(); | |||
8856 | return true; | |||
8857 | } | |||
8858 | ||||
8859 | static const JSJitInfo passOptionalSequenceOfNullableInts_methodinfo = { | |||
8860 | { (JSJitGetterOp)passOptionalSequenceOfNullableInts }, | |||
8861 | { prototypes::id::TestExampleInterface }, | |||
8862 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8863 | JSJitInfo::Method, | |||
8864 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8865 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
8866 | false, /* isInfallible. False in setters. */ | |||
8867 | false, /* isMovable. Not relevant for setters. */ | |||
8868 | false, /* isEliminatable. Not relevant for setters. */ | |||
8869 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8870 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8871 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8872 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8873 | }; | |||
8874 | ||||
8875 | MOZ_CAN_RUN_SCRIPT static bool | |||
8876 | passOptionalNullableSequenceOfNullableInts(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8877 | { | |||
8878 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequenceOfNullableInts"); | |||
8879 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8882( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8880 | "TestExampleInterface", "passOptionalNullableSequenceOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8882( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8881 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8882( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8882 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8882( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
8883 | ||||
8884 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8885 | Optional<Nullable<Sequence<Nullable<int32_t>>>> arg0; | |||
8886 | if (args.hasDefined(0)) { | |||
8887 | arg0.Construct(); | |||
8888 | if (args[0].isObject()) { | |||
8889 | JS::ForOfIterator iter(cx); | |||
8890 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
8891 | return false; | |||
8892 | } | |||
8893 | if (!iter.valueIsIterable()) { | |||
8894 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8895 | return false; | |||
8896 | } | |||
8897 | Sequence<Nullable<int32_t>> &arr = arg0.Value().SetValue(); | |||
8898 | JS::Rooted<JS::Value> temp(cx); | |||
8899 | while (true) { | |||
8900 | bool done; | |||
8901 | if (!iter.next(&temp, &done)) { | |||
8902 | return false; | |||
8903 | } | |||
8904 | if (done) { | |||
8905 | break; | |||
8906 | } | |||
8907 | Nullable<int32_t>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
8908 | if (!slotPtr) { | |||
8909 | JS_ReportOutOfMemory(cx); | |||
8910 | return false; | |||
8911 | } | |||
8912 | Nullable<int32_t>& slot = *slotPtr; | |||
8913 | if (temp.isNullOrUndefined()) { | |||
8914 | slot.SetNull(); | |||
8915 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot.SetValue())) { | |||
8916 | return false; | |||
8917 | } | |||
8918 | } | |||
8919 | } else if (args[0].isNullOrUndefined()) { | |||
8920 | arg0.Value().SetNull(); | |||
8921 | } else { | |||
8922 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
8923 | return false; | |||
8924 | } | |||
8925 | } | |||
8926 | // NOTE: This assert does NOT call the function. | |||
8927 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableInts(Constify(arg0)))>, "Should be returning void here"); | |||
8928 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableInts(Constify(arg0)); | |||
8929 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8929); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8929; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8930 | args.rval().setUndefined(); | |||
8931 | return true; | |||
8932 | } | |||
8933 | ||||
8934 | static const JSJitInfo passOptionalNullableSequenceOfNullableInts_methodinfo = { | |||
8935 | { (JSJitGetterOp)passOptionalNullableSequenceOfNullableInts }, | |||
8936 | { prototypes::id::TestExampleInterface }, | |||
8937 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8938 | JSJitInfo::Method, | |||
8939 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8940 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
8941 | false, /* isInfallible. False in setters. */ | |||
8942 | false, /* isMovable. Not relevant for setters. */ | |||
8943 | false, /* isEliminatable. Not relevant for setters. */ | |||
8944 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
8945 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
8946 | false, /* isTypedMethod. Only relevant for methods. */ | |||
8947 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
8948 | }; | |||
8949 | ||||
8950 | MOZ_CAN_RUN_SCRIPT static bool | |||
8951 | receiveCastableObjectSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
8952 | { | |||
8953 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject8956( cx, "TestExampleInterface" , "receiveCastableObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8954 | "TestExampleInterface", "receiveCastableObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject8956( cx, "TestExampleInterface" , "receiveCastableObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8955 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject8956( cx, "TestExampleInterface" , "receiveCastableObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
8956 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject8956( cx, "TestExampleInterface" , "receiveCastableObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
8957 | ||||
8958 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
8959 | nsTArray<StrongPtrForMember<mozilla::dom::TestInterface>> result; | |||
8960 | // NOTE: This assert does NOT call the function. | |||
8961 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveCastableObjectSequence(result))>, "Should be returning void here"); | |||
8962 | MOZ_KnownLive(self)(self)->ReceiveCastableObjectSequence(result); | |||
8963 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8963); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 8963; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
8964 | ||||
8965 | uint32_t length = result.Length(); | |||
8966 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
8967 | if (!returnArray) { | |||
8968 | return false; | |||
8969 | } | |||
8970 | // Scope for 'tmp' | |||
8971 | { | |||
8972 | JS::Rooted<JS::Value> tmp(cx); | |||
8973 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
8974 | // Control block to let us common up the JS_DefineElement calls when there | |||
8975 | // are different ways to succeed at wrapping the object. | |||
8976 | do { | |||
8977 | if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) { | |||
8978 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 8978); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 8978; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
8979 | return false; | |||
8980 | } | |||
8981 | break; | |||
8982 | } while (false); | |||
8983 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
8984 | JSPROP_ENUMERATE)) { | |||
8985 | return false; | |||
8986 | } | |||
8987 | } | |||
8988 | } | |||
8989 | args.rval().setObject(*returnArray); | |||
8990 | return true; | |||
8991 | } | |||
8992 | ||||
8993 | static const JSJitInfo receiveCastableObjectSequence_methodinfo = { | |||
8994 | { (JSJitGetterOp)receiveCastableObjectSequence }, | |||
8995 | { prototypes::id::TestExampleInterface }, | |||
8996 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
8997 | JSJitInfo::Method, | |||
8998 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
8999 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
9000 | false, /* isInfallible. False in setters. */ | |||
9001 | false, /* isMovable. Not relevant for setters. */ | |||
9002 | false, /* isEliminatable. Not relevant for setters. */ | |||
9003 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9004 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9005 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9006 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9007 | }; | |||
9008 | ||||
9009 | MOZ_CAN_RUN_SCRIPT static bool | |||
9010 | receiveCallbackObjectSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9011 | { | |||
9012 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9015( cx, "TestExampleInterface" , "receiveCallbackObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9013 | "TestExampleInterface", "receiveCallbackObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9015( cx, "TestExampleInterface" , "receiveCallbackObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9014 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9015( cx, "TestExampleInterface" , "receiveCallbackObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9015 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9015( cx, "TestExampleInterface" , "receiveCallbackObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9016 | ||||
9017 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9018 | nsTArray<StrongPtrForMember<mozilla::dom::TestCallbackInterface>> result; | |||
9019 | // NOTE: This assert does NOT call the function. | |||
9020 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveCallbackObjectSequence(result))>, "Should be returning void here"); | |||
9021 | MOZ_KnownLive(self)(self)->ReceiveCallbackObjectSequence(result); | |||
9022 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9022); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9022; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9023 | ||||
9024 | uint32_t length = result.Length(); | |||
9025 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9026 | if (!returnArray) { | |||
9027 | return false; | |||
9028 | } | |||
9029 | // Scope for 'tmp' | |||
9030 | { | |||
9031 | JS::Rooted<JS::Value> tmp(cx); | |||
9032 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9033 | // Control block to let us common up the JS_DefineElement calls when there | |||
9034 | // are different ways to succeed at wrapping the object. | |||
9035 | do { | |||
9036 | tmp.setObjectOrNull(GetCallbackFromCallbackObject(cx, result[sequenceIdx0])); | |||
9037 | if (!MaybeWrapObjectValue(cx, &tmp)) { | |||
9038 | return false; | |||
9039 | } | |||
9040 | break; | |||
9041 | } while (false); | |||
9042 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9043 | JSPROP_ENUMERATE)) { | |||
9044 | return false; | |||
9045 | } | |||
9046 | } | |||
9047 | } | |||
9048 | args.rval().setObject(*returnArray); | |||
9049 | return true; | |||
9050 | } | |||
9051 | ||||
9052 | static const JSJitInfo receiveCallbackObjectSequence_methodinfo = { | |||
9053 | { (JSJitGetterOp)receiveCallbackObjectSequence }, | |||
9054 | { prototypes::id::TestExampleInterface }, | |||
9055 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9056 | JSJitInfo::Method, | |||
9057 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9058 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
9059 | false, /* isInfallible. False in setters. */ | |||
9060 | false, /* isMovable. Not relevant for setters. */ | |||
9061 | false, /* isEliminatable. Not relevant for setters. */ | |||
9062 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9063 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9064 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9065 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9066 | }; | |||
9067 | ||||
9068 | MOZ_CAN_RUN_SCRIPT static bool | |||
9069 | receiveNullableCastableObjectSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9070 | { | |||
9071 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9074( cx, "TestExampleInterface" , "receiveNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9072 | "TestExampleInterface", "receiveNullableCastableObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9074( cx, "TestExampleInterface" , "receiveNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9073 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9074( cx, "TestExampleInterface" , "receiveNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9074 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9074( cx, "TestExampleInterface" , "receiveNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9075 | ||||
9076 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9077 | nsTArray<StrongPtrForMember<mozilla::dom::TestInterface>> result; | |||
9078 | // NOTE: This assert does NOT call the function. | |||
9079 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableCastableObjectSequence(result))>, "Should be returning void here"); | |||
9080 | MOZ_KnownLive(self)(self)->ReceiveNullableCastableObjectSequence(result); | |||
9081 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9081); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9081; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9082 | ||||
9083 | uint32_t length = result.Length(); | |||
9084 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9085 | if (!returnArray) { | |||
9086 | return false; | |||
9087 | } | |||
9088 | // Scope for 'tmp' | |||
9089 | { | |||
9090 | JS::Rooted<JS::Value> tmp(cx); | |||
9091 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9092 | // Control block to let us common up the JS_DefineElement calls when there | |||
9093 | // are different ways to succeed at wrapping the object. | |||
9094 | do { | |||
9095 | if (!result[sequenceIdx0]) { | |||
9096 | tmp.setNull(); | |||
9097 | break; | |||
9098 | } | |||
9099 | if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) { | |||
9100 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9100); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 9100; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
9101 | return false; | |||
9102 | } | |||
9103 | break; | |||
9104 | } while (false); | |||
9105 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9106 | JSPROP_ENUMERATE)) { | |||
9107 | return false; | |||
9108 | } | |||
9109 | } | |||
9110 | } | |||
9111 | args.rval().setObject(*returnArray); | |||
9112 | return true; | |||
9113 | } | |||
9114 | ||||
9115 | static const JSJitInfo receiveNullableCastableObjectSequence_methodinfo = { | |||
9116 | { (JSJitGetterOp)receiveNullableCastableObjectSequence }, | |||
9117 | { prototypes::id::TestExampleInterface }, | |||
9118 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9119 | JSJitInfo::Method, | |||
9120 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9121 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
9122 | false, /* isInfallible. False in setters. */ | |||
9123 | false, /* isMovable. Not relevant for setters. */ | |||
9124 | false, /* isEliminatable. Not relevant for setters. */ | |||
9125 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9126 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9127 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9128 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9129 | }; | |||
9130 | ||||
9131 | MOZ_CAN_RUN_SCRIPT static bool | |||
9132 | receiveNullableCallbackObjectSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9133 | { | |||
9134 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9137( cx, "TestExampleInterface" , "receiveNullableCallbackObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9135 | "TestExampleInterface", "receiveNullableCallbackObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9137( cx, "TestExampleInterface" , "receiveNullableCallbackObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9136 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9137( cx, "TestExampleInterface" , "receiveNullableCallbackObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9137 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9137( cx, "TestExampleInterface" , "receiveNullableCallbackObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9138 | ||||
9139 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9140 | nsTArray<StrongPtrForMember<mozilla::dom::TestCallbackInterface>> result; | |||
9141 | // NOTE: This assert does NOT call the function. | |||
9142 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableCallbackObjectSequence(result))>, "Should be returning void here"); | |||
9143 | MOZ_KnownLive(self)(self)->ReceiveNullableCallbackObjectSequence(result); | |||
9144 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9144); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9144; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9145 | ||||
9146 | uint32_t length = result.Length(); | |||
9147 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9148 | if (!returnArray) { | |||
9149 | return false; | |||
9150 | } | |||
9151 | // Scope for 'tmp' | |||
9152 | { | |||
9153 | JS::Rooted<JS::Value> tmp(cx); | |||
9154 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9155 | // Control block to let us common up the JS_DefineElement calls when there | |||
9156 | // are different ways to succeed at wrapping the object. | |||
9157 | do { | |||
9158 | if (result[sequenceIdx0]) { | |||
9159 | tmp.setObjectOrNull(GetCallbackFromCallbackObject(cx, result[sequenceIdx0])); | |||
9160 | if (!MaybeWrapObjectOrNullValue(cx, &tmp)) { | |||
9161 | return false; | |||
9162 | } | |||
9163 | break; | |||
9164 | } else { | |||
9165 | tmp.setNull(); | |||
9166 | break; | |||
9167 | } | |||
9168 | } while (false); | |||
9169 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9170 | JSPROP_ENUMERATE)) { | |||
9171 | return false; | |||
9172 | } | |||
9173 | } | |||
9174 | } | |||
9175 | args.rval().setObject(*returnArray); | |||
9176 | return true; | |||
9177 | } | |||
9178 | ||||
9179 | static const JSJitInfo receiveNullableCallbackObjectSequence_methodinfo = { | |||
9180 | { (JSJitGetterOp)receiveNullableCallbackObjectSequence }, | |||
9181 | { prototypes::id::TestExampleInterface }, | |||
9182 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9183 | JSJitInfo::Method, | |||
9184 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9185 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
9186 | false, /* isInfallible. False in setters. */ | |||
9187 | false, /* isMovable. Not relevant for setters. */ | |||
9188 | false, /* isEliminatable. Not relevant for setters. */ | |||
9189 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9190 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9191 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9192 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9193 | }; | |||
9194 | ||||
9195 | MOZ_CAN_RUN_SCRIPT static bool | |||
9196 | receiveCastableObjectNullableSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9197 | { | |||
9198 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9201( cx, "TestExampleInterface" , "receiveCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9199 | "TestExampleInterface", "receiveCastableObjectNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9201( cx, "TestExampleInterface" , "receiveCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9200 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9201( cx, "TestExampleInterface" , "receiveCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9201 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9201( cx, "TestExampleInterface" , "receiveCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9202 | ||||
9203 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9204 | Nullable<nsTArray<StrongPtrForMember<mozilla::dom::TestInterface>>> result; | |||
9205 | // NOTE: This assert does NOT call the function. | |||
9206 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveCastableObjectNullableSequence(result))>, "Should be returning void here"); | |||
9207 | MOZ_KnownLive(self)(self)->ReceiveCastableObjectNullableSequence(result); | |||
9208 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9208); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9208; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9209 | ||||
9210 | if (result.IsNull()) { | |||
9211 | args.rval().setNull(); | |||
9212 | return true; | |||
9213 | } | |||
9214 | ||||
9215 | uint32_t length = result.Value().Length(); | |||
9216 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9217 | if (!returnArray) { | |||
9218 | return false; | |||
9219 | } | |||
9220 | // Scope for 'tmp' | |||
9221 | { | |||
9222 | JS::Rooted<JS::Value> tmp(cx); | |||
9223 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9224 | // Control block to let us common up the JS_DefineElement calls when there | |||
9225 | // are different ways to succeed at wrapping the object. | |||
9226 | do { | |||
9227 | if (!GetOrCreateDOMReflector(cx, result.Value()[sequenceIdx0], &tmp)) { | |||
9228 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9228); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 9228; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
9229 | return false; | |||
9230 | } | |||
9231 | break; | |||
9232 | } while (false); | |||
9233 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9234 | JSPROP_ENUMERATE)) { | |||
9235 | return false; | |||
9236 | } | |||
9237 | } | |||
9238 | } | |||
9239 | args.rval().setObject(*returnArray); | |||
9240 | return true; | |||
9241 | } | |||
9242 | ||||
9243 | static const JSJitInfo receiveCastableObjectNullableSequence_methodinfo = { | |||
9244 | { (JSJitGetterOp)receiveCastableObjectNullableSequence }, | |||
9245 | { prototypes::id::TestExampleInterface }, | |||
9246 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9247 | JSJitInfo::Method, | |||
9248 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9249 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
9250 | false, /* isInfallible. False in setters. */ | |||
9251 | false, /* isMovable. Not relevant for setters. */ | |||
9252 | false, /* isEliminatable. Not relevant for setters. */ | |||
9253 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9254 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9255 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9256 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9257 | }; | |||
9258 | ||||
9259 | MOZ_CAN_RUN_SCRIPT static bool | |||
9260 | receiveNullableCastableObjectNullableSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9261 | { | |||
9262 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9265( cx, "TestExampleInterface" , "receiveNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9263 | "TestExampleInterface", "receiveNullableCastableObjectNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9265( cx, "TestExampleInterface" , "receiveNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9264 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9265( cx, "TestExampleInterface" , "receiveNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9265 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9265( cx, "TestExampleInterface" , "receiveNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9266 | ||||
9267 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9268 | Nullable<nsTArray<StrongPtrForMember<mozilla::dom::TestInterface>>> result; | |||
9269 | // NOTE: This assert does NOT call the function. | |||
9270 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableCastableObjectNullableSequence(result))>, "Should be returning void here"); | |||
9271 | MOZ_KnownLive(self)(self)->ReceiveNullableCastableObjectNullableSequence(result); | |||
9272 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9272); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9272; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9273 | ||||
9274 | if (result.IsNull()) { | |||
9275 | args.rval().setNull(); | |||
9276 | return true; | |||
9277 | } | |||
9278 | ||||
9279 | uint32_t length = result.Value().Length(); | |||
9280 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9281 | if (!returnArray) { | |||
9282 | return false; | |||
9283 | } | |||
9284 | // Scope for 'tmp' | |||
9285 | { | |||
9286 | JS::Rooted<JS::Value> tmp(cx); | |||
9287 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9288 | // Control block to let us common up the JS_DefineElement calls when there | |||
9289 | // are different ways to succeed at wrapping the object. | |||
9290 | do { | |||
9291 | if (!result.Value()[sequenceIdx0]) { | |||
9292 | tmp.setNull(); | |||
9293 | break; | |||
9294 | } | |||
9295 | if (!GetOrCreateDOMReflector(cx, result.Value()[sequenceIdx0], &tmp)) { | |||
9296 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9296); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 9296; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
9297 | return false; | |||
9298 | } | |||
9299 | break; | |||
9300 | } while (false); | |||
9301 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9302 | JSPROP_ENUMERATE)) { | |||
9303 | return false; | |||
9304 | } | |||
9305 | } | |||
9306 | } | |||
9307 | args.rval().setObject(*returnArray); | |||
9308 | return true; | |||
9309 | } | |||
9310 | ||||
9311 | static const JSJitInfo receiveNullableCastableObjectNullableSequence_methodinfo = { | |||
9312 | { (JSJitGetterOp)receiveNullableCastableObjectNullableSequence }, | |||
9313 | { prototypes::id::TestExampleInterface }, | |||
9314 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9315 | JSJitInfo::Method, | |||
9316 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9317 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
9318 | false, /* isInfallible. False in setters. */ | |||
9319 | false, /* isMovable. Not relevant for setters. */ | |||
9320 | false, /* isEliminatable. Not relevant for setters. */ | |||
9321 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9322 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9323 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9324 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9325 | }; | |||
9326 | ||||
9327 | MOZ_CAN_RUN_SCRIPT static bool | |||
9328 | receiveWeakCastableObjectSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9329 | { | |||
9330 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9333( cx, "TestExampleInterface" , "receiveWeakCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9331 | "TestExampleInterface", "receiveWeakCastableObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9333( cx, "TestExampleInterface" , "receiveWeakCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9332 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9333( cx, "TestExampleInterface" , "receiveWeakCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9333 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9333( cx, "TestExampleInterface" , "receiveWeakCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9334 | ||||
9335 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9336 | nsTArray<StrongPtrForMember<mozilla::dom::TestInterface>> result; | |||
9337 | // NOTE: This assert does NOT call the function. | |||
9338 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveWeakCastableObjectSequence(result))>, "Should be returning void here"); | |||
9339 | MOZ_KnownLive(self)(self)->ReceiveWeakCastableObjectSequence(result); | |||
9340 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9340); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9340; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9341 | ||||
9342 | uint32_t length = result.Length(); | |||
9343 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9344 | if (!returnArray) { | |||
9345 | return false; | |||
9346 | } | |||
9347 | // Scope for 'tmp' | |||
9348 | { | |||
9349 | JS::Rooted<JS::Value> tmp(cx); | |||
9350 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9351 | // Control block to let us common up the JS_DefineElement calls when there | |||
9352 | // are different ways to succeed at wrapping the object. | |||
9353 | do { | |||
9354 | if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) { | |||
9355 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9355); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 9355; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
9356 | return false; | |||
9357 | } | |||
9358 | break; | |||
9359 | } while (false); | |||
9360 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9361 | JSPROP_ENUMERATE)) { | |||
9362 | return false; | |||
9363 | } | |||
9364 | } | |||
9365 | } | |||
9366 | args.rval().setObject(*returnArray); | |||
9367 | return true; | |||
9368 | } | |||
9369 | ||||
9370 | static const JSJitInfo receiveWeakCastableObjectSequence_methodinfo = { | |||
9371 | { (JSJitGetterOp)receiveWeakCastableObjectSequence }, | |||
9372 | { prototypes::id::TestExampleInterface }, | |||
9373 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9374 | JSJitInfo::Method, | |||
9375 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9376 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
9377 | false, /* isInfallible. False in setters. */ | |||
9378 | false, /* isMovable. Not relevant for setters. */ | |||
9379 | false, /* isEliminatable. Not relevant for setters. */ | |||
9380 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9381 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9382 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9383 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9384 | }; | |||
9385 | ||||
9386 | MOZ_CAN_RUN_SCRIPT static bool | |||
9387 | receiveWeakNullableCastableObjectSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9388 | { | |||
9389 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9392( cx, "TestExampleInterface" , "receiveWeakNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9390 | "TestExampleInterface", "receiveWeakNullableCastableObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9392( cx, "TestExampleInterface" , "receiveWeakNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9391 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9392( cx, "TestExampleInterface" , "receiveWeakNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9392 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9392( cx, "TestExampleInterface" , "receiveWeakNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9393 | ||||
9394 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9395 | nsTArray<StrongPtrForMember<mozilla::dom::TestInterface>> result; | |||
9396 | // NOTE: This assert does NOT call the function. | |||
9397 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveWeakNullableCastableObjectSequence(result))>, "Should be returning void here"); | |||
9398 | MOZ_KnownLive(self)(self)->ReceiveWeakNullableCastableObjectSequence(result); | |||
9399 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9399); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9399; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9400 | ||||
9401 | uint32_t length = result.Length(); | |||
9402 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9403 | if (!returnArray) { | |||
9404 | return false; | |||
9405 | } | |||
9406 | // Scope for 'tmp' | |||
9407 | { | |||
9408 | JS::Rooted<JS::Value> tmp(cx); | |||
9409 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9410 | // Control block to let us common up the JS_DefineElement calls when there | |||
9411 | // are different ways to succeed at wrapping the object. | |||
9412 | do { | |||
9413 | if (!result[sequenceIdx0]) { | |||
9414 | tmp.setNull(); | |||
9415 | break; | |||
9416 | } | |||
9417 | if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) { | |||
9418 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9418); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 9418; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
9419 | return false; | |||
9420 | } | |||
9421 | break; | |||
9422 | } while (false); | |||
9423 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9424 | JSPROP_ENUMERATE)) { | |||
9425 | return false; | |||
9426 | } | |||
9427 | } | |||
9428 | } | |||
9429 | args.rval().setObject(*returnArray); | |||
9430 | return true; | |||
9431 | } | |||
9432 | ||||
9433 | static const JSJitInfo receiveWeakNullableCastableObjectSequence_methodinfo = { | |||
9434 | { (JSJitGetterOp)receiveWeakNullableCastableObjectSequence }, | |||
9435 | { prototypes::id::TestExampleInterface }, | |||
9436 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9437 | JSJitInfo::Method, | |||
9438 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9439 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
9440 | false, /* isInfallible. False in setters. */ | |||
9441 | false, /* isMovable. Not relevant for setters. */ | |||
9442 | false, /* isEliminatable. Not relevant for setters. */ | |||
9443 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9444 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9445 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9446 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9447 | }; | |||
9448 | ||||
9449 | MOZ_CAN_RUN_SCRIPT static bool | |||
9450 | receiveWeakCastableObjectNullableSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9451 | { | |||
9452 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9455( cx, "TestExampleInterface" , "receiveWeakCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9453 | "TestExampleInterface", "receiveWeakCastableObjectNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9455( cx, "TestExampleInterface" , "receiveWeakCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9454 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9455( cx, "TestExampleInterface" , "receiveWeakCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9455 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9455( cx, "TestExampleInterface" , "receiveWeakCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9456 | ||||
9457 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9458 | Nullable<nsTArray<StrongPtrForMember<mozilla::dom::TestInterface>>> result; | |||
9459 | // NOTE: This assert does NOT call the function. | |||
9460 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveWeakCastableObjectNullableSequence(result))>, "Should be returning void here"); | |||
9461 | MOZ_KnownLive(self)(self)->ReceiveWeakCastableObjectNullableSequence(result); | |||
9462 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9462); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9462; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9463 | ||||
9464 | if (result.IsNull()) { | |||
9465 | args.rval().setNull(); | |||
9466 | return true; | |||
9467 | } | |||
9468 | ||||
9469 | uint32_t length = result.Value().Length(); | |||
9470 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9471 | if (!returnArray) { | |||
9472 | return false; | |||
9473 | } | |||
9474 | // Scope for 'tmp' | |||
9475 | { | |||
9476 | JS::Rooted<JS::Value> tmp(cx); | |||
9477 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9478 | // Control block to let us common up the JS_DefineElement calls when there | |||
9479 | // are different ways to succeed at wrapping the object. | |||
9480 | do { | |||
9481 | if (!GetOrCreateDOMReflector(cx, result.Value()[sequenceIdx0], &tmp)) { | |||
9482 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9482); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 9482; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
9483 | return false; | |||
9484 | } | |||
9485 | break; | |||
9486 | } while (false); | |||
9487 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9488 | JSPROP_ENUMERATE)) { | |||
9489 | return false; | |||
9490 | } | |||
9491 | } | |||
9492 | } | |||
9493 | args.rval().setObject(*returnArray); | |||
9494 | return true; | |||
9495 | } | |||
9496 | ||||
9497 | static const JSJitInfo receiveWeakCastableObjectNullableSequence_methodinfo = { | |||
9498 | { (JSJitGetterOp)receiveWeakCastableObjectNullableSequence }, | |||
9499 | { prototypes::id::TestExampleInterface }, | |||
9500 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9501 | JSJitInfo::Method, | |||
9502 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9503 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
9504 | false, /* isInfallible. False in setters. */ | |||
9505 | false, /* isMovable. Not relevant for setters. */ | |||
9506 | false, /* isEliminatable. Not relevant for setters. */ | |||
9507 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9508 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9509 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9510 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9511 | }; | |||
9512 | ||||
9513 | MOZ_CAN_RUN_SCRIPT static bool | |||
9514 | receiveWeakNullableCastableObjectNullableSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9515 | { | |||
9516 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9519( cx, "TestExampleInterface" , "receiveWeakNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9517 | "TestExampleInterface", "receiveWeakNullableCastableObjectNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9519( cx, "TestExampleInterface" , "receiveWeakNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9518 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9519( cx, "TestExampleInterface" , "receiveWeakNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9519 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9519( cx, "TestExampleInterface" , "receiveWeakNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9520 | ||||
9521 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9522 | Nullable<nsTArray<StrongPtrForMember<mozilla::dom::TestInterface>>> result; | |||
9523 | // NOTE: This assert does NOT call the function. | |||
9524 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveWeakNullableCastableObjectNullableSequence(result))>, "Should be returning void here"); | |||
9525 | MOZ_KnownLive(self)(self)->ReceiveWeakNullableCastableObjectNullableSequence(result); | |||
9526 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9526); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9526; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9527 | ||||
9528 | if (result.IsNull()) { | |||
9529 | args.rval().setNull(); | |||
9530 | return true; | |||
9531 | } | |||
9532 | ||||
9533 | uint32_t length = result.Value().Length(); | |||
9534 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
9535 | if (!returnArray) { | |||
9536 | return false; | |||
9537 | } | |||
9538 | // Scope for 'tmp' | |||
9539 | { | |||
9540 | JS::Rooted<JS::Value> tmp(cx); | |||
9541 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
9542 | // Control block to let us common up the JS_DefineElement calls when there | |||
9543 | // are different ways to succeed at wrapping the object. | |||
9544 | do { | |||
9545 | if (!result.Value()[sequenceIdx0]) { | |||
9546 | tmp.setNull(); | |||
9547 | break; | |||
9548 | } | |||
9549 | if (!GetOrCreateDOMReflector(cx, result.Value()[sequenceIdx0], &tmp)) { | |||
9550 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9550); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 9550; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
9551 | return false; | |||
9552 | } | |||
9553 | break; | |||
9554 | } while (false); | |||
9555 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
9556 | JSPROP_ENUMERATE)) { | |||
9557 | return false; | |||
9558 | } | |||
9559 | } | |||
9560 | } | |||
9561 | args.rval().setObject(*returnArray); | |||
9562 | return true; | |||
9563 | } | |||
9564 | ||||
9565 | static const JSJitInfo receiveWeakNullableCastableObjectNullableSequence_methodinfo = { | |||
9566 | { (JSJitGetterOp)receiveWeakNullableCastableObjectNullableSequence }, | |||
9567 | { prototypes::id::TestExampleInterface }, | |||
9568 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9569 | JSJitInfo::Method, | |||
9570 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9571 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
9572 | false, /* isInfallible. False in setters. */ | |||
9573 | false, /* isMovable. Not relevant for setters. */ | |||
9574 | false, /* isEliminatable. Not relevant for setters. */ | |||
9575 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9576 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9577 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9578 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9579 | }; | |||
9580 | ||||
9581 | MOZ_CAN_RUN_SCRIPT static bool | |||
9582 | passCastableObjectSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9583 | { | |||
9584 | BindingCallContext cx(cx_, "TestExampleInterface.passCastableObjectSequence"); | |||
9585 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9588( cx, "TestExampleInterface" , "passCastableObjectSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9586 | "TestExampleInterface", "passCastableObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9588( cx, "TestExampleInterface" , "passCastableObjectSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9587 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9588( cx, "TestExampleInterface" , "passCastableObjectSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9588 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9588( cx, "TestExampleInterface" , "passCastableObjectSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9589 | ||||
9590 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9591 | if (!args.requireAtLeast(cx, "TestExampleInterface.passCastableObjectSequence", 1)) { | |||
9592 | return false; | |||
9593 | } | |||
9594 | binding_detail::AutoSequence<OwningNonNull<mozilla::dom::TestInterface>> arg0; | |||
9595 | if (args[0].isObject()) { | |||
9596 | JS::ForOfIterator iter(cx); | |||
9597 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
9598 | return false; | |||
9599 | } | |||
9600 | if (!iter.valueIsIterable()) { | |||
9601 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9602 | return false; | |||
9603 | } | |||
9604 | binding_detail::AutoSequence<OwningNonNull<mozilla::dom::TestInterface>> &arr = arg0; | |||
9605 | JS::Rooted<JS::Value> temp(cx); | |||
9606 | while (true) { | |||
9607 | bool done; | |||
9608 | if (!iter.next(&temp, &done)) { | |||
9609 | return false; | |||
9610 | } | |||
9611 | if (done) { | |||
9612 | break; | |||
9613 | } | |||
9614 | OwningNonNull<mozilla::dom::TestInterface>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
9615 | if (!slotPtr) { | |||
9616 | JS_ReportOutOfMemory(cx); | |||
9617 | return false; | |||
9618 | } | |||
9619 | OwningNonNull<mozilla::dom::TestInterface>& slot = *slotPtr; | |||
9620 | if (temp.isObject()) { | |||
9621 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
9622 | { | |||
9623 | // Our JSContext should be in the right global to do unwrapping in. | |||
9624 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
9625 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
9626 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "TestInterface"); | |||
9627 | return false; | |||
9628 | } | |||
9629 | } | |||
9630 | } else { | |||
9631 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
9632 | return false; | |||
9633 | } | |||
9634 | } | |||
9635 | } else { | |||
9636 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9637 | return false; | |||
9638 | } | |||
9639 | // NOTE: This assert does NOT call the function. | |||
9640 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassCastableObjectSequence(Constify(arg0)))>, "Should be returning void here"); | |||
9641 | MOZ_KnownLive(self)(self)->PassCastableObjectSequence(Constify(arg0)); | |||
9642 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9642); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9642; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9643 | args.rval().setUndefined(); | |||
9644 | return true; | |||
9645 | } | |||
9646 | ||||
9647 | static const JSJitInfo passCastableObjectSequence_methodinfo = { | |||
9648 | { (JSJitGetterOp)passCastableObjectSequence }, | |||
9649 | { prototypes::id::TestExampleInterface }, | |||
9650 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9651 | JSJitInfo::Method, | |||
9652 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9653 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
9654 | false, /* isInfallible. False in setters. */ | |||
9655 | false, /* isMovable. Not relevant for setters. */ | |||
9656 | false, /* isEliminatable. Not relevant for setters. */ | |||
9657 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9658 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9659 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9660 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9661 | }; | |||
9662 | ||||
9663 | MOZ_CAN_RUN_SCRIPT static bool | |||
9664 | passNullableCastableObjectSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9665 | { | |||
9666 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableCastableObjectSequence"); | |||
9667 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9670( cx, "TestExampleInterface" , "passNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9668 | "TestExampleInterface", "passNullableCastableObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9670( cx, "TestExampleInterface" , "passNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9669 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9670( cx, "TestExampleInterface" , "passNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9670 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9670( cx, "TestExampleInterface" , "passNullableCastableObjectSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9671 | ||||
9672 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9673 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableCastableObjectSequence", 1)) { | |||
9674 | return false; | |||
9675 | } | |||
9676 | binding_detail::AutoSequence<RefPtr<mozilla::dom::TestInterface>> arg0; | |||
9677 | if (args[0].isObject()) { | |||
9678 | JS::ForOfIterator iter(cx); | |||
9679 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
9680 | return false; | |||
9681 | } | |||
9682 | if (!iter.valueIsIterable()) { | |||
9683 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9684 | return false; | |||
9685 | } | |||
9686 | binding_detail::AutoSequence<RefPtr<mozilla::dom::TestInterface>> &arr = arg0; | |||
9687 | JS::Rooted<JS::Value> temp(cx); | |||
9688 | while (true) { | |||
9689 | bool done; | |||
9690 | if (!iter.next(&temp, &done)) { | |||
9691 | return false; | |||
9692 | } | |||
9693 | if (done) { | |||
9694 | break; | |||
9695 | } | |||
9696 | RefPtr<mozilla::dom::TestInterface>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
9697 | if (!slotPtr) { | |||
9698 | JS_ReportOutOfMemory(cx); | |||
9699 | return false; | |||
9700 | } | |||
9701 | RefPtr<mozilla::dom::TestInterface>& slot = *slotPtr; | |||
9702 | if (temp.isObject()) { | |||
9703 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
9704 | { | |||
9705 | // Our JSContext should be in the right global to do unwrapping in. | |||
9706 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
9707 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
9708 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "TestInterface"); | |||
9709 | return false; | |||
9710 | } | |||
9711 | } | |||
9712 | } else if (temp.isNullOrUndefined()) { | |||
9713 | slot = nullptr; | |||
9714 | } else { | |||
9715 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
9716 | return false; | |||
9717 | } | |||
9718 | } | |||
9719 | } else { | |||
9720 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9721 | return false; | |||
9722 | } | |||
9723 | // NOTE: This assert does NOT call the function. | |||
9724 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableCastableObjectSequence(Constify(arg0)))>, "Should be returning void here"); | |||
9725 | MOZ_KnownLive(self)(self)->PassNullableCastableObjectSequence(Constify(arg0)); | |||
9726 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9726); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9726; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9727 | args.rval().setUndefined(); | |||
9728 | return true; | |||
9729 | } | |||
9730 | ||||
9731 | static const JSJitInfo passNullableCastableObjectSequence_methodinfo = { | |||
9732 | { (JSJitGetterOp)passNullableCastableObjectSequence }, | |||
9733 | { prototypes::id::TestExampleInterface }, | |||
9734 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9735 | JSJitInfo::Method, | |||
9736 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9737 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
9738 | false, /* isInfallible. False in setters. */ | |||
9739 | false, /* isMovable. Not relevant for setters. */ | |||
9740 | false, /* isEliminatable. Not relevant for setters. */ | |||
9741 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9742 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9743 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9744 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9745 | }; | |||
9746 | ||||
9747 | MOZ_CAN_RUN_SCRIPT static bool | |||
9748 | passCastableObjectNullableSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9749 | { | |||
9750 | BindingCallContext cx(cx_, "TestExampleInterface.passCastableObjectNullableSequence"); | |||
9751 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9754( cx, "TestExampleInterface" , "passCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9752 | "TestExampleInterface", "passCastableObjectNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9754( cx, "TestExampleInterface" , "passCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9753 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9754( cx, "TestExampleInterface" , "passCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9754 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9754( cx, "TestExampleInterface" , "passCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9755 | ||||
9756 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9757 | if (!args.requireAtLeast(cx, "TestExampleInterface.passCastableObjectNullableSequence", 1)) { | |||
9758 | return false; | |||
9759 | } | |||
9760 | Nullable<Sequence<OwningNonNull<mozilla::dom::TestInterface>>> arg0; | |||
9761 | if (args[0].isObject()) { | |||
9762 | JS::ForOfIterator iter(cx); | |||
9763 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
9764 | return false; | |||
9765 | } | |||
9766 | if (!iter.valueIsIterable()) { | |||
9767 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9768 | return false; | |||
9769 | } | |||
9770 | Sequence<OwningNonNull<mozilla::dom::TestInterface>> &arr = arg0.SetValue(); | |||
9771 | JS::Rooted<JS::Value> temp(cx); | |||
9772 | while (true) { | |||
9773 | bool done; | |||
9774 | if (!iter.next(&temp, &done)) { | |||
9775 | return false; | |||
9776 | } | |||
9777 | if (done) { | |||
9778 | break; | |||
9779 | } | |||
9780 | OwningNonNull<mozilla::dom::TestInterface>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
9781 | if (!slotPtr) { | |||
9782 | JS_ReportOutOfMemory(cx); | |||
9783 | return false; | |||
9784 | } | |||
9785 | OwningNonNull<mozilla::dom::TestInterface>& slot = *slotPtr; | |||
9786 | if (temp.isObject()) { | |||
9787 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
9788 | { | |||
9789 | // Our JSContext should be in the right global to do unwrapping in. | |||
9790 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
9791 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
9792 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "TestInterface"); | |||
9793 | return false; | |||
9794 | } | |||
9795 | } | |||
9796 | } else { | |||
9797 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
9798 | return false; | |||
9799 | } | |||
9800 | } | |||
9801 | } else if (args[0].isNullOrUndefined()) { | |||
9802 | arg0.SetNull(); | |||
9803 | } else { | |||
9804 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9805 | return false; | |||
9806 | } | |||
9807 | // NOTE: This assert does NOT call the function. | |||
9808 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassCastableObjectNullableSequence(Constify(arg0)))>, "Should be returning void here"); | |||
9809 | MOZ_KnownLive(self)(self)->PassCastableObjectNullableSequence(Constify(arg0)); | |||
9810 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9810); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9810; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9811 | args.rval().setUndefined(); | |||
9812 | return true; | |||
9813 | } | |||
9814 | ||||
9815 | static const JSJitInfo passCastableObjectNullableSequence_methodinfo = { | |||
9816 | { (JSJitGetterOp)passCastableObjectNullableSequence }, | |||
9817 | { prototypes::id::TestExampleInterface }, | |||
9818 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9819 | JSJitInfo::Method, | |||
9820 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9821 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
9822 | false, /* isInfallible. False in setters. */ | |||
9823 | false, /* isMovable. Not relevant for setters. */ | |||
9824 | false, /* isEliminatable. Not relevant for setters. */ | |||
9825 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9826 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9827 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9828 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9829 | }; | |||
9830 | ||||
9831 | MOZ_CAN_RUN_SCRIPT static bool | |||
9832 | passNullableCastableObjectNullableSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9833 | { | |||
9834 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableCastableObjectNullableSequence"); | |||
9835 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9838( cx, "TestExampleInterface" , "passNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9836 | "TestExampleInterface", "passNullableCastableObjectNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9838( cx, "TestExampleInterface" , "passNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9837 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9838( cx, "TestExampleInterface" , "passNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9838 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9838( cx, "TestExampleInterface" , "passNullableCastableObjectNullableSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9839 | ||||
9840 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9841 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableCastableObjectNullableSequence", 1)) { | |||
9842 | return false; | |||
9843 | } | |||
9844 | Nullable<Sequence<RefPtr<mozilla::dom::TestInterface>>> arg0; | |||
9845 | if (args[0].isObject()) { | |||
9846 | JS::ForOfIterator iter(cx); | |||
9847 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
9848 | return false; | |||
9849 | } | |||
9850 | if (!iter.valueIsIterable()) { | |||
9851 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9852 | return false; | |||
9853 | } | |||
9854 | Sequence<RefPtr<mozilla::dom::TestInterface>> &arr = arg0.SetValue(); | |||
9855 | JS::Rooted<JS::Value> temp(cx); | |||
9856 | while (true) { | |||
9857 | bool done; | |||
9858 | if (!iter.next(&temp, &done)) { | |||
9859 | return false; | |||
9860 | } | |||
9861 | if (done) { | |||
9862 | break; | |||
9863 | } | |||
9864 | RefPtr<mozilla::dom::TestInterface>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
9865 | if (!slotPtr) { | |||
9866 | JS_ReportOutOfMemory(cx); | |||
9867 | return false; | |||
9868 | } | |||
9869 | RefPtr<mozilla::dom::TestInterface>& slot = *slotPtr; | |||
9870 | if (temp.isObject()) { | |||
9871 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
9872 | { | |||
9873 | // Our JSContext should be in the right global to do unwrapping in. | |||
9874 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
9875 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
9876 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "TestInterface"); | |||
9877 | return false; | |||
9878 | } | |||
9879 | } | |||
9880 | } else if (temp.isNullOrUndefined()) { | |||
9881 | slot = nullptr; | |||
9882 | } else { | |||
9883 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
9884 | return false; | |||
9885 | } | |||
9886 | } | |||
9887 | } else if (args[0].isNullOrUndefined()) { | |||
9888 | arg0.SetNull(); | |||
9889 | } else { | |||
9890 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9891 | return false; | |||
9892 | } | |||
9893 | // NOTE: This assert does NOT call the function. | |||
9894 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableCastableObjectNullableSequence(Constify(arg0)))>, "Should be returning void here"); | |||
9895 | MOZ_KnownLive(self)(self)->PassNullableCastableObjectNullableSequence(Constify(arg0)); | |||
9896 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9896); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9896; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9897 | args.rval().setUndefined(); | |||
9898 | return true; | |||
9899 | } | |||
9900 | ||||
9901 | static const JSJitInfo passNullableCastableObjectNullableSequence_methodinfo = { | |||
9902 | { (JSJitGetterOp)passNullableCastableObjectNullableSequence }, | |||
9903 | { prototypes::id::TestExampleInterface }, | |||
9904 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9905 | JSJitInfo::Method, | |||
9906 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9907 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
9908 | false, /* isInfallible. False in setters. */ | |||
9909 | false, /* isMovable. Not relevant for setters. */ | |||
9910 | false, /* isEliminatable. Not relevant for setters. */ | |||
9911 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9912 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9913 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9914 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9915 | }; | |||
9916 | ||||
9917 | MOZ_CAN_RUN_SCRIPT static bool | |||
9918 | passOptionalSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9919 | { | |||
9920 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalSequence"); | |||
9921 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9924( cx, "TestExampleInterface" , "passOptionalSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
9922 | "TestExampleInterface", "passOptionalSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9924( cx, "TestExampleInterface" , "passOptionalSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
9923 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9924( cx, "TestExampleInterface" , "passOptionalSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
9924 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9924( cx, "TestExampleInterface" , "passOptionalSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
9925 | ||||
9926 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9927 | Optional<Sequence<int32_t>> arg0; | |||
9928 | if (args.hasDefined(0)) { | |||
9929 | arg0.Construct(); | |||
9930 | if (args[0].isObject()) { | |||
9931 | JS::ForOfIterator iter(cx); | |||
9932 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
9933 | return false; | |||
9934 | } | |||
9935 | if (!iter.valueIsIterable()) { | |||
9936 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9937 | return false; | |||
9938 | } | |||
9939 | Sequence<int32_t> &arr = arg0.Value(); | |||
9940 | JS::Rooted<JS::Value> temp(cx); | |||
9941 | while (true) { | |||
9942 | bool done; | |||
9943 | if (!iter.next(&temp, &done)) { | |||
9944 | return false; | |||
9945 | } | |||
9946 | if (done) { | |||
9947 | break; | |||
9948 | } | |||
9949 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
9950 | if (!slotPtr) { | |||
9951 | JS_ReportOutOfMemory(cx); | |||
9952 | return false; | |||
9953 | } | |||
9954 | int32_t& slot = *slotPtr; | |||
9955 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
9956 | return false; | |||
9957 | } | |||
9958 | } | |||
9959 | } else { | |||
9960 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
9961 | return false; | |||
9962 | } | |||
9963 | } | |||
9964 | // NOTE: This assert does NOT call the function. | |||
9965 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSequence(Constify(arg0)))>, "Should be returning void here"); | |||
9966 | MOZ_KnownLive(self)(self)->PassOptionalSequence(Constify(arg0)); | |||
9967 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 9967); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 9967; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
9968 | args.rval().setUndefined(); | |||
9969 | return true; | |||
9970 | } | |||
9971 | ||||
9972 | static const JSJitInfo passOptionalSequence_methodinfo = { | |||
9973 | { (JSJitGetterOp)passOptionalSequence }, | |||
9974 | { prototypes::id::TestExampleInterface }, | |||
9975 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
9976 | JSJitInfo::Method, | |||
9977 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
9978 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
9979 | false, /* isInfallible. False in setters. */ | |||
9980 | false, /* isMovable. Not relevant for setters. */ | |||
9981 | false, /* isEliminatable. Not relevant for setters. */ | |||
9982 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
9983 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
9984 | false, /* isTypedMethod. Only relevant for methods. */ | |||
9985 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
9986 | }; | |||
9987 | ||||
9988 | MOZ_CAN_RUN_SCRIPT static bool | |||
9989 | passOptionalSequenceWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
9990 | { | |||
9991 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalSequenceWithDefaultValue"); | |||
9992 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject9995( cx, "TestExampleInterface" , "passOptionalSequenceWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9993 | "TestExampleInterface", "passOptionalSequenceWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject9995( cx, "TestExampleInterface" , "passOptionalSequenceWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9994 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject9995( cx, "TestExampleInterface" , "passOptionalSequenceWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
9995 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject9995( cx, "TestExampleInterface" , "passOptionalSequenceWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
9996 | ||||
9997 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
9998 | binding_detail::AutoSequence<int32_t> arg0; | |||
9999 | if (args.hasDefined(0)) { | |||
10000 | if (args[0].isObject()) { | |||
10001 | JS::ForOfIterator iter(cx); | |||
10002 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10003 | return false; | |||
10004 | } | |||
10005 | if (!iter.valueIsIterable()) { | |||
10006 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10007 | return false; | |||
10008 | } | |||
10009 | binding_detail::AutoSequence<int32_t> &arr = arg0; | |||
10010 | JS::Rooted<JS::Value> temp(cx); | |||
10011 | while (true) { | |||
10012 | bool done; | |||
10013 | if (!iter.next(&temp, &done)) { | |||
10014 | return false; | |||
10015 | } | |||
10016 | if (done) { | |||
10017 | break; | |||
10018 | } | |||
10019 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10020 | if (!slotPtr) { | |||
10021 | JS_ReportOutOfMemory(cx); | |||
10022 | return false; | |||
10023 | } | |||
10024 | int32_t& slot = *slotPtr; | |||
10025 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
10026 | return false; | |||
10027 | } | |||
10028 | } | |||
10029 | } else { | |||
10030 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10031 | return false; | |||
10032 | } | |||
10033 | } else { | |||
10034 | /* arg0 array is already empty; nothing to do */ | |||
10035 | } | |||
10036 | // NOTE: This assert does NOT call the function. | |||
10037 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSequenceWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
10038 | MOZ_KnownLive(self)(self)->PassOptionalSequenceWithDefaultValue(Constify(arg0)); | |||
10039 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10039); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10039; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10040 | args.rval().setUndefined(); | |||
10041 | return true; | |||
10042 | } | |||
10043 | ||||
10044 | static const JSJitInfo passOptionalSequenceWithDefaultValue_methodinfo = { | |||
10045 | { (JSJitGetterOp)passOptionalSequenceWithDefaultValue }, | |||
10046 | { prototypes::id::TestExampleInterface }, | |||
10047 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10048 | JSJitInfo::Method, | |||
10049 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10050 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10051 | false, /* isInfallible. False in setters. */ | |||
10052 | false, /* isMovable. Not relevant for setters. */ | |||
10053 | false, /* isEliminatable. Not relevant for setters. */ | |||
10054 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10055 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10056 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10057 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10058 | }; | |||
10059 | ||||
10060 | MOZ_CAN_RUN_SCRIPT static bool | |||
10061 | passOptionalNullableSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10062 | { | |||
10063 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequence"); | |||
10064 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10067( cx, "TestExampleInterface" , "passOptionalNullableSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10065 | "TestExampleInterface", "passOptionalNullableSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10067( cx, "TestExampleInterface" , "passOptionalNullableSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10066 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10067( cx, "TestExampleInterface" , "passOptionalNullableSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10067 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10067( cx, "TestExampleInterface" , "passOptionalNullableSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10068 | ||||
10069 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10070 | Optional<Nullable<Sequence<int32_t>>> arg0; | |||
10071 | if (args.hasDefined(0)) { | |||
10072 | arg0.Construct(); | |||
10073 | if (args[0].isObject()) { | |||
10074 | JS::ForOfIterator iter(cx); | |||
10075 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10076 | return false; | |||
10077 | } | |||
10078 | if (!iter.valueIsIterable()) { | |||
10079 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10080 | return false; | |||
10081 | } | |||
10082 | Sequence<int32_t> &arr = arg0.Value().SetValue(); | |||
10083 | JS::Rooted<JS::Value> temp(cx); | |||
10084 | while (true) { | |||
10085 | bool done; | |||
10086 | if (!iter.next(&temp, &done)) { | |||
10087 | return false; | |||
10088 | } | |||
10089 | if (done) { | |||
10090 | break; | |||
10091 | } | |||
10092 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10093 | if (!slotPtr) { | |||
10094 | JS_ReportOutOfMemory(cx); | |||
10095 | return false; | |||
10096 | } | |||
10097 | int32_t& slot = *slotPtr; | |||
10098 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
10099 | return false; | |||
10100 | } | |||
10101 | } | |||
10102 | } else if (args[0].isNullOrUndefined()) { | |||
10103 | arg0.Value().SetNull(); | |||
10104 | } else { | |||
10105 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10106 | return false; | |||
10107 | } | |||
10108 | } | |||
10109 | // NOTE: This assert does NOT call the function. | |||
10110 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequence(Constify(arg0)))>, "Should be returning void here"); | |||
10111 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequence(Constify(arg0)); | |||
10112 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10112); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10112; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10113 | args.rval().setUndefined(); | |||
10114 | return true; | |||
10115 | } | |||
10116 | ||||
10117 | static const JSJitInfo passOptionalNullableSequence_methodinfo = { | |||
10118 | { (JSJitGetterOp)passOptionalNullableSequence }, | |||
10119 | { prototypes::id::TestExampleInterface }, | |||
10120 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10121 | JSJitInfo::Method, | |||
10122 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10123 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10124 | false, /* isInfallible. False in setters. */ | |||
10125 | false, /* isMovable. Not relevant for setters. */ | |||
10126 | false, /* isEliminatable. Not relevant for setters. */ | |||
10127 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10128 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10129 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10130 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10131 | }; | |||
10132 | ||||
10133 | MOZ_CAN_RUN_SCRIPT static bool | |||
10134 | passOptionalNullableSequenceWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10135 | { | |||
10136 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequenceWithDefaultValue"); | |||
10137 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10140( cx, "TestExampleInterface" , "passOptionalNullableSequenceWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10138 | "TestExampleInterface", "passOptionalNullableSequenceWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10140( cx, "TestExampleInterface" , "passOptionalNullableSequenceWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10139 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10140( cx, "TestExampleInterface" , "passOptionalNullableSequenceWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10140 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10140( cx, "TestExampleInterface" , "passOptionalNullableSequenceWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10141 | ||||
10142 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10143 | Nullable<Sequence<int32_t>> arg0; | |||
10144 | if (args.hasDefined(0)) { | |||
10145 | if (args[0].isObject()) { | |||
10146 | JS::ForOfIterator iter(cx); | |||
10147 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10148 | return false; | |||
10149 | } | |||
10150 | if (!iter.valueIsIterable()) { | |||
10151 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10152 | return false; | |||
10153 | } | |||
10154 | Sequence<int32_t> &arr = arg0.SetValue(); | |||
10155 | JS::Rooted<JS::Value> temp(cx); | |||
10156 | while (true) { | |||
10157 | bool done; | |||
10158 | if (!iter.next(&temp, &done)) { | |||
10159 | return false; | |||
10160 | } | |||
10161 | if (done) { | |||
10162 | break; | |||
10163 | } | |||
10164 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10165 | if (!slotPtr) { | |||
10166 | JS_ReportOutOfMemory(cx); | |||
10167 | return false; | |||
10168 | } | |||
10169 | int32_t& slot = *slotPtr; | |||
10170 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
10171 | return false; | |||
10172 | } | |||
10173 | } | |||
10174 | } else if (args[0].isNullOrUndefined()) { | |||
10175 | arg0.SetNull(); | |||
10176 | } else { | |||
10177 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10178 | return false; | |||
10179 | } | |||
10180 | } else { | |||
10181 | arg0.SetNull(); | |||
10182 | } | |||
10183 | // NOTE: This assert does NOT call the function. | |||
10184 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
10185 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceWithDefaultValue(Constify(arg0)); | |||
10186 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10186); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10186; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10187 | args.rval().setUndefined(); | |||
10188 | return true; | |||
10189 | } | |||
10190 | ||||
10191 | static const JSJitInfo passOptionalNullableSequenceWithDefaultValue_methodinfo = { | |||
10192 | { (JSJitGetterOp)passOptionalNullableSequenceWithDefaultValue }, | |||
10193 | { prototypes::id::TestExampleInterface }, | |||
10194 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10195 | JSJitInfo::Method, | |||
10196 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10197 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10198 | false, /* isInfallible. False in setters. */ | |||
10199 | false, /* isMovable. Not relevant for setters. */ | |||
10200 | false, /* isEliminatable. Not relevant for setters. */ | |||
10201 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10202 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10203 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10204 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10205 | }; | |||
10206 | ||||
10207 | MOZ_CAN_RUN_SCRIPT static bool | |||
10208 | passOptionalNullableSequenceWithDefaultValue2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10209 | { | |||
10210 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequenceWithDefaultValue2"); | |||
10211 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10214( cx, "TestExampleInterface" , "passOptionalNullableSequenceWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10212 | "TestExampleInterface", "passOptionalNullableSequenceWithDefaultValue2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10214( cx, "TestExampleInterface" , "passOptionalNullableSequenceWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10213 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10214( cx, "TestExampleInterface" , "passOptionalNullableSequenceWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10214 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10214( cx, "TestExampleInterface" , "passOptionalNullableSequenceWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10215 | ||||
10216 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10217 | Nullable<Sequence<int32_t>> arg0; | |||
10218 | if (args.hasDefined(0)) { | |||
10219 | if (args[0].isObject()) { | |||
10220 | JS::ForOfIterator iter(cx); | |||
10221 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10222 | return false; | |||
10223 | } | |||
10224 | if (!iter.valueIsIterable()) { | |||
10225 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10226 | return false; | |||
10227 | } | |||
10228 | Sequence<int32_t> &arr = arg0.SetValue(); | |||
10229 | JS::Rooted<JS::Value> temp(cx); | |||
10230 | while (true) { | |||
10231 | bool done; | |||
10232 | if (!iter.next(&temp, &done)) { | |||
10233 | return false; | |||
10234 | } | |||
10235 | if (done) { | |||
10236 | break; | |||
10237 | } | |||
10238 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10239 | if (!slotPtr) { | |||
10240 | JS_ReportOutOfMemory(cx); | |||
10241 | return false; | |||
10242 | } | |||
10243 | int32_t& slot = *slotPtr; | |||
10244 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
10245 | return false; | |||
10246 | } | |||
10247 | } | |||
10248 | } else if (args[0].isNullOrUndefined()) { | |||
10249 | arg0.SetNull(); | |||
10250 | } else { | |||
10251 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10252 | return false; | |||
10253 | } | |||
10254 | } else { | |||
10255 | arg0.SetValue(); | |||
10256 | } | |||
10257 | // NOTE: This assert does NOT call the function. | |||
10258 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceWithDefaultValue2(Constify(arg0)))>, "Should be returning void here"); | |||
10259 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceWithDefaultValue2(Constify(arg0)); | |||
10260 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10260); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10260; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10261 | args.rval().setUndefined(); | |||
10262 | return true; | |||
10263 | } | |||
10264 | ||||
10265 | static const JSJitInfo passOptionalNullableSequenceWithDefaultValue2_methodinfo = { | |||
10266 | { (JSJitGetterOp)passOptionalNullableSequenceWithDefaultValue2 }, | |||
10267 | { prototypes::id::TestExampleInterface }, | |||
10268 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10269 | JSJitInfo::Method, | |||
10270 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10271 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10272 | false, /* isInfallible. False in setters. */ | |||
10273 | false, /* isMovable. Not relevant for setters. */ | |||
10274 | false, /* isEliminatable. Not relevant for setters. */ | |||
10275 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10276 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10277 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10278 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10279 | }; | |||
10280 | ||||
10281 | MOZ_CAN_RUN_SCRIPT static bool | |||
10282 | passOptionalObjectSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10283 | { | |||
10284 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalObjectSequence"); | |||
10285 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10288( cx, "TestExampleInterface" , "passOptionalObjectSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10286 | "TestExampleInterface", "passOptionalObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10288( cx, "TestExampleInterface" , "passOptionalObjectSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10287 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10288( cx, "TestExampleInterface" , "passOptionalObjectSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10288 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10288( cx, "TestExampleInterface" , "passOptionalObjectSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10289 | ||||
10290 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10291 | Optional<Sequence<OwningNonNull<mozilla::dom::TestInterface>>> arg0; | |||
10292 | if (args.hasDefined(0)) { | |||
10293 | arg0.Construct(); | |||
10294 | if (args[0].isObject()) { | |||
10295 | JS::ForOfIterator iter(cx); | |||
10296 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10297 | return false; | |||
10298 | } | |||
10299 | if (!iter.valueIsIterable()) { | |||
10300 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10301 | return false; | |||
10302 | } | |||
10303 | Sequence<OwningNonNull<mozilla::dom::TestInterface>> &arr = arg0.Value(); | |||
10304 | JS::Rooted<JS::Value> temp(cx); | |||
10305 | while (true) { | |||
10306 | bool done; | |||
10307 | if (!iter.next(&temp, &done)) { | |||
10308 | return false; | |||
10309 | } | |||
10310 | if (done) { | |||
10311 | break; | |||
10312 | } | |||
10313 | OwningNonNull<mozilla::dom::TestInterface>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10314 | if (!slotPtr) { | |||
10315 | JS_ReportOutOfMemory(cx); | |||
10316 | return false; | |||
10317 | } | |||
10318 | OwningNonNull<mozilla::dom::TestInterface>& slot = *slotPtr; | |||
10319 | if (temp.isObject()) { | |||
10320 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
10321 | { | |||
10322 | // Our JSContext should be in the right global to do unwrapping in. | |||
10323 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
10324 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
10325 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "TestInterface"); | |||
10326 | return false; | |||
10327 | } | |||
10328 | } | |||
10329 | } else { | |||
10330 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
10331 | return false; | |||
10332 | } | |||
10333 | } | |||
10334 | } else { | |||
10335 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10336 | return false; | |||
10337 | } | |||
10338 | } | |||
10339 | // NOTE: This assert does NOT call the function. | |||
10340 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalObjectSequence(Constify(arg0)))>, "Should be returning void here"); | |||
10341 | MOZ_KnownLive(self)(self)->PassOptionalObjectSequence(Constify(arg0)); | |||
10342 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10342); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10342; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10343 | args.rval().setUndefined(); | |||
10344 | return true; | |||
10345 | } | |||
10346 | ||||
10347 | static const JSJitInfo passOptionalObjectSequence_methodinfo = { | |||
10348 | { (JSJitGetterOp)passOptionalObjectSequence }, | |||
10349 | { prototypes::id::TestExampleInterface }, | |||
10350 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10351 | JSJitInfo::Method, | |||
10352 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10353 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10354 | false, /* isInfallible. False in setters. */ | |||
10355 | false, /* isMovable. Not relevant for setters. */ | |||
10356 | false, /* isEliminatable. Not relevant for setters. */ | |||
10357 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10358 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10359 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10360 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10361 | }; | |||
10362 | ||||
10363 | MOZ_CAN_RUN_SCRIPT static bool | |||
10364 | passExternalInterfaceSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10365 | { | |||
10366 | BindingCallContext cx(cx_, "TestExampleInterface.passExternalInterfaceSequence"); | |||
10367 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10370( cx, "TestExampleInterface" , "passExternalInterfaceSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10368 | "TestExampleInterface", "passExternalInterfaceSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10370( cx, "TestExampleInterface" , "passExternalInterfaceSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10369 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10370( cx, "TestExampleInterface" , "passExternalInterfaceSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10370 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10370( cx, "TestExampleInterface" , "passExternalInterfaceSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10371 | ||||
10372 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10373 | if (!args.requireAtLeast(cx, "TestExampleInterface.passExternalInterfaceSequence", 1)) { | |||
10374 | return false; | |||
10375 | } | |||
10376 | binding_detail::AutoSequence<RefPtr<mozilla::dom::TestExternalInterface>> arg0; | |||
10377 | if (args[0].isObject()) { | |||
10378 | JS::ForOfIterator iter(cx); | |||
10379 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10380 | return false; | |||
10381 | } | |||
10382 | if (!iter.valueIsIterable()) { | |||
10383 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10384 | return false; | |||
10385 | } | |||
10386 | binding_detail::AutoSequence<RefPtr<mozilla::dom::TestExternalInterface>> &arr = arg0; | |||
10387 | JS::Rooted<JS::Value> temp(cx); | |||
10388 | while (true) { | |||
10389 | bool done; | |||
10390 | if (!iter.next(&temp, &done)) { | |||
10391 | return false; | |||
10392 | } | |||
10393 | if (done) { | |||
10394 | break; | |||
10395 | } | |||
10396 | RefPtr<mozilla::dom::TestExternalInterface>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10397 | if (!slotPtr) { | |||
10398 | JS_ReportOutOfMemory(cx); | |||
10399 | return false; | |||
10400 | } | |||
10401 | RefPtr<mozilla::dom::TestExternalInterface>& slot = *slotPtr; | |||
10402 | if (temp.isObject()) { | |||
10403 | static_assert(IsRefcounted<mozilla::dom::TestExternalInterface>::value, "We can only store refcounted classes."); | |||
10404 | RefPtr<mozilla::dom::TestExternalInterface> tempHolder; | |||
10405 | JS::Rooted<JSObject*> source(cx, &temp.toObject()); | |||
10406 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(tempHolder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(tempHolder )))), 0)))) { | |||
10407 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "TestExternalInterface"); | |||
10408 | return false; | |||
10409 | } | |||
10410 | MOZ_ASSERT(tempHolder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(tempHolder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(tempHolder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("tempHolder", "../TestExampleGenBinding.cpp" , 10410); AnnotateMozCrashReason("MOZ_ASSERT" "(" "tempHolder" ")"); do { *((volatile int*)__null) = 10410; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
10411 | slot = tempHolder; | |||
10412 | } else { | |||
10413 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
10414 | return false; | |||
10415 | } | |||
10416 | } | |||
10417 | } else { | |||
10418 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10419 | return false; | |||
10420 | } | |||
10421 | // NOTE: This assert does NOT call the function. | |||
10422 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassExternalInterfaceSequence(Constify(arg0)))>, "Should be returning void here"); | |||
10423 | MOZ_KnownLive(self)(self)->PassExternalInterfaceSequence(Constify(arg0)); | |||
10424 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10424); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10424; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10425 | args.rval().setUndefined(); | |||
10426 | return true; | |||
10427 | } | |||
10428 | ||||
10429 | static const JSJitInfo passExternalInterfaceSequence_methodinfo = { | |||
10430 | { (JSJitGetterOp)passExternalInterfaceSequence }, | |||
10431 | { prototypes::id::TestExampleInterface }, | |||
10432 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10433 | JSJitInfo::Method, | |||
10434 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10435 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10436 | false, /* isInfallible. False in setters. */ | |||
10437 | false, /* isMovable. Not relevant for setters. */ | |||
10438 | false, /* isEliminatable. Not relevant for setters. */ | |||
10439 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10440 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10441 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10442 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10443 | }; | |||
10444 | ||||
10445 | MOZ_CAN_RUN_SCRIPT static bool | |||
10446 | passNullableExternalInterfaceSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10447 | { | |||
10448 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableExternalInterfaceSequence"); | |||
10449 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10452( cx, "TestExampleInterface" , "passNullableExternalInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10450 | "TestExampleInterface", "passNullableExternalInterfaceSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10452( cx, "TestExampleInterface" , "passNullableExternalInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10451 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10452( cx, "TestExampleInterface" , "passNullableExternalInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10452 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10452( cx, "TestExampleInterface" , "passNullableExternalInterfaceSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10453 | ||||
10454 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10455 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableExternalInterfaceSequence", 1)) { | |||
10456 | return false; | |||
10457 | } | |||
10458 | binding_detail::AutoSequence<RefPtr<mozilla::dom::TestExternalInterface>> arg0; | |||
10459 | if (args[0].isObject()) { | |||
10460 | JS::ForOfIterator iter(cx); | |||
10461 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10462 | return false; | |||
10463 | } | |||
10464 | if (!iter.valueIsIterable()) { | |||
10465 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10466 | return false; | |||
10467 | } | |||
10468 | binding_detail::AutoSequence<RefPtr<mozilla::dom::TestExternalInterface>> &arr = arg0; | |||
10469 | JS::Rooted<JS::Value> temp(cx); | |||
10470 | while (true) { | |||
10471 | bool done; | |||
10472 | if (!iter.next(&temp, &done)) { | |||
10473 | return false; | |||
10474 | } | |||
10475 | if (done) { | |||
10476 | break; | |||
10477 | } | |||
10478 | RefPtr<mozilla::dom::TestExternalInterface>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10479 | if (!slotPtr) { | |||
10480 | JS_ReportOutOfMemory(cx); | |||
10481 | return false; | |||
10482 | } | |||
10483 | RefPtr<mozilla::dom::TestExternalInterface>& slot = *slotPtr; | |||
10484 | if (temp.isObject()) { | |||
10485 | static_assert(IsRefcounted<mozilla::dom::TestExternalInterface>::value, "We can only store refcounted classes."); | |||
10486 | RefPtr<mozilla::dom::TestExternalInterface> tempHolder; | |||
10487 | JS::Rooted<JSObject*> source(cx, &temp.toObject()); | |||
10488 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(tempHolder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(tempHolder )))), 0)))) { | |||
10489 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "TestExternalInterface"); | |||
10490 | return false; | |||
10491 | } | |||
10492 | MOZ_ASSERT(tempHolder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(tempHolder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(tempHolder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("tempHolder", "../TestExampleGenBinding.cpp" , 10492); AnnotateMozCrashReason("MOZ_ASSERT" "(" "tempHolder" ")"); do { *((volatile int*)__null) = 10492; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
10493 | slot = tempHolder; | |||
10494 | } else if (temp.isNullOrUndefined()) { | |||
10495 | slot = nullptr; | |||
10496 | } else { | |||
10497 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
10498 | return false; | |||
10499 | } | |||
10500 | } | |||
10501 | } else { | |||
10502 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10503 | return false; | |||
10504 | } | |||
10505 | // NOTE: This assert does NOT call the function. | |||
10506 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableExternalInterfaceSequence(Constify(arg0)))>, "Should be returning void here"); | |||
10507 | MOZ_KnownLive(self)(self)->PassNullableExternalInterfaceSequence(Constify(arg0)); | |||
10508 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10508); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10508; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10509 | args.rval().setUndefined(); | |||
10510 | return true; | |||
10511 | } | |||
10512 | ||||
10513 | static const JSJitInfo passNullableExternalInterfaceSequence_methodinfo = { | |||
10514 | { (JSJitGetterOp)passNullableExternalInterfaceSequence }, | |||
10515 | { prototypes::id::TestExampleInterface }, | |||
10516 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10517 | JSJitInfo::Method, | |||
10518 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10519 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10520 | false, /* isInfallible. False in setters. */ | |||
10521 | false, /* isMovable. Not relevant for setters. */ | |||
10522 | false, /* isEliminatable. Not relevant for setters. */ | |||
10523 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10524 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10525 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10526 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10527 | }; | |||
10528 | ||||
10529 | MOZ_CAN_RUN_SCRIPT static bool | |||
10530 | receiveStringSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10531 | { | |||
10532 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10535( cx, "TestExampleInterface" , "receiveStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10533 | "TestExampleInterface", "receiveStringSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10535( cx, "TestExampleInterface" , "receiveStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10534 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10535( cx, "TestExampleInterface" , "receiveStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10535 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10535( cx, "TestExampleInterface" , "receiveStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
10536 | ||||
10537 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10538 | nsTArray<nsString> result; | |||
10539 | // NOTE: This assert does NOT call the function. | |||
10540 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveStringSequence(result))>, "Should be returning void here"); | |||
10541 | MOZ_KnownLive(self)(self)->ReceiveStringSequence(result); | |||
10542 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10542); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10542; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10543 | ||||
10544 | uint32_t length = result.Length(); | |||
10545 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
10546 | if (!returnArray) { | |||
10547 | return false; | |||
10548 | } | |||
10549 | // Scope for 'tmp' | |||
10550 | { | |||
10551 | JS::Rooted<JS::Value> tmp(cx); | |||
10552 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
10553 | // Control block to let us common up the JS_DefineElement calls when there | |||
10554 | // are different ways to succeed at wrapping the object. | |||
10555 | do { | |||
10556 | if (!xpc::NonVoidStringToJsval(cx, result[sequenceIdx0], &tmp)) { | |||
10557 | return false; | |||
10558 | } | |||
10559 | break; | |||
10560 | } while (false); | |||
10561 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
10562 | JSPROP_ENUMERATE)) { | |||
10563 | return false; | |||
10564 | } | |||
10565 | } | |||
10566 | } | |||
10567 | args.rval().setObject(*returnArray); | |||
10568 | return true; | |||
10569 | } | |||
10570 | ||||
10571 | static const JSJitInfo receiveStringSequence_methodinfo = { | |||
10572 | { (JSJitGetterOp)receiveStringSequence }, | |||
10573 | { prototypes::id::TestExampleInterface }, | |||
10574 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10575 | JSJitInfo::Method, | |||
10576 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10577 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
10578 | false, /* isInfallible. False in setters. */ | |||
10579 | false, /* isMovable. Not relevant for setters. */ | |||
10580 | false, /* isEliminatable. Not relevant for setters. */ | |||
10581 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10582 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10583 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10584 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10585 | }; | |||
10586 | ||||
10587 | MOZ_CAN_RUN_SCRIPT static bool | |||
10588 | passStringSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10589 | { | |||
10590 | BindingCallContext cx(cx_, "TestExampleInterface.passStringSequence"); | |||
10591 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10594( cx, "TestExampleInterface" , "passStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10592 | "TestExampleInterface", "passStringSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10594( cx, "TestExampleInterface" , "passStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10593 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10594( cx, "TestExampleInterface" , "passStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10594 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10594( cx, "TestExampleInterface" , "passStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
10595 | ||||
10596 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10597 | if (!args.requireAtLeast(cx, "TestExampleInterface.passStringSequence", 1)) { | |||
10598 | return false; | |||
10599 | } | |||
10600 | binding_detail::AutoSequence<nsString> arg0; | |||
10601 | if (args[0].isObject()) { | |||
10602 | JS::ForOfIterator iter(cx); | |||
10603 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10604 | return false; | |||
10605 | } | |||
10606 | if (!iter.valueIsIterable()) { | |||
10607 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10608 | return false; | |||
10609 | } | |||
10610 | binding_detail::AutoSequence<nsString> &arr = arg0; | |||
10611 | JS::Rooted<JS::Value> temp(cx); | |||
10612 | while (true) { | |||
10613 | bool done; | |||
10614 | if (!iter.next(&temp, &done)) { | |||
10615 | return false; | |||
10616 | } | |||
10617 | if (done) { | |||
10618 | break; | |||
10619 | } | |||
10620 | nsString* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10621 | if (!slotPtr) { | |||
10622 | JS_ReportOutOfMemory(cx); | |||
10623 | return false; | |||
10624 | } | |||
10625 | nsString& slot = *slotPtr; | |||
10626 | if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) { | |||
10627 | return false; | |||
10628 | } | |||
10629 | } | |||
10630 | } else { | |||
10631 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10632 | return false; | |||
10633 | } | |||
10634 | // NOTE: This assert does NOT call the function. | |||
10635 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassStringSequence(Constify(arg0)))>, "Should be returning void here"); | |||
10636 | MOZ_KnownLive(self)(self)->PassStringSequence(Constify(arg0)); | |||
10637 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10637); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10637; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10638 | args.rval().setUndefined(); | |||
10639 | return true; | |||
10640 | } | |||
10641 | ||||
10642 | static const JSJitInfo passStringSequence_methodinfo = { | |||
10643 | { (JSJitGetterOp)passStringSequence }, | |||
10644 | { prototypes::id::TestExampleInterface }, | |||
10645 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10646 | JSJitInfo::Method, | |||
10647 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10648 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10649 | false, /* isInfallible. False in setters. */ | |||
10650 | false, /* isMovable. Not relevant for setters. */ | |||
10651 | false, /* isEliminatable. Not relevant for setters. */ | |||
10652 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10653 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10654 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10655 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10656 | }; | |||
10657 | ||||
10658 | MOZ_CAN_RUN_SCRIPT static bool | |||
10659 | receiveByteStringSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10660 | { | |||
10661 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10664( cx, "TestExampleInterface" , "receiveByteStringSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10662 | "TestExampleInterface", "receiveByteStringSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10664( cx, "TestExampleInterface" , "receiveByteStringSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10663 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10664( cx, "TestExampleInterface" , "receiveByteStringSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10664 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10664( cx, "TestExampleInterface" , "receiveByteStringSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10665 | ||||
10666 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10667 | nsTArray<nsCString> result; | |||
10668 | // NOTE: This assert does NOT call the function. | |||
10669 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveByteStringSequence(result))>, "Should be returning void here"); | |||
10670 | MOZ_KnownLive(self)(self)->ReceiveByteStringSequence(result); | |||
10671 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10671); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10671; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10672 | ||||
10673 | uint32_t length = result.Length(); | |||
10674 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
10675 | if (!returnArray) { | |||
10676 | return false; | |||
10677 | } | |||
10678 | // Scope for 'tmp' | |||
10679 | { | |||
10680 | JS::Rooted<JS::Value> tmp(cx); | |||
10681 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
10682 | // Control block to let us common up the JS_DefineElement calls when there | |||
10683 | // are different ways to succeed at wrapping the object. | |||
10684 | do { | |||
10685 | if (!NonVoidByteStringToJsval(cx, result[sequenceIdx0], &tmp)) { | |||
10686 | return false; | |||
10687 | } | |||
10688 | break; | |||
10689 | } while (false); | |||
10690 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
10691 | JSPROP_ENUMERATE)) { | |||
10692 | return false; | |||
10693 | } | |||
10694 | } | |||
10695 | } | |||
10696 | args.rval().setObject(*returnArray); | |||
10697 | return true; | |||
10698 | } | |||
10699 | ||||
10700 | static const JSJitInfo receiveByteStringSequence_methodinfo = { | |||
10701 | { (JSJitGetterOp)receiveByteStringSequence }, | |||
10702 | { prototypes::id::TestExampleInterface }, | |||
10703 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10704 | JSJitInfo::Method, | |||
10705 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10706 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
10707 | false, /* isInfallible. False in setters. */ | |||
10708 | false, /* isMovable. Not relevant for setters. */ | |||
10709 | false, /* isEliminatable. Not relevant for setters. */ | |||
10710 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10711 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10712 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10713 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10714 | }; | |||
10715 | ||||
10716 | MOZ_CAN_RUN_SCRIPT static bool | |||
10717 | passByteStringSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10718 | { | |||
10719 | BindingCallContext cx(cx_, "TestExampleInterface.passByteStringSequence"); | |||
10720 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10723( cx, "TestExampleInterface" , "passByteStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10721 | "TestExampleInterface", "passByteStringSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10723( cx, "TestExampleInterface" , "passByteStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10722 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10723( cx, "TestExampleInterface" , "passByteStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10723 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10723( cx, "TestExampleInterface" , "passByteStringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
10724 | ||||
10725 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10726 | if (!args.requireAtLeast(cx, "TestExampleInterface.passByteStringSequence", 1)) { | |||
10727 | return false; | |||
10728 | } | |||
10729 | binding_detail::AutoSequence<nsCString> arg0; | |||
10730 | if (args[0].isObject()) { | |||
10731 | JS::ForOfIterator iter(cx); | |||
10732 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10733 | return false; | |||
10734 | } | |||
10735 | if (!iter.valueIsIterable()) { | |||
10736 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10737 | return false; | |||
10738 | } | |||
10739 | binding_detail::AutoSequence<nsCString> &arr = arg0; | |||
10740 | JS::Rooted<JS::Value> temp(cx); | |||
10741 | while (true) { | |||
10742 | bool done; | |||
10743 | if (!iter.next(&temp, &done)) { | |||
10744 | return false; | |||
10745 | } | |||
10746 | if (done) { | |||
10747 | break; | |||
10748 | } | |||
10749 | nsCString* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10750 | if (!slotPtr) { | |||
10751 | JS_ReportOutOfMemory(cx); | |||
10752 | return false; | |||
10753 | } | |||
10754 | nsCString& slot = *slotPtr; | |||
10755 | if (!ConvertJSValueToByteString(cx, temp, false, "element of argument 1", slot)) { | |||
10756 | return false; | |||
10757 | } | |||
10758 | } | |||
10759 | } else { | |||
10760 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10761 | return false; | |||
10762 | } | |||
10763 | // NOTE: This assert does NOT call the function. | |||
10764 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassByteStringSequence(Constify(arg0)))>, "Should be returning void here"); | |||
10765 | MOZ_KnownLive(self)(self)->PassByteStringSequence(Constify(arg0)); | |||
10766 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10766); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10766; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10767 | args.rval().setUndefined(); | |||
10768 | return true; | |||
10769 | } | |||
10770 | ||||
10771 | static const JSJitInfo passByteStringSequence_methodinfo = { | |||
10772 | { (JSJitGetterOp)passByteStringSequence }, | |||
10773 | { prototypes::id::TestExampleInterface }, | |||
10774 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10775 | JSJitInfo::Method, | |||
10776 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10777 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10778 | false, /* isInfallible. False in setters. */ | |||
10779 | false, /* isMovable. Not relevant for setters. */ | |||
10780 | false, /* isEliminatable. Not relevant for setters. */ | |||
10781 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10782 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10783 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10784 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10785 | }; | |||
10786 | ||||
10787 | MOZ_CAN_RUN_SCRIPT static bool | |||
10788 | receiveUTF8StringSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10789 | { | |||
10790 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10793( cx, "TestExampleInterface" , "receiveUTF8StringSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10791 | "TestExampleInterface", "receiveUTF8StringSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10793( cx, "TestExampleInterface" , "receiveUTF8StringSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10792 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10793( cx, "TestExampleInterface" , "receiveUTF8StringSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10793 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10793( cx, "TestExampleInterface" , "receiveUTF8StringSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10794 | ||||
10795 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10796 | nsTArray<nsCString> result; | |||
10797 | // NOTE: This assert does NOT call the function. | |||
10798 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveUTF8StringSequence(result))>, "Should be returning void here"); | |||
10799 | MOZ_KnownLive(self)(self)->ReceiveUTF8StringSequence(result); | |||
10800 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10800); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10800; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10801 | ||||
10802 | uint32_t length = result.Length(); | |||
10803 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
10804 | if (!returnArray) { | |||
10805 | return false; | |||
10806 | } | |||
10807 | // Scope for 'tmp' | |||
10808 | { | |||
10809 | JS::Rooted<JS::Value> tmp(cx); | |||
10810 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
10811 | // Control block to let us common up the JS_DefineElement calls when there | |||
10812 | // are different ways to succeed at wrapping the object. | |||
10813 | do { | |||
10814 | if (!NonVoidUTF8StringToJsval(cx, result[sequenceIdx0], &tmp)) { | |||
10815 | return false; | |||
10816 | } | |||
10817 | break; | |||
10818 | } while (false); | |||
10819 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
10820 | JSPROP_ENUMERATE)) { | |||
10821 | return false; | |||
10822 | } | |||
10823 | } | |||
10824 | } | |||
10825 | args.rval().setObject(*returnArray); | |||
10826 | return true; | |||
10827 | } | |||
10828 | ||||
10829 | static const JSJitInfo receiveUTF8StringSequence_methodinfo = { | |||
10830 | { (JSJitGetterOp)receiveUTF8StringSequence }, | |||
10831 | { prototypes::id::TestExampleInterface }, | |||
10832 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10833 | JSJitInfo::Method, | |||
10834 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10835 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
10836 | false, /* isInfallible. False in setters. */ | |||
10837 | false, /* isMovable. Not relevant for setters. */ | |||
10838 | false, /* isEliminatable. Not relevant for setters. */ | |||
10839 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10840 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10841 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10842 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10843 | }; | |||
10844 | ||||
10845 | MOZ_CAN_RUN_SCRIPT static bool | |||
10846 | passUTF8StringSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10847 | { | |||
10848 | BindingCallContext cx(cx_, "TestExampleInterface.passUTF8StringSequence"); | |||
10849 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10852( cx, "TestExampleInterface" , "passUTF8StringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10850 | "TestExampleInterface", "passUTF8StringSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10852( cx, "TestExampleInterface" , "passUTF8StringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10851 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10852( cx, "TestExampleInterface" , "passUTF8StringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10852 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10852( cx, "TestExampleInterface" , "passUTF8StringSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
10853 | ||||
10854 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10855 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUTF8StringSequence", 1)) { | |||
10856 | return false; | |||
10857 | } | |||
10858 | binding_detail::AutoSequence<nsCString> arg0; | |||
10859 | if (args[0].isObject()) { | |||
10860 | JS::ForOfIterator iter(cx); | |||
10861 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
10862 | return false; | |||
10863 | } | |||
10864 | if (!iter.valueIsIterable()) { | |||
10865 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10866 | return false; | |||
10867 | } | |||
10868 | binding_detail::AutoSequence<nsCString> &arr = arg0; | |||
10869 | JS::Rooted<JS::Value> temp(cx); | |||
10870 | while (true) { | |||
10871 | bool done; | |||
10872 | if (!iter.next(&temp, &done)) { | |||
10873 | return false; | |||
10874 | } | |||
10875 | if (done) { | |||
10876 | break; | |||
10877 | } | |||
10878 | nsCString* slotPtr = arr.AppendElement(mozilla::fallible); | |||
10879 | if (!slotPtr) { | |||
10880 | JS_ReportOutOfMemory(cx); | |||
10881 | return false; | |||
10882 | } | |||
10883 | nsCString& slot = *slotPtr; | |||
10884 | if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) { | |||
10885 | return false; | |||
10886 | } | |||
10887 | } | |||
10888 | } else { | |||
10889 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
10890 | return false; | |||
10891 | } | |||
10892 | // NOTE: This assert does NOT call the function. | |||
10893 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUTF8StringSequence(Constify(arg0)))>, "Should be returning void here"); | |||
10894 | MOZ_KnownLive(self)(self)->PassUTF8StringSequence(Constify(arg0)); | |||
10895 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10895); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10895; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10896 | args.rval().setUndefined(); | |||
10897 | return true; | |||
10898 | } | |||
10899 | ||||
10900 | static const JSJitInfo passUTF8StringSequence_methodinfo = { | |||
10901 | { (JSJitGetterOp)passUTF8StringSequence }, | |||
10902 | { prototypes::id::TestExampleInterface }, | |||
10903 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10904 | JSJitInfo::Method, | |||
10905 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10906 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
10907 | false, /* isInfallible. False in setters. */ | |||
10908 | false, /* isMovable. Not relevant for setters. */ | |||
10909 | false, /* isEliminatable. Not relevant for setters. */ | |||
10910 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10911 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10912 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10913 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10914 | }; | |||
10915 | ||||
10916 | MOZ_CAN_RUN_SCRIPT static bool | |||
10917 | receiveAnySequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10918 | { | |||
10919 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10922( cx, "TestExampleInterface" , "receiveAnySequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10920 | "TestExampleInterface", "receiveAnySequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10922( cx, "TestExampleInterface" , "receiveAnySequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10921 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10922( cx, "TestExampleInterface" , "receiveAnySequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
10922 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10922( cx, "TestExampleInterface" , "receiveAnySequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
10923 | ||||
10924 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10925 | nsTArray<JS::Value> result; | |||
10926 | SequenceRooter<JS::Value > resultRooter(cx, &result); | |||
10927 | // NOTE: This assert does NOT call the function. | |||
10928 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveAnySequence(cx, result))>, "Should be returning void here"); | |||
10929 | MOZ_KnownLive(self)(self)->ReceiveAnySequence(cx, result); | |||
10930 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10930); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10930; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10931 | ||||
10932 | uint32_t length = result.Length(); | |||
10933 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
10934 | if (!returnArray) { | |||
10935 | return false; | |||
10936 | } | |||
10937 | // Scope for 'tmp' | |||
10938 | { | |||
10939 | JS::Rooted<JS::Value> tmp(cx); | |||
10940 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
10941 | // Control block to let us common up the JS_DefineElement calls when there | |||
10942 | // are different ways to succeed at wrapping the object. | |||
10943 | do { | |||
10944 | JS::ExposeValueToActiveJS(result[sequenceIdx0]); | |||
10945 | tmp.set(result[sequenceIdx0]); | |||
10946 | if (!MaybeWrapValue(cx, &tmp)) { | |||
10947 | return false; | |||
10948 | } | |||
10949 | break; | |||
10950 | } while (false); | |||
10951 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
10952 | JSPROP_ENUMERATE)) { | |||
10953 | return false; | |||
10954 | } | |||
10955 | } | |||
10956 | } | |||
10957 | args.rval().setObject(*returnArray); | |||
10958 | return true; | |||
10959 | } | |||
10960 | ||||
10961 | static const JSJitInfo receiveAnySequence_methodinfo = { | |||
10962 | { (JSJitGetterOp)receiveAnySequence }, | |||
10963 | { prototypes::id::TestExampleInterface }, | |||
10964 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
10965 | JSJitInfo::Method, | |||
10966 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
10967 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
10968 | false, /* isInfallible. False in setters. */ | |||
10969 | false, /* isMovable. Not relevant for setters. */ | |||
10970 | false, /* isEliminatable. Not relevant for setters. */ | |||
10971 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
10972 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
10973 | false, /* isTypedMethod. Only relevant for methods. */ | |||
10974 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
10975 | }; | |||
10976 | ||||
10977 | MOZ_CAN_RUN_SCRIPT static bool | |||
10978 | receiveNullableAnySequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
10979 | { | |||
10980 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject10983( cx, "TestExampleInterface" , "receiveNullableAnySequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10981 | "TestExampleInterface", "receiveNullableAnySequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject10983( cx, "TestExampleInterface" , "receiveNullableAnySequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10982 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject10983( cx, "TestExampleInterface" , "receiveNullableAnySequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
10983 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject10983( cx, "TestExampleInterface" , "receiveNullableAnySequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
10984 | ||||
10985 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
10986 | Nullable<nsTArray<JS::Value>> result; | |||
10987 | SequenceRooter<JS::Value > resultRooter(cx, &result); | |||
10988 | // NOTE: This assert does NOT call the function. | |||
10989 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableAnySequence(cx, result))>, "Should be returning void here"); | |||
10990 | MOZ_KnownLive(self)(self)->ReceiveNullableAnySequence(cx, result); | |||
10991 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 10991); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 10991; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
10992 | ||||
10993 | if (result.IsNull()) { | |||
10994 | args.rval().setNull(); | |||
10995 | return true; | |||
10996 | } | |||
10997 | ||||
10998 | uint32_t length = result.Value().Length(); | |||
10999 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
11000 | if (!returnArray) { | |||
11001 | return false; | |||
11002 | } | |||
11003 | // Scope for 'tmp' | |||
11004 | { | |||
11005 | JS::Rooted<JS::Value> tmp(cx); | |||
11006 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
11007 | // Control block to let us common up the JS_DefineElement calls when there | |||
11008 | // are different ways to succeed at wrapping the object. | |||
11009 | do { | |||
11010 | JS::ExposeValueToActiveJS(result.Value()[sequenceIdx0]); | |||
11011 | tmp.set(result.Value()[sequenceIdx0]); | |||
11012 | if (!MaybeWrapValue(cx, &tmp)) { | |||
11013 | return false; | |||
11014 | } | |||
11015 | break; | |||
11016 | } while (false); | |||
11017 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
11018 | JSPROP_ENUMERATE)) { | |||
11019 | return false; | |||
11020 | } | |||
11021 | } | |||
11022 | } | |||
11023 | args.rval().setObject(*returnArray); | |||
11024 | return true; | |||
11025 | } | |||
11026 | ||||
11027 | static const JSJitInfo receiveNullableAnySequence_methodinfo = { | |||
11028 | { (JSJitGetterOp)receiveNullableAnySequence }, | |||
11029 | { prototypes::id::TestExampleInterface }, | |||
11030 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11031 | JSJitInfo::Method, | |||
11032 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11033 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
11034 | false, /* isInfallible. False in setters. */ | |||
11035 | false, /* isMovable. Not relevant for setters. */ | |||
11036 | false, /* isEliminatable. Not relevant for setters. */ | |||
11037 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11038 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11039 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11040 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11041 | }; | |||
11042 | ||||
11043 | MOZ_CAN_RUN_SCRIPT static bool | |||
11044 | receiveObjectSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11045 | { | |||
11046 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11049( cx, "TestExampleInterface" , "receiveObjectSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11047 | "TestExampleInterface", "receiveObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11049( cx, "TestExampleInterface" , "receiveObjectSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11048 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11049( cx, "TestExampleInterface" , "receiveObjectSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11049 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11049( cx, "TestExampleInterface" , "receiveObjectSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
11050 | ||||
11051 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11052 | nsTArray<JSObject*> result; | |||
11053 | SequenceRooter<JSObject* > resultRooter(cx, &result); | |||
11054 | // NOTE: This assert does NOT call the function. | |||
11055 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveObjectSequence(cx, result))>, "Should be returning void here"); | |||
11056 | MOZ_KnownLive(self)(self)->ReceiveObjectSequence(cx, result); | |||
11057 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11057); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11057; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11058 | ||||
11059 | uint32_t length = result.Length(); | |||
11060 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
11061 | if (!returnArray) { | |||
11062 | return false; | |||
11063 | } | |||
11064 | // Scope for 'tmp' | |||
11065 | { | |||
11066 | JS::Rooted<JS::Value> tmp(cx); | |||
11067 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
11068 | // Control block to let us common up the JS_DefineElement calls when there | |||
11069 | // are different ways to succeed at wrapping the object. | |||
11070 | do { | |||
11071 | JS::ExposeObjectToActiveJS(result[sequenceIdx0]); | |||
11072 | tmp.setObject(*result[sequenceIdx0]); | |||
11073 | if (!MaybeWrapObjectValue(cx, &tmp)) { | |||
11074 | return false; | |||
11075 | } | |||
11076 | break; | |||
11077 | } while (false); | |||
11078 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
11079 | JSPROP_ENUMERATE)) { | |||
11080 | return false; | |||
11081 | } | |||
11082 | } | |||
11083 | } | |||
11084 | args.rval().setObject(*returnArray); | |||
11085 | return true; | |||
11086 | } | |||
11087 | ||||
11088 | static const JSJitInfo receiveObjectSequence_methodinfo = { | |||
11089 | { (JSJitGetterOp)receiveObjectSequence }, | |||
11090 | { prototypes::id::TestExampleInterface }, | |||
11091 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11092 | JSJitInfo::Method, | |||
11093 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11094 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
11095 | false, /* isInfallible. False in setters. */ | |||
11096 | false, /* isMovable. Not relevant for setters. */ | |||
11097 | false, /* isEliminatable. Not relevant for setters. */ | |||
11098 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11099 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11100 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11101 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11102 | }; | |||
11103 | ||||
11104 | MOZ_CAN_RUN_SCRIPT static bool | |||
11105 | receiveNullableObjectSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11106 | { | |||
11107 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11110( cx, "TestExampleInterface" , "receiveNullableObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11108 | "TestExampleInterface", "receiveNullableObjectSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11110( cx, "TestExampleInterface" , "receiveNullableObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11109 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11110( cx, "TestExampleInterface" , "receiveNullableObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11110 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11110( cx, "TestExampleInterface" , "receiveNullableObjectSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
11111 | ||||
11112 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11113 | nsTArray<JSObject*> result; | |||
11114 | SequenceRooter<JSObject* > resultRooter(cx, &result); | |||
11115 | // NOTE: This assert does NOT call the function. | |||
11116 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableObjectSequence(cx, result))>, "Should be returning void here"); | |||
11117 | MOZ_KnownLive(self)(self)->ReceiveNullableObjectSequence(cx, result); | |||
11118 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11118); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11118; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11119 | ||||
11120 | uint32_t length = result.Length(); | |||
11121 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
11122 | if (!returnArray) { | |||
11123 | return false; | |||
11124 | } | |||
11125 | // Scope for 'tmp' | |||
11126 | { | |||
11127 | JS::Rooted<JS::Value> tmp(cx); | |||
11128 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
11129 | // Control block to let us common up the JS_DefineElement calls when there | |||
11130 | // are different ways to succeed at wrapping the object. | |||
11131 | do { | |||
11132 | if (result[sequenceIdx0]) { | |||
11133 | JS::ExposeObjectToActiveJS(result[sequenceIdx0]); | |||
11134 | } | |||
11135 | tmp.setObjectOrNull(result[sequenceIdx0]); | |||
11136 | if (!MaybeWrapObjectOrNullValue(cx, &tmp)) { | |||
11137 | return false; | |||
11138 | } | |||
11139 | break; | |||
11140 | } while (false); | |||
11141 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
11142 | JSPROP_ENUMERATE)) { | |||
11143 | return false; | |||
11144 | } | |||
11145 | } | |||
11146 | } | |||
11147 | args.rval().setObject(*returnArray); | |||
11148 | return true; | |||
11149 | } | |||
11150 | ||||
11151 | static const JSJitInfo receiveNullableObjectSequence_methodinfo = { | |||
11152 | { (JSJitGetterOp)receiveNullableObjectSequence }, | |||
11153 | { prototypes::id::TestExampleInterface }, | |||
11154 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11155 | JSJitInfo::Method, | |||
11156 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11157 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
11158 | false, /* isInfallible. False in setters. */ | |||
11159 | false, /* isMovable. Not relevant for setters. */ | |||
11160 | false, /* isEliminatable. Not relevant for setters. */ | |||
11161 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11162 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11163 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11164 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11165 | }; | |||
11166 | ||||
11167 | MOZ_CAN_RUN_SCRIPT static bool | |||
11168 | passSequenceOfSequences(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11169 | { | |||
11170 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfSequences"); | |||
11171 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11174( cx, "TestExampleInterface" , "passSequenceOfSequences", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11172 | "TestExampleInterface", "passSequenceOfSequences", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11174( cx, "TestExampleInterface" , "passSequenceOfSequences", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11173 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11174( cx, "TestExampleInterface" , "passSequenceOfSequences", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11174 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11174( cx, "TestExampleInterface" , "passSequenceOfSequences", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
11175 | ||||
11176 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11177 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfSequences", 1)) { | |||
11178 | return false; | |||
11179 | } | |||
11180 | binding_detail::AutoSequence<Sequence<int32_t>> arg0; | |||
11181 | if (args[0].isObject()) { | |||
11182 | JS::ForOfIterator iter(cx); | |||
11183 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
11184 | return false; | |||
11185 | } | |||
11186 | if (!iter.valueIsIterable()) { | |||
11187 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
11188 | return false; | |||
11189 | } | |||
11190 | binding_detail::AutoSequence<Sequence<int32_t>> &arr = arg0; | |||
11191 | JS::Rooted<JS::Value> temp(cx); | |||
11192 | while (true) { | |||
11193 | bool done; | |||
11194 | if (!iter.next(&temp, &done)) { | |||
11195 | return false; | |||
11196 | } | |||
11197 | if (done) { | |||
11198 | break; | |||
11199 | } | |||
11200 | Sequence<int32_t>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
11201 | if (!slotPtr) { | |||
11202 | JS_ReportOutOfMemory(cx); | |||
11203 | return false; | |||
11204 | } | |||
11205 | Sequence<int32_t>& slot = *slotPtr; | |||
11206 | if (temp.isObject()) { | |||
11207 | JS::ForOfIterator iter1(cx); | |||
11208 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
11209 | return false; | |||
11210 | } | |||
11211 | if (!iter1.valueIsIterable()) { | |||
11212 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
11213 | return false; | |||
11214 | } | |||
11215 | Sequence<int32_t> &arr1 = slot; | |||
11216 | JS::Rooted<JS::Value> temp1(cx); | |||
11217 | while (true) { | |||
11218 | bool done1; | |||
11219 | if (!iter1.next(&temp1, &done1)) { | |||
11220 | return false; | |||
11221 | } | |||
11222 | if (done1) { | |||
11223 | break; | |||
11224 | } | |||
11225 | int32_t* slotPtr1 = arr1.AppendElement(mozilla::fallible); | |||
11226 | if (!slotPtr1) { | |||
11227 | JS_ReportOutOfMemory(cx); | |||
11228 | return false; | |||
11229 | } | |||
11230 | int32_t& slot1 = *slotPtr1; | |||
11231 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp1, "Element of element of argument 1", &slot1)) { | |||
11232 | return false; | |||
11233 | } | |||
11234 | } | |||
11235 | } else { | |||
11236 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
11237 | return false; | |||
11238 | } | |||
11239 | } | |||
11240 | } else { | |||
11241 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
11242 | return false; | |||
11243 | } | |||
11244 | // NOTE: This assert does NOT call the function. | |||
11245 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfSequences(Constify(arg0)))>, "Should be returning void here"); | |||
11246 | MOZ_KnownLive(self)(self)->PassSequenceOfSequences(Constify(arg0)); | |||
11247 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11247); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11247; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11248 | args.rval().setUndefined(); | |||
11249 | return true; | |||
11250 | } | |||
11251 | ||||
11252 | static const JSJitInfo passSequenceOfSequences_methodinfo = { | |||
11253 | { (JSJitGetterOp)passSequenceOfSequences }, | |||
11254 | { prototypes::id::TestExampleInterface }, | |||
11255 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11256 | JSJitInfo::Method, | |||
11257 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11258 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
11259 | false, /* isInfallible. False in setters. */ | |||
11260 | false, /* isMovable. Not relevant for setters. */ | |||
11261 | false, /* isEliminatable. Not relevant for setters. */ | |||
11262 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11263 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11264 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11265 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11266 | }; | |||
11267 | ||||
11268 | MOZ_CAN_RUN_SCRIPT static bool | |||
11269 | passSequenceOfSequencesOfSequences(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11270 | { | |||
11271 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfSequencesOfSequences"); | |||
11272 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11275( cx, "TestExampleInterface" , "passSequenceOfSequencesOfSequences", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11273 | "TestExampleInterface", "passSequenceOfSequencesOfSequences", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11275( cx, "TestExampleInterface" , "passSequenceOfSequencesOfSequences", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11274 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11275( cx, "TestExampleInterface" , "passSequenceOfSequencesOfSequences", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11275 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11275( cx, "TestExampleInterface" , "passSequenceOfSequencesOfSequences", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
11276 | ||||
11277 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11278 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfSequencesOfSequences", 1)) { | |||
11279 | return false; | |||
11280 | } | |||
11281 | binding_detail::AutoSequence<Sequence<Sequence<int32_t>>> arg0; | |||
11282 | if (args[0].isObject()) { | |||
11283 | JS::ForOfIterator iter(cx); | |||
11284 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
11285 | return false; | |||
11286 | } | |||
11287 | if (!iter.valueIsIterable()) { | |||
11288 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
11289 | return false; | |||
11290 | } | |||
11291 | binding_detail::AutoSequence<Sequence<Sequence<int32_t>>> &arr = arg0; | |||
11292 | JS::Rooted<JS::Value> temp(cx); | |||
11293 | while (true) { | |||
11294 | bool done; | |||
11295 | if (!iter.next(&temp, &done)) { | |||
11296 | return false; | |||
11297 | } | |||
11298 | if (done) { | |||
11299 | break; | |||
11300 | } | |||
11301 | Sequence<Sequence<int32_t>>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
11302 | if (!slotPtr) { | |||
11303 | JS_ReportOutOfMemory(cx); | |||
11304 | return false; | |||
11305 | } | |||
11306 | Sequence<Sequence<int32_t>>& slot = *slotPtr; | |||
11307 | if (temp.isObject()) { | |||
11308 | JS::ForOfIterator iter1(cx); | |||
11309 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
11310 | return false; | |||
11311 | } | |||
11312 | if (!iter1.valueIsIterable()) { | |||
11313 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
11314 | return false; | |||
11315 | } | |||
11316 | Sequence<Sequence<int32_t>> &arr1 = slot; | |||
11317 | JS::Rooted<JS::Value> temp1(cx); | |||
11318 | while (true) { | |||
11319 | bool done1; | |||
11320 | if (!iter1.next(&temp1, &done1)) { | |||
11321 | return false; | |||
11322 | } | |||
11323 | if (done1) { | |||
11324 | break; | |||
11325 | } | |||
11326 | Sequence<int32_t>* slotPtr1 = arr1.AppendElement(mozilla::fallible); | |||
11327 | if (!slotPtr1) { | |||
11328 | JS_ReportOutOfMemory(cx); | |||
11329 | return false; | |||
11330 | } | |||
11331 | Sequence<int32_t>& slot1 = *slotPtr1; | |||
11332 | if (temp1.isObject()) { | |||
11333 | JS::ForOfIterator iter2(cx); | |||
11334 | if (!iter2.init(temp1, JS::ForOfIterator::AllowNonIterable)) { | |||
11335 | return false; | |||
11336 | } | |||
11337 | if (!iter2.valueIsIterable()) { | |||
11338 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of element of argument 1", "sequence"); | |||
11339 | return false; | |||
11340 | } | |||
11341 | Sequence<int32_t> &arr2 = slot1; | |||
11342 | JS::Rooted<JS::Value> temp2(cx); | |||
11343 | while (true) { | |||
11344 | bool done2; | |||
11345 | if (!iter2.next(&temp2, &done2)) { | |||
11346 | return false; | |||
11347 | } | |||
11348 | if (done2) { | |||
11349 | break; | |||
11350 | } | |||
11351 | int32_t* slotPtr2 = arr2.AppendElement(mozilla::fallible); | |||
11352 | if (!slotPtr2) { | |||
11353 | JS_ReportOutOfMemory(cx); | |||
11354 | return false; | |||
11355 | } | |||
11356 | int32_t& slot2 = *slotPtr2; | |||
11357 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp2, "Element of element of element of argument 1", &slot2)) { | |||
11358 | return false; | |||
11359 | } | |||
11360 | } | |||
11361 | } else { | |||
11362 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of element of argument 1", "sequence"); | |||
11363 | return false; | |||
11364 | } | |||
11365 | } | |||
11366 | } else { | |||
11367 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
11368 | return false; | |||
11369 | } | |||
11370 | } | |||
11371 | } else { | |||
11372 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
11373 | return false; | |||
11374 | } | |||
11375 | // NOTE: This assert does NOT call the function. | |||
11376 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfSequencesOfSequences(Constify(arg0)))>, "Should be returning void here"); | |||
11377 | MOZ_KnownLive(self)(self)->PassSequenceOfSequencesOfSequences(Constify(arg0)); | |||
11378 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11378); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11378; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11379 | args.rval().setUndefined(); | |||
11380 | return true; | |||
11381 | } | |||
11382 | ||||
11383 | static const JSJitInfo passSequenceOfSequencesOfSequences_methodinfo = { | |||
11384 | { (JSJitGetterOp)passSequenceOfSequencesOfSequences }, | |||
11385 | { prototypes::id::TestExampleInterface }, | |||
11386 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11387 | JSJitInfo::Method, | |||
11388 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11389 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
11390 | false, /* isInfallible. False in setters. */ | |||
11391 | false, /* isMovable. Not relevant for setters. */ | |||
11392 | false, /* isEliminatable. Not relevant for setters. */ | |||
11393 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11394 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11395 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11396 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11397 | }; | |||
11398 | ||||
11399 | MOZ_CAN_RUN_SCRIPT static bool | |||
11400 | passRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11401 | { | |||
11402 | BindingCallContext cx(cx_, "TestExampleInterface.passRecord"); | |||
11403 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11406( cx, "TestExampleInterface" , "passRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11404 | "TestExampleInterface", "passRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11406( cx, "TestExampleInterface" , "passRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11405 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11406( cx, "TestExampleInterface" , "passRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11406 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11406( cx, "TestExampleInterface" , "passRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
11407 | ||||
11408 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11409 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecord", 1)) { | |||
11410 | return false; | |||
11411 | } | |||
11412 | Record<nsString, int32_t> arg0; | |||
11413 | if (args[0].isObject()) { | |||
11414 | auto& recordEntries = arg0.Entries(); | |||
11415 | ||||
11416 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
11417 | JS::RootedVector<jsid> ids(cx); | |||
11418 | if (!js::GetPropertyKeys(cx, recordObj, | |||
11419 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
11420 | return false; | |||
11421 | } | |||
11422 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
11423 | JS_ReportOutOfMemory(cx); | |||
11424 | return false; | |||
11425 | } | |||
11426 | JS::Rooted<JS::Value> propNameValue(cx); | |||
11427 | JS::Rooted<JS::Value> temp(cx); | |||
11428 | JS::Rooted<jsid> curId(cx); | |||
11429 | JS::Rooted<JS::Value> idVal(cx); | |||
11430 | // Use a hashset to keep track of ids seen, to avoid | |||
11431 | // introducing nasty O(N^2) behavior scanning for them all the | |||
11432 | // time. Ideally we'd use a data structure with O(1) lookup | |||
11433 | // _and_ ordering for the MozMap, but we don't have one lying | |||
11434 | // around. | |||
11435 | nsTHashtable<nsStringHashKey> idsSeen; | |||
11436 | for (size_t i = 0; i < ids.length(); ++i) { | |||
11437 | curId = ids[i]; | |||
11438 | ||||
11439 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
11440 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
11441 | &desc)) { | |||
11442 | return false; | |||
11443 | } | |||
11444 | ||||
11445 | if (desc.isNothing() || !desc->enumerable()) { | |||
11446 | continue; | |||
11447 | } | |||
11448 | ||||
11449 | idVal = js::IdToValue(curId); | |||
11450 | nsString propName; | |||
11451 | // This will just throw if idVal is a Symbol, like the spec says | |||
11452 | // to do. | |||
11453 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
11454 | return false; | |||
11455 | } | |||
11456 | ||||
11457 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
11458 | return false; | |||
11459 | } | |||
11460 | ||||
11461 | Record<nsString, int32_t>::EntryType* entry; | |||
11462 | if (!idsSeen.EnsureInserted(propName)) { | |||
11463 | // Find the existing entry. | |||
11464 | auto idx = recordEntries.IndexOf(propName); | |||
11465 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11466); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11466; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
11466 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11466); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11466; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
11467 | // Now blow it away to make it look like it was just added | |||
11468 | // to the array, because it's not obvious that it's | |||
11469 | // safe to write to its already-initialized mValue via our | |||
11470 | // normal codegen conversions. For example, the value | |||
11471 | // could be a union and this would change its type, but | |||
11472 | // codegen assumes we won't do that. | |||
11473 | entry = recordEntries.ReconstructElementAt(idx); | |||
11474 | } else { | |||
11475 | // Safe to do an infallible append here, because we did a | |||
11476 | // SetCapacity above to the right capacity. | |||
11477 | entry = recordEntries.AppendElement(); | |||
11478 | } | |||
11479 | entry->mKey = propName; | |||
11480 | int32_t& slot = entry->mValue; | |||
11481 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot)) { | |||
11482 | return false; | |||
11483 | } | |||
11484 | } | |||
11485 | } else { | |||
11486 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
11487 | return false; | |||
11488 | } | |||
11489 | // NOTE: This assert does NOT call the function. | |||
11490 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecord(Constify(arg0)))>, "Should be returning void here"); | |||
11491 | MOZ_KnownLive(self)(self)->PassRecord(Constify(arg0)); | |||
11492 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11492); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11492; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11493 | args.rval().setUndefined(); | |||
11494 | return true; | |||
11495 | } | |||
11496 | ||||
11497 | static const JSJitInfo passRecord_methodinfo = { | |||
11498 | { (JSJitGetterOp)passRecord }, | |||
11499 | { prototypes::id::TestExampleInterface }, | |||
11500 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11501 | JSJitInfo::Method, | |||
11502 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11503 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
11504 | false, /* isInfallible. False in setters. */ | |||
11505 | false, /* isMovable. Not relevant for setters. */ | |||
11506 | false, /* isEliminatable. Not relevant for setters. */ | |||
11507 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11508 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11509 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11510 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11511 | }; | |||
11512 | ||||
11513 | MOZ_CAN_RUN_SCRIPT static bool | |||
11514 | passNullableRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11515 | { | |||
11516 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableRecord"); | |||
11517 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11520( cx, "TestExampleInterface" , "passNullableRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11518 | "TestExampleInterface", "passNullableRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11520( cx, "TestExampleInterface" , "passNullableRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11519 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11520( cx, "TestExampleInterface" , "passNullableRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
11520 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11520( cx, "TestExampleInterface" , "passNullableRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
11521 | ||||
11522 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11523 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableRecord", 1)) { | |||
11524 | return false; | |||
11525 | } | |||
11526 | Nullable<Record<nsString, int32_t>> arg0; | |||
11527 | if (args[0].isObject()) { | |||
11528 | auto& recordEntries = arg0.SetValue().Entries(); | |||
11529 | ||||
11530 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
11531 | JS::RootedVector<jsid> ids(cx); | |||
11532 | if (!js::GetPropertyKeys(cx, recordObj, | |||
11533 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
11534 | return false; | |||
11535 | } | |||
11536 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
11537 | JS_ReportOutOfMemory(cx); | |||
11538 | return false; | |||
11539 | } | |||
11540 | JS::Rooted<JS::Value> propNameValue(cx); | |||
11541 | JS::Rooted<JS::Value> temp(cx); | |||
11542 | JS::Rooted<jsid> curId(cx); | |||
11543 | JS::Rooted<JS::Value> idVal(cx); | |||
11544 | // Use a hashset to keep track of ids seen, to avoid | |||
11545 | // introducing nasty O(N^2) behavior scanning for them all the | |||
11546 | // time. Ideally we'd use a data structure with O(1) lookup | |||
11547 | // _and_ ordering for the MozMap, but we don't have one lying | |||
11548 | // around. | |||
11549 | nsTHashtable<nsStringHashKey> idsSeen; | |||
11550 | for (size_t i = 0; i < ids.length(); ++i) { | |||
11551 | curId = ids[i]; | |||
11552 | ||||
11553 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
11554 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
11555 | &desc)) { | |||
11556 | return false; | |||
11557 | } | |||
11558 | ||||
11559 | if (desc.isNothing() || !desc->enumerable()) { | |||
11560 | continue; | |||
11561 | } | |||
11562 | ||||
11563 | idVal = js::IdToValue(curId); | |||
11564 | nsString propName; | |||
11565 | // This will just throw if idVal is a Symbol, like the spec says | |||
11566 | // to do. | |||
11567 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
11568 | return false; | |||
11569 | } | |||
11570 | ||||
11571 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
11572 | return false; | |||
11573 | } | |||
11574 | ||||
11575 | Record<nsString, int32_t>::EntryType* entry; | |||
11576 | if (!idsSeen.EnsureInserted(propName)) { | |||
11577 | // Find the existing entry. | |||
11578 | auto idx = recordEntries.IndexOf(propName); | |||
11579 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11580); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11580; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
11580 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11580); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11580; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
11581 | // Now blow it away to make it look like it was just added | |||
11582 | // to the array, because it's not obvious that it's | |||
11583 | // safe to write to its already-initialized mValue via our | |||
11584 | // normal codegen conversions. For example, the value | |||
11585 | // could be a union and this would change its type, but | |||
11586 | // codegen assumes we won't do that. | |||
11587 | entry = recordEntries.ReconstructElementAt(idx); | |||
11588 | } else { | |||
11589 | // Safe to do an infallible append here, because we did a | |||
11590 | // SetCapacity above to the right capacity. | |||
11591 | entry = recordEntries.AppendElement(); | |||
11592 | } | |||
11593 | entry->mKey = propName; | |||
11594 | int32_t& slot = entry->mValue; | |||
11595 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot)) { | |||
11596 | return false; | |||
11597 | } | |||
11598 | } | |||
11599 | } else if (args[0].isNullOrUndefined()) { | |||
11600 | arg0.SetNull(); | |||
11601 | } else { | |||
11602 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
11603 | return false; | |||
11604 | } | |||
11605 | // NOTE: This assert does NOT call the function. | |||
11606 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableRecord(Constify(arg0)))>, "Should be returning void here"); | |||
11607 | MOZ_KnownLive(self)(self)->PassNullableRecord(Constify(arg0)); | |||
11608 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11608); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11608; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11609 | args.rval().setUndefined(); | |||
11610 | return true; | |||
11611 | } | |||
11612 | ||||
11613 | static const JSJitInfo passNullableRecord_methodinfo = { | |||
11614 | { (JSJitGetterOp)passNullableRecord }, | |||
11615 | { prototypes::id::TestExampleInterface }, | |||
11616 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11617 | JSJitInfo::Method, | |||
11618 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11619 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
11620 | false, /* isInfallible. False in setters. */ | |||
11621 | false, /* isMovable. Not relevant for setters. */ | |||
11622 | false, /* isEliminatable. Not relevant for setters. */ | |||
11623 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11624 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11625 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11626 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11627 | }; | |||
11628 | ||||
11629 | MOZ_CAN_RUN_SCRIPT static bool | |||
11630 | passRecordOfNullableInts(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11631 | { | |||
11632 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfNullableInts"); | |||
11633 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11636( cx, "TestExampleInterface" , "passRecordOfNullableInts", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11634 | "TestExampleInterface", "passRecordOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11636( cx, "TestExampleInterface" , "passRecordOfNullableInts", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11635 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11636( cx, "TestExampleInterface" , "passRecordOfNullableInts", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11636 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11636( cx, "TestExampleInterface" , "passRecordOfNullableInts", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
11637 | ||||
11638 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11639 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfNullableInts", 1)) { | |||
11640 | return false; | |||
11641 | } | |||
11642 | Record<nsString, Nullable<int32_t>> arg0; | |||
11643 | if (args[0].isObject()) { | |||
11644 | auto& recordEntries = arg0.Entries(); | |||
11645 | ||||
11646 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
11647 | JS::RootedVector<jsid> ids(cx); | |||
11648 | if (!js::GetPropertyKeys(cx, recordObj, | |||
11649 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
11650 | return false; | |||
11651 | } | |||
11652 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
11653 | JS_ReportOutOfMemory(cx); | |||
11654 | return false; | |||
11655 | } | |||
11656 | JS::Rooted<JS::Value> propNameValue(cx); | |||
11657 | JS::Rooted<JS::Value> temp(cx); | |||
11658 | JS::Rooted<jsid> curId(cx); | |||
11659 | JS::Rooted<JS::Value> idVal(cx); | |||
11660 | // Use a hashset to keep track of ids seen, to avoid | |||
11661 | // introducing nasty O(N^2) behavior scanning for them all the | |||
11662 | // time. Ideally we'd use a data structure with O(1) lookup | |||
11663 | // _and_ ordering for the MozMap, but we don't have one lying | |||
11664 | // around. | |||
11665 | nsTHashtable<nsStringHashKey> idsSeen; | |||
11666 | for (size_t i = 0; i < ids.length(); ++i) { | |||
11667 | curId = ids[i]; | |||
11668 | ||||
11669 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
11670 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
11671 | &desc)) { | |||
11672 | return false; | |||
11673 | } | |||
11674 | ||||
11675 | if (desc.isNothing() || !desc->enumerable()) { | |||
11676 | continue; | |||
11677 | } | |||
11678 | ||||
11679 | idVal = js::IdToValue(curId); | |||
11680 | nsString propName; | |||
11681 | // This will just throw if idVal is a Symbol, like the spec says | |||
11682 | // to do. | |||
11683 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
11684 | return false; | |||
11685 | } | |||
11686 | ||||
11687 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
11688 | return false; | |||
11689 | } | |||
11690 | ||||
11691 | Record<nsString, Nullable<int32_t>>::EntryType* entry; | |||
11692 | if (!idsSeen.EnsureInserted(propName)) { | |||
11693 | // Find the existing entry. | |||
11694 | auto idx = recordEntries.IndexOf(propName); | |||
11695 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11696); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11696; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
11696 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11696); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11696; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
11697 | // Now blow it away to make it look like it was just added | |||
11698 | // to the array, because it's not obvious that it's | |||
11699 | // safe to write to its already-initialized mValue via our | |||
11700 | // normal codegen conversions. For example, the value | |||
11701 | // could be a union and this would change its type, but | |||
11702 | // codegen assumes we won't do that. | |||
11703 | entry = recordEntries.ReconstructElementAt(idx); | |||
11704 | } else { | |||
11705 | // Safe to do an infallible append here, because we did a | |||
11706 | // SetCapacity above to the right capacity. | |||
11707 | entry = recordEntries.AppendElement(); | |||
11708 | } | |||
11709 | entry->mKey = propName; | |||
11710 | Nullable<int32_t>& slot = entry->mValue; | |||
11711 | if (temp.isNullOrUndefined()) { | |||
11712 | slot.SetNull(); | |||
11713 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot.SetValue())) { | |||
11714 | return false; | |||
11715 | } | |||
11716 | } | |||
11717 | } else { | |||
11718 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
11719 | return false; | |||
11720 | } | |||
11721 | // NOTE: This assert does NOT call the function. | |||
11722 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfNullableInts(Constify(arg0)))>, "Should be returning void here"); | |||
11723 | MOZ_KnownLive(self)(self)->PassRecordOfNullableInts(Constify(arg0)); | |||
11724 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11724); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11724; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11725 | args.rval().setUndefined(); | |||
11726 | return true; | |||
11727 | } | |||
11728 | ||||
11729 | static const JSJitInfo passRecordOfNullableInts_methodinfo = { | |||
11730 | { (JSJitGetterOp)passRecordOfNullableInts }, | |||
11731 | { prototypes::id::TestExampleInterface }, | |||
11732 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11733 | JSJitInfo::Method, | |||
11734 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11735 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
11736 | false, /* isInfallible. False in setters. */ | |||
11737 | false, /* isMovable. Not relevant for setters. */ | |||
11738 | false, /* isEliminatable. Not relevant for setters. */ | |||
11739 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11740 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11741 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11742 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11743 | }; | |||
11744 | ||||
11745 | MOZ_CAN_RUN_SCRIPT static bool | |||
11746 | passOptionalRecordOfNullableInts(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11747 | { | |||
11748 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalRecordOfNullableInts"); | |||
11749 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11752( cx, "TestExampleInterface" , "passOptionalRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11750 | "TestExampleInterface", "passOptionalRecordOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11752( cx, "TestExampleInterface" , "passOptionalRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11751 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11752( cx, "TestExampleInterface" , "passOptionalRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11752 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11752( cx, "TestExampleInterface" , "passOptionalRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
11753 | ||||
11754 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11755 | Optional<Record<nsString, Nullable<int32_t>>> arg0; | |||
11756 | if (args.hasDefined(0)) { | |||
11757 | arg0.Construct(); | |||
11758 | if (args[0].isObject()) { | |||
11759 | auto& recordEntries = arg0.Value().Entries(); | |||
11760 | ||||
11761 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
11762 | JS::RootedVector<jsid> ids(cx); | |||
11763 | if (!js::GetPropertyKeys(cx, recordObj, | |||
11764 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
11765 | return false; | |||
11766 | } | |||
11767 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
11768 | JS_ReportOutOfMemory(cx); | |||
11769 | return false; | |||
11770 | } | |||
11771 | JS::Rooted<JS::Value> propNameValue(cx); | |||
11772 | JS::Rooted<JS::Value> temp(cx); | |||
11773 | JS::Rooted<jsid> curId(cx); | |||
11774 | JS::Rooted<JS::Value> idVal(cx); | |||
11775 | // Use a hashset to keep track of ids seen, to avoid | |||
11776 | // introducing nasty O(N^2) behavior scanning for them all the | |||
11777 | // time. Ideally we'd use a data structure with O(1) lookup | |||
11778 | // _and_ ordering for the MozMap, but we don't have one lying | |||
11779 | // around. | |||
11780 | nsTHashtable<nsStringHashKey> idsSeen; | |||
11781 | for (size_t i = 0; i < ids.length(); ++i) { | |||
11782 | curId = ids[i]; | |||
11783 | ||||
11784 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
11785 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
11786 | &desc)) { | |||
11787 | return false; | |||
11788 | } | |||
11789 | ||||
11790 | if (desc.isNothing() || !desc->enumerable()) { | |||
11791 | continue; | |||
11792 | } | |||
11793 | ||||
11794 | idVal = js::IdToValue(curId); | |||
11795 | nsString propName; | |||
11796 | // This will just throw if idVal is a Symbol, like the spec says | |||
11797 | // to do. | |||
11798 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
11799 | return false; | |||
11800 | } | |||
11801 | ||||
11802 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
11803 | return false; | |||
11804 | } | |||
11805 | ||||
11806 | Record<nsString, Nullable<int32_t>>::EntryType* entry; | |||
11807 | if (!idsSeen.EnsureInserted(propName)) { | |||
11808 | // Find the existing entry. | |||
11809 | auto idx = recordEntries.IndexOf(propName); | |||
11810 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11811); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11811; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
11811 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11811); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11811; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
11812 | // Now blow it away to make it look like it was just added | |||
11813 | // to the array, because it's not obvious that it's | |||
11814 | // safe to write to its already-initialized mValue via our | |||
11815 | // normal codegen conversions. For example, the value | |||
11816 | // could be a union and this would change its type, but | |||
11817 | // codegen assumes we won't do that. | |||
11818 | entry = recordEntries.ReconstructElementAt(idx); | |||
11819 | } else { | |||
11820 | // Safe to do an infallible append here, because we did a | |||
11821 | // SetCapacity above to the right capacity. | |||
11822 | entry = recordEntries.AppendElement(); | |||
11823 | } | |||
11824 | entry->mKey = propName; | |||
11825 | Nullable<int32_t>& slot = entry->mValue; | |||
11826 | if (temp.isNullOrUndefined()) { | |||
11827 | slot.SetNull(); | |||
11828 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot.SetValue())) { | |||
11829 | return false; | |||
11830 | } | |||
11831 | } | |||
11832 | } else { | |||
11833 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
11834 | return false; | |||
11835 | } | |||
11836 | } | |||
11837 | // NOTE: This assert does NOT call the function. | |||
11838 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalRecordOfNullableInts(Constify(arg0)))>, "Should be returning void here"); | |||
11839 | MOZ_KnownLive(self)(self)->PassOptionalRecordOfNullableInts(Constify(arg0)); | |||
11840 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11840); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11840; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11841 | args.rval().setUndefined(); | |||
11842 | return true; | |||
11843 | } | |||
11844 | ||||
11845 | static const JSJitInfo passOptionalRecordOfNullableInts_methodinfo = { | |||
11846 | { (JSJitGetterOp)passOptionalRecordOfNullableInts }, | |||
11847 | { prototypes::id::TestExampleInterface }, | |||
11848 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11849 | JSJitInfo::Method, | |||
11850 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11851 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
11852 | false, /* isInfallible. False in setters. */ | |||
11853 | false, /* isMovable. Not relevant for setters. */ | |||
11854 | false, /* isEliminatable. Not relevant for setters. */ | |||
11855 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11856 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11857 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11858 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11859 | }; | |||
11860 | ||||
11861 | MOZ_CAN_RUN_SCRIPT static bool | |||
11862 | passOptionalNullableRecordOfNullableInts(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11863 | { | |||
11864 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableRecordOfNullableInts"); | |||
11865 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11868( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11866 | "TestExampleInterface", "passOptionalNullableRecordOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11868( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11867 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11868( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11868 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11868( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
11869 | ||||
11870 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11871 | Optional<Nullable<Record<nsString, Nullable<int32_t>>>> arg0; | |||
11872 | if (args.hasDefined(0)) { | |||
11873 | arg0.Construct(); | |||
11874 | if (args[0].isObject()) { | |||
11875 | auto& recordEntries = arg0.Value().SetValue().Entries(); | |||
11876 | ||||
11877 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
11878 | JS::RootedVector<jsid> ids(cx); | |||
11879 | if (!js::GetPropertyKeys(cx, recordObj, | |||
11880 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
11881 | return false; | |||
11882 | } | |||
11883 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
11884 | JS_ReportOutOfMemory(cx); | |||
11885 | return false; | |||
11886 | } | |||
11887 | JS::Rooted<JS::Value> propNameValue(cx); | |||
11888 | JS::Rooted<JS::Value> temp(cx); | |||
11889 | JS::Rooted<jsid> curId(cx); | |||
11890 | JS::Rooted<JS::Value> idVal(cx); | |||
11891 | // Use a hashset to keep track of ids seen, to avoid | |||
11892 | // introducing nasty O(N^2) behavior scanning for them all the | |||
11893 | // time. Ideally we'd use a data structure with O(1) lookup | |||
11894 | // _and_ ordering for the MozMap, but we don't have one lying | |||
11895 | // around. | |||
11896 | nsTHashtable<nsStringHashKey> idsSeen; | |||
11897 | for (size_t i = 0; i < ids.length(); ++i) { | |||
11898 | curId = ids[i]; | |||
11899 | ||||
11900 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
11901 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
11902 | &desc)) { | |||
11903 | return false; | |||
11904 | } | |||
11905 | ||||
11906 | if (desc.isNothing() || !desc->enumerable()) { | |||
11907 | continue; | |||
11908 | } | |||
11909 | ||||
11910 | idVal = js::IdToValue(curId); | |||
11911 | nsString propName; | |||
11912 | // This will just throw if idVal is a Symbol, like the spec says | |||
11913 | // to do. | |||
11914 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
11915 | return false; | |||
11916 | } | |||
11917 | ||||
11918 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
11919 | return false; | |||
11920 | } | |||
11921 | ||||
11922 | Record<nsString, Nullable<int32_t>>::EntryType* entry; | |||
11923 | if (!idsSeen.EnsureInserted(propName)) { | |||
11924 | // Find the existing entry. | |||
11925 | auto idx = recordEntries.IndexOf(propName); | |||
11926 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11927); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11927; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
11927 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 11927); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 11927; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
11928 | // Now blow it away to make it look like it was just added | |||
11929 | // to the array, because it's not obvious that it's | |||
11930 | // safe to write to its already-initialized mValue via our | |||
11931 | // normal codegen conversions. For example, the value | |||
11932 | // could be a union and this would change its type, but | |||
11933 | // codegen assumes we won't do that. | |||
11934 | entry = recordEntries.ReconstructElementAt(idx); | |||
11935 | } else { | |||
11936 | // Safe to do an infallible append here, because we did a | |||
11937 | // SetCapacity above to the right capacity. | |||
11938 | entry = recordEntries.AppendElement(); | |||
11939 | } | |||
11940 | entry->mKey = propName; | |||
11941 | Nullable<int32_t>& slot = entry->mValue; | |||
11942 | if (temp.isNullOrUndefined()) { | |||
11943 | slot.SetNull(); | |||
11944 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot.SetValue())) { | |||
11945 | return false; | |||
11946 | } | |||
11947 | } | |||
11948 | } else if (args[0].isNullOrUndefined()) { | |||
11949 | arg0.Value().SetNull(); | |||
11950 | } else { | |||
11951 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
11952 | return false; | |||
11953 | } | |||
11954 | } | |||
11955 | // NOTE: This assert does NOT call the function. | |||
11956 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableRecordOfNullableInts(Constify(arg0)))>, "Should be returning void here"); | |||
11957 | MOZ_KnownLive(self)(self)->PassOptionalNullableRecordOfNullableInts(Constify(arg0)); | |||
11958 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 11958); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 11958; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
11959 | args.rval().setUndefined(); | |||
11960 | return true; | |||
11961 | } | |||
11962 | ||||
11963 | static const JSJitInfo passOptionalNullableRecordOfNullableInts_methodinfo = { | |||
11964 | { (JSJitGetterOp)passOptionalNullableRecordOfNullableInts }, | |||
11965 | { prototypes::id::TestExampleInterface }, | |||
11966 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
11967 | JSJitInfo::Method, | |||
11968 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
11969 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
11970 | false, /* isInfallible. False in setters. */ | |||
11971 | false, /* isMovable. Not relevant for setters. */ | |||
11972 | false, /* isEliminatable. Not relevant for setters. */ | |||
11973 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
11974 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
11975 | false, /* isTypedMethod. Only relevant for methods. */ | |||
11976 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
11977 | }; | |||
11978 | ||||
11979 | MOZ_CAN_RUN_SCRIPT static bool | |||
11980 | passCastableObjectRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
11981 | { | |||
11982 | BindingCallContext cx(cx_, "TestExampleInterface.passCastableObjectRecord"); | |||
11983 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject11986( cx, "TestExampleInterface" , "passCastableObjectRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11984 | "TestExampleInterface", "passCastableObjectRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject11986( cx, "TestExampleInterface" , "passCastableObjectRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11985 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject11986( cx, "TestExampleInterface" , "passCastableObjectRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
11986 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject11986( cx, "TestExampleInterface" , "passCastableObjectRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
11987 | ||||
11988 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
11989 | if (!args.requireAtLeast(cx, "TestExampleInterface.passCastableObjectRecord", 1)) { | |||
11990 | return false; | |||
11991 | } | |||
11992 | Record<nsString, OwningNonNull<mozilla::dom::TestInterface>> arg0; | |||
11993 | if (args[0].isObject()) { | |||
11994 | auto& recordEntries = arg0.Entries(); | |||
11995 | ||||
11996 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
11997 | JS::RootedVector<jsid> ids(cx); | |||
11998 | if (!js::GetPropertyKeys(cx, recordObj, | |||
11999 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12000 | return false; | |||
12001 | } | |||
12002 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12003 | JS_ReportOutOfMemory(cx); | |||
12004 | return false; | |||
12005 | } | |||
12006 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12007 | JS::Rooted<JS::Value> temp(cx); | |||
12008 | JS::Rooted<jsid> curId(cx); | |||
12009 | JS::Rooted<JS::Value> idVal(cx); | |||
12010 | // Use a hashset to keep track of ids seen, to avoid | |||
12011 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12012 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12013 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12014 | // around. | |||
12015 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12016 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12017 | curId = ids[i]; | |||
12018 | ||||
12019 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
12020 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
12021 | &desc)) { | |||
12022 | return false; | |||
12023 | } | |||
12024 | ||||
12025 | if (desc.isNothing() || !desc->enumerable()) { | |||
12026 | continue; | |||
12027 | } | |||
12028 | ||||
12029 | idVal = js::IdToValue(curId); | |||
12030 | nsString propName; | |||
12031 | // This will just throw if idVal is a Symbol, like the spec says | |||
12032 | // to do. | |||
12033 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
12034 | return false; | |||
12035 | } | |||
12036 | ||||
12037 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
12038 | return false; | |||
12039 | } | |||
12040 | ||||
12041 | Record<nsString, OwningNonNull<mozilla::dom::TestInterface>>::EntryType* entry; | |||
12042 | if (!idsSeen.EnsureInserted(propName)) { | |||
12043 | // Find the existing entry. | |||
12044 | auto idx = recordEntries.IndexOf(propName); | |||
12045 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12046); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12046; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
12046 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12046); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12046; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
12047 | // Now blow it away to make it look like it was just added | |||
12048 | // to the array, because it's not obvious that it's | |||
12049 | // safe to write to its already-initialized mValue via our | |||
12050 | // normal codegen conversions. For example, the value | |||
12051 | // could be a union and this would change its type, but | |||
12052 | // codegen assumes we won't do that. | |||
12053 | entry = recordEntries.ReconstructElementAt(idx); | |||
12054 | } else { | |||
12055 | // Safe to do an infallible append here, because we did a | |||
12056 | // SetCapacity above to the right capacity. | |||
12057 | entry = recordEntries.AppendElement(); | |||
12058 | } | |||
12059 | entry->mKey = propName; | |||
12060 | OwningNonNull<mozilla::dom::TestInterface>& slot = entry->mValue; | |||
12061 | if (temp.isObject()) { | |||
12062 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
12063 | { | |||
12064 | // Our JSContext should be in the right global to do unwrapping in. | |||
12065 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
12066 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
12067 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "TestInterface"); | |||
12068 | return false; | |||
12069 | } | |||
12070 | } | |||
12071 | } else { | |||
12072 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
12073 | return false; | |||
12074 | } | |||
12075 | } | |||
12076 | } else { | |||
12077 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
12078 | return false; | |||
12079 | } | |||
12080 | // NOTE: This assert does NOT call the function. | |||
12081 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassCastableObjectRecord(Constify(arg0)))>, "Should be returning void here"); | |||
12082 | MOZ_KnownLive(self)(self)->PassCastableObjectRecord(Constify(arg0)); | |||
12083 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 12083); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 12083; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
12084 | args.rval().setUndefined(); | |||
12085 | return true; | |||
12086 | } | |||
12087 | ||||
12088 | static const JSJitInfo passCastableObjectRecord_methodinfo = { | |||
12089 | { (JSJitGetterOp)passCastableObjectRecord }, | |||
12090 | { prototypes::id::TestExampleInterface }, | |||
12091 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
12092 | JSJitInfo::Method, | |||
12093 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
12094 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
12095 | false, /* isInfallible. False in setters. */ | |||
12096 | false, /* isMovable. Not relevant for setters. */ | |||
12097 | false, /* isEliminatable. Not relevant for setters. */ | |||
12098 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
12099 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
12100 | false, /* isTypedMethod. Only relevant for methods. */ | |||
12101 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
12102 | }; | |||
12103 | ||||
12104 | MOZ_CAN_RUN_SCRIPT static bool | |||
12105 | passNullableCastableObjectRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
12106 | { | |||
12107 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableCastableObjectRecord"); | |||
12108 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject12111( cx, "TestExampleInterface" , "passNullableCastableObjectRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12109 | "TestExampleInterface", "passNullableCastableObjectRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject12111( cx, "TestExampleInterface" , "passNullableCastableObjectRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12110 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject12111( cx, "TestExampleInterface" , "passNullableCastableObjectRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12111 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject12111( cx, "TestExampleInterface" , "passNullableCastableObjectRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
12112 | ||||
12113 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
12114 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableCastableObjectRecord", 1)) { | |||
12115 | return false; | |||
12116 | } | |||
12117 | Record<nsString, RefPtr<mozilla::dom::TestInterface>> arg0; | |||
12118 | if (args[0].isObject()) { | |||
12119 | auto& recordEntries = arg0.Entries(); | |||
12120 | ||||
12121 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
12122 | JS::RootedVector<jsid> ids(cx); | |||
12123 | if (!js::GetPropertyKeys(cx, recordObj, | |||
12124 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12125 | return false; | |||
12126 | } | |||
12127 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12128 | JS_ReportOutOfMemory(cx); | |||
12129 | return false; | |||
12130 | } | |||
12131 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12132 | JS::Rooted<JS::Value> temp(cx); | |||
12133 | JS::Rooted<jsid> curId(cx); | |||
12134 | JS::Rooted<JS::Value> idVal(cx); | |||
12135 | // Use a hashset to keep track of ids seen, to avoid | |||
12136 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12137 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12138 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12139 | // around. | |||
12140 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12141 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12142 | curId = ids[i]; | |||
12143 | ||||
12144 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
12145 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
12146 | &desc)) { | |||
12147 | return false; | |||
12148 | } | |||
12149 | ||||
12150 | if (desc.isNothing() || !desc->enumerable()) { | |||
12151 | continue; | |||
12152 | } | |||
12153 | ||||
12154 | idVal = js::IdToValue(curId); | |||
12155 | nsString propName; | |||
12156 | // This will just throw if idVal is a Symbol, like the spec says | |||
12157 | // to do. | |||
12158 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
12159 | return false; | |||
12160 | } | |||
12161 | ||||
12162 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
12163 | return false; | |||
12164 | } | |||
12165 | ||||
12166 | Record<nsString, RefPtr<mozilla::dom::TestInterface>>::EntryType* entry; | |||
12167 | if (!idsSeen.EnsureInserted(propName)) { | |||
12168 | // Find the existing entry. | |||
12169 | auto idx = recordEntries.IndexOf(propName); | |||
12170 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12171); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12171; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
12171 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12171); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12171; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
12172 | // Now blow it away to make it look like it was just added | |||
12173 | // to the array, because it's not obvious that it's | |||
12174 | // safe to write to its already-initialized mValue via our | |||
12175 | // normal codegen conversions. For example, the value | |||
12176 | // could be a union and this would change its type, but | |||
12177 | // codegen assumes we won't do that. | |||
12178 | entry = recordEntries.ReconstructElementAt(idx); | |||
12179 | } else { | |||
12180 | // Safe to do an infallible append here, because we did a | |||
12181 | // SetCapacity above to the right capacity. | |||
12182 | entry = recordEntries.AppendElement(); | |||
12183 | } | |||
12184 | entry->mKey = propName; | |||
12185 | RefPtr<mozilla::dom::TestInterface>& slot = entry->mValue; | |||
12186 | if (temp.isObject()) { | |||
12187 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
12188 | { | |||
12189 | // Our JSContext should be in the right global to do unwrapping in. | |||
12190 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
12191 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
12192 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "TestInterface"); | |||
12193 | return false; | |||
12194 | } | |||
12195 | } | |||
12196 | } else if (temp.isNullOrUndefined()) { | |||
12197 | slot = nullptr; | |||
12198 | } else { | |||
12199 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
12200 | return false; | |||
12201 | } | |||
12202 | } | |||
12203 | } else { | |||
12204 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
12205 | return false; | |||
12206 | } | |||
12207 | // NOTE: This assert does NOT call the function. | |||
12208 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableCastableObjectRecord(Constify(arg0)))>, "Should be returning void here"); | |||
12209 | MOZ_KnownLive(self)(self)->PassNullableCastableObjectRecord(Constify(arg0)); | |||
12210 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 12210); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 12210; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
12211 | args.rval().setUndefined(); | |||
12212 | return true; | |||
12213 | } | |||
12214 | ||||
12215 | static const JSJitInfo passNullableCastableObjectRecord_methodinfo = { | |||
12216 | { (JSJitGetterOp)passNullableCastableObjectRecord }, | |||
12217 | { prototypes::id::TestExampleInterface }, | |||
12218 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
12219 | JSJitInfo::Method, | |||
12220 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
12221 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
12222 | false, /* isInfallible. False in setters. */ | |||
12223 | false, /* isMovable. Not relevant for setters. */ | |||
12224 | false, /* isEliminatable. Not relevant for setters. */ | |||
12225 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
12226 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
12227 | false, /* isTypedMethod. Only relevant for methods. */ | |||
12228 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
12229 | }; | |||
12230 | ||||
12231 | MOZ_CAN_RUN_SCRIPT static bool | |||
12232 | passCastableObjectNullableRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
12233 | { | |||
12234 | BindingCallContext cx(cx_, "TestExampleInterface.passCastableObjectNullableRecord"); | |||
12235 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject12238( cx, "TestExampleInterface" , "passCastableObjectNullableRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12236 | "TestExampleInterface", "passCastableObjectNullableRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject12238( cx, "TestExampleInterface" , "passCastableObjectNullableRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12237 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject12238( cx, "TestExampleInterface" , "passCastableObjectNullableRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12238 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject12238( cx, "TestExampleInterface" , "passCastableObjectNullableRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
12239 | ||||
12240 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
12241 | if (!args.requireAtLeast(cx, "TestExampleInterface.passCastableObjectNullableRecord", 1)) { | |||
12242 | return false; | |||
12243 | } | |||
12244 | Nullable<Record<nsString, OwningNonNull<mozilla::dom::TestInterface>>> arg0; | |||
12245 | if (args[0].isObject()) { | |||
12246 | auto& recordEntries = arg0.SetValue().Entries(); | |||
12247 | ||||
12248 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
12249 | JS::RootedVector<jsid> ids(cx); | |||
12250 | if (!js::GetPropertyKeys(cx, recordObj, | |||
12251 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12252 | return false; | |||
12253 | } | |||
12254 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12255 | JS_ReportOutOfMemory(cx); | |||
12256 | return false; | |||
12257 | } | |||
12258 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12259 | JS::Rooted<JS::Value> temp(cx); | |||
12260 | JS::Rooted<jsid> curId(cx); | |||
12261 | JS::Rooted<JS::Value> idVal(cx); | |||
12262 | // Use a hashset to keep track of ids seen, to avoid | |||
12263 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12264 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12265 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12266 | // around. | |||
12267 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12268 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12269 | curId = ids[i]; | |||
12270 | ||||
12271 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
12272 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
12273 | &desc)) { | |||
12274 | return false; | |||
12275 | } | |||
12276 | ||||
12277 | if (desc.isNothing() || !desc->enumerable()) { | |||
12278 | continue; | |||
12279 | } | |||
12280 | ||||
12281 | idVal = js::IdToValue(curId); | |||
12282 | nsString propName; | |||
12283 | // This will just throw if idVal is a Symbol, like the spec says | |||
12284 | // to do. | |||
12285 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
12286 | return false; | |||
12287 | } | |||
12288 | ||||
12289 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
12290 | return false; | |||
12291 | } | |||
12292 | ||||
12293 | Record<nsString, OwningNonNull<mozilla::dom::TestInterface>>::EntryType* entry; | |||
12294 | if (!idsSeen.EnsureInserted(propName)) { | |||
12295 | // Find the existing entry. | |||
12296 | auto idx = recordEntries.IndexOf(propName); | |||
12297 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12298); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12298; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
12298 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12298); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12298; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
12299 | // Now blow it away to make it look like it was just added | |||
12300 | // to the array, because it's not obvious that it's | |||
12301 | // safe to write to its already-initialized mValue via our | |||
12302 | // normal codegen conversions. For example, the value | |||
12303 | // could be a union and this would change its type, but | |||
12304 | // codegen assumes we won't do that. | |||
12305 | entry = recordEntries.ReconstructElementAt(idx); | |||
12306 | } else { | |||
12307 | // Safe to do an infallible append here, because we did a | |||
12308 | // SetCapacity above to the right capacity. | |||
12309 | entry = recordEntries.AppendElement(); | |||
12310 | } | |||
12311 | entry->mKey = propName; | |||
12312 | OwningNonNull<mozilla::dom::TestInterface>& slot = entry->mValue; | |||
12313 | if (temp.isObject()) { | |||
12314 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
12315 | { | |||
12316 | // Our JSContext should be in the right global to do unwrapping in. | |||
12317 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
12318 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
12319 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "TestInterface"); | |||
12320 | return false; | |||
12321 | } | |||
12322 | } | |||
12323 | } else { | |||
12324 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
12325 | return false; | |||
12326 | } | |||
12327 | } | |||
12328 | } else if (args[0].isNullOrUndefined()) { | |||
12329 | arg0.SetNull(); | |||
12330 | } else { | |||
12331 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
12332 | return false; | |||
12333 | } | |||
12334 | // NOTE: This assert does NOT call the function. | |||
12335 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassCastableObjectNullableRecord(Constify(arg0)))>, "Should be returning void here"); | |||
12336 | MOZ_KnownLive(self)(self)->PassCastableObjectNullableRecord(Constify(arg0)); | |||
12337 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 12337); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 12337; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
12338 | args.rval().setUndefined(); | |||
12339 | return true; | |||
12340 | } | |||
12341 | ||||
12342 | static const JSJitInfo passCastableObjectNullableRecord_methodinfo = { | |||
12343 | { (JSJitGetterOp)passCastableObjectNullableRecord }, | |||
12344 | { prototypes::id::TestExampleInterface }, | |||
12345 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
12346 | JSJitInfo::Method, | |||
12347 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
12348 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
12349 | false, /* isInfallible. False in setters. */ | |||
12350 | false, /* isMovable. Not relevant for setters. */ | |||
12351 | false, /* isEliminatable. Not relevant for setters. */ | |||
12352 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
12353 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
12354 | false, /* isTypedMethod. Only relevant for methods. */ | |||
12355 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
12356 | }; | |||
12357 | ||||
12358 | MOZ_CAN_RUN_SCRIPT static bool | |||
12359 | passNullableCastableObjectNullableRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
12360 | { | |||
12361 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableCastableObjectNullableRecord"); | |||
12362 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject12365( cx, "TestExampleInterface" , "passNullableCastableObjectNullableRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12363 | "TestExampleInterface", "passNullableCastableObjectNullableRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject12365( cx, "TestExampleInterface" , "passNullableCastableObjectNullableRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12364 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject12365( cx, "TestExampleInterface" , "passNullableCastableObjectNullableRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12365 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject12365( cx, "TestExampleInterface" , "passNullableCastableObjectNullableRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
12366 | ||||
12367 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
12368 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableCastableObjectNullableRecord", 1)) { | |||
12369 | return false; | |||
12370 | } | |||
12371 | Nullable<Record<nsString, RefPtr<mozilla::dom::TestInterface>>> arg0; | |||
12372 | if (args[0].isObject()) { | |||
12373 | auto& recordEntries = arg0.SetValue().Entries(); | |||
12374 | ||||
12375 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
12376 | JS::RootedVector<jsid> ids(cx); | |||
12377 | if (!js::GetPropertyKeys(cx, recordObj, | |||
12378 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12379 | return false; | |||
12380 | } | |||
12381 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12382 | JS_ReportOutOfMemory(cx); | |||
12383 | return false; | |||
12384 | } | |||
12385 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12386 | JS::Rooted<JS::Value> temp(cx); | |||
12387 | JS::Rooted<jsid> curId(cx); | |||
12388 | JS::Rooted<JS::Value> idVal(cx); | |||
12389 | // Use a hashset to keep track of ids seen, to avoid | |||
12390 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12391 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12392 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12393 | // around. | |||
12394 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12395 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12396 | curId = ids[i]; | |||
12397 | ||||
12398 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
12399 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
12400 | &desc)) { | |||
12401 | return false; | |||
12402 | } | |||
12403 | ||||
12404 | if (desc.isNothing() || !desc->enumerable()) { | |||
12405 | continue; | |||
12406 | } | |||
12407 | ||||
12408 | idVal = js::IdToValue(curId); | |||
12409 | nsString propName; | |||
12410 | // This will just throw if idVal is a Symbol, like the spec says | |||
12411 | // to do. | |||
12412 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
12413 | return false; | |||
12414 | } | |||
12415 | ||||
12416 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
12417 | return false; | |||
12418 | } | |||
12419 | ||||
12420 | Record<nsString, RefPtr<mozilla::dom::TestInterface>>::EntryType* entry; | |||
12421 | if (!idsSeen.EnsureInserted(propName)) { | |||
12422 | // Find the existing entry. | |||
12423 | auto idx = recordEntries.IndexOf(propName); | |||
12424 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12425); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12425; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
12425 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12425); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12425; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
12426 | // Now blow it away to make it look like it was just added | |||
12427 | // to the array, because it's not obvious that it's | |||
12428 | // safe to write to its already-initialized mValue via our | |||
12429 | // normal codegen conversions. For example, the value | |||
12430 | // could be a union and this would change its type, but | |||
12431 | // codegen assumes we won't do that. | |||
12432 | entry = recordEntries.ReconstructElementAt(idx); | |||
12433 | } else { | |||
12434 | // Safe to do an infallible append here, because we did a | |||
12435 | // SetCapacity above to the right capacity. | |||
12436 | entry = recordEntries.AppendElement(); | |||
12437 | } | |||
12438 | entry->mKey = propName; | |||
12439 | RefPtr<mozilla::dom::TestInterface>& slot = entry->mValue; | |||
12440 | if (temp.isObject()) { | |||
12441 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
12442 | { | |||
12443 | // Our JSContext should be in the right global to do unwrapping in. | |||
12444 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
12445 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
12446 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "TestInterface"); | |||
12447 | return false; | |||
12448 | } | |||
12449 | } | |||
12450 | } else if (temp.isNullOrUndefined()) { | |||
12451 | slot = nullptr; | |||
12452 | } else { | |||
12453 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
12454 | return false; | |||
12455 | } | |||
12456 | } | |||
12457 | } else if (args[0].isNullOrUndefined()) { | |||
12458 | arg0.SetNull(); | |||
12459 | } else { | |||
12460 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
12461 | return false; | |||
12462 | } | |||
12463 | // NOTE: This assert does NOT call the function. | |||
12464 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableCastableObjectNullableRecord(Constify(arg0)))>, "Should be returning void here"); | |||
12465 | MOZ_KnownLive(self)(self)->PassNullableCastableObjectNullableRecord(Constify(arg0)); | |||
12466 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 12466); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 12466; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
12467 | args.rval().setUndefined(); | |||
12468 | return true; | |||
12469 | } | |||
12470 | ||||
12471 | static const JSJitInfo passNullableCastableObjectNullableRecord_methodinfo = { | |||
12472 | { (JSJitGetterOp)passNullableCastableObjectNullableRecord }, | |||
12473 | { prototypes::id::TestExampleInterface }, | |||
12474 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
12475 | JSJitInfo::Method, | |||
12476 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
12477 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
12478 | false, /* isInfallible. False in setters. */ | |||
12479 | false, /* isMovable. Not relevant for setters. */ | |||
12480 | false, /* isEliminatable. Not relevant for setters. */ | |||
12481 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
12482 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
12483 | false, /* isTypedMethod. Only relevant for methods. */ | |||
12484 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
12485 | }; | |||
12486 | ||||
12487 | MOZ_CAN_RUN_SCRIPT static bool | |||
12488 | passOptionalRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
12489 | { | |||
12490 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalRecord"); | |||
12491 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject12494( cx, "TestExampleInterface" , "passOptionalRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
12492 | "TestExampleInterface", "passOptionalRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject12494( cx, "TestExampleInterface" , "passOptionalRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
12493 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject12494( cx, "TestExampleInterface" , "passOptionalRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
12494 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject12494( cx, "TestExampleInterface" , "passOptionalRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
12495 | ||||
12496 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
12497 | Optional<Record<nsString, int32_t>> arg0; | |||
12498 | if (args.hasDefined(0)) { | |||
12499 | arg0.Construct(); | |||
12500 | if (args[0].isObject()) { | |||
12501 | auto& recordEntries = arg0.Value().Entries(); | |||
12502 | ||||
12503 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
12504 | JS::RootedVector<jsid> ids(cx); | |||
12505 | if (!js::GetPropertyKeys(cx, recordObj, | |||
12506 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12507 | return false; | |||
12508 | } | |||
12509 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12510 | JS_ReportOutOfMemory(cx); | |||
12511 | return false; | |||
12512 | } | |||
12513 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12514 | JS::Rooted<JS::Value> temp(cx); | |||
12515 | JS::Rooted<jsid> curId(cx); | |||
12516 | JS::Rooted<JS::Value> idVal(cx); | |||
12517 | // Use a hashset to keep track of ids seen, to avoid | |||
12518 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12519 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12520 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12521 | // around. | |||
12522 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12523 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12524 | curId = ids[i]; | |||
12525 | ||||
12526 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
12527 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
12528 | &desc)) { | |||
12529 | return false; | |||
12530 | } | |||
12531 | ||||
12532 | if (desc.isNothing() || !desc->enumerable()) { | |||
12533 | continue; | |||
12534 | } | |||
12535 | ||||
12536 | idVal = js::IdToValue(curId); | |||
12537 | nsString propName; | |||
12538 | // This will just throw if idVal is a Symbol, like the spec says | |||
12539 | // to do. | |||
12540 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
12541 | return false; | |||
12542 | } | |||
12543 | ||||
12544 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
12545 | return false; | |||
12546 | } | |||
12547 | ||||
12548 | Record<nsString, int32_t>::EntryType* entry; | |||
12549 | if (!idsSeen.EnsureInserted(propName)) { | |||
12550 | // Find the existing entry. | |||
12551 | auto idx = recordEntries.IndexOf(propName); | |||
12552 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12553); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12553; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
12553 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12553); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12553; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
12554 | // Now blow it away to make it look like it was just added | |||
12555 | // to the array, because it's not obvious that it's | |||
12556 | // safe to write to its already-initialized mValue via our | |||
12557 | // normal codegen conversions. For example, the value | |||
12558 | // could be a union and this would change its type, but | |||
12559 | // codegen assumes we won't do that. | |||
12560 | entry = recordEntries.ReconstructElementAt(idx); | |||
12561 | } else { | |||
12562 | // Safe to do an infallible append here, because we did a | |||
12563 | // SetCapacity above to the right capacity. | |||
12564 | entry = recordEntries.AppendElement(); | |||
12565 | } | |||
12566 | entry->mKey = propName; | |||
12567 | int32_t& slot = entry->mValue; | |||
12568 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot)) { | |||
12569 | return false; | |||
12570 | } | |||
12571 | } | |||
12572 | } else { | |||
12573 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
12574 | return false; | |||
12575 | } | |||
12576 | } | |||
12577 | // NOTE: This assert does NOT call the function. | |||
12578 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalRecord(Constify(arg0)))>, "Should be returning void here"); | |||
12579 | MOZ_KnownLive(self)(self)->PassOptionalRecord(Constify(arg0)); | |||
12580 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 12580); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 12580; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
12581 | args.rval().setUndefined(); | |||
12582 | return true; | |||
12583 | } | |||
12584 | ||||
12585 | static const JSJitInfo passOptionalRecord_methodinfo = { | |||
12586 | { (JSJitGetterOp)passOptionalRecord }, | |||
12587 | { prototypes::id::TestExampleInterface }, | |||
12588 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
12589 | JSJitInfo::Method, | |||
12590 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
12591 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
12592 | false, /* isInfallible. False in setters. */ | |||
12593 | false, /* isMovable. Not relevant for setters. */ | |||
12594 | false, /* isEliminatable. Not relevant for setters. */ | |||
12595 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
12596 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
12597 | false, /* isTypedMethod. Only relevant for methods. */ | |||
12598 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
12599 | }; | |||
12600 | ||||
12601 | MOZ_CAN_RUN_SCRIPT static bool | |||
12602 | passOptionalNullableRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
12603 | { | |||
12604 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableRecord"); | |||
12605 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject12608( cx, "TestExampleInterface" , "passOptionalNullableRecord", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12606 | "TestExampleInterface", "passOptionalNullableRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject12608( cx, "TestExampleInterface" , "passOptionalNullableRecord", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12607 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject12608( cx, "TestExampleInterface" , "passOptionalNullableRecord", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12608 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject12608( cx, "TestExampleInterface" , "passOptionalNullableRecord", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
12609 | ||||
12610 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
12611 | Optional<Nullable<Record<nsString, int32_t>>> arg0; | |||
12612 | if (args.hasDefined(0)) { | |||
12613 | arg0.Construct(); | |||
12614 | if (args[0].isObject()) { | |||
12615 | auto& recordEntries = arg0.Value().SetValue().Entries(); | |||
12616 | ||||
12617 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
12618 | JS::RootedVector<jsid> ids(cx); | |||
12619 | if (!js::GetPropertyKeys(cx, recordObj, | |||
12620 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12621 | return false; | |||
12622 | } | |||
12623 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12624 | JS_ReportOutOfMemory(cx); | |||
12625 | return false; | |||
12626 | } | |||
12627 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12628 | JS::Rooted<JS::Value> temp(cx); | |||
12629 | JS::Rooted<jsid> curId(cx); | |||
12630 | JS::Rooted<JS::Value> idVal(cx); | |||
12631 | // Use a hashset to keep track of ids seen, to avoid | |||
12632 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12633 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12634 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12635 | // around. | |||
12636 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12637 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12638 | curId = ids[i]; | |||
12639 | ||||
12640 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
12641 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
12642 | &desc)) { | |||
12643 | return false; | |||
12644 | } | |||
12645 | ||||
12646 | if (desc.isNothing() || !desc->enumerable()) { | |||
12647 | continue; | |||
12648 | } | |||
12649 | ||||
12650 | idVal = js::IdToValue(curId); | |||
12651 | nsString propName; | |||
12652 | // This will just throw if idVal is a Symbol, like the spec says | |||
12653 | // to do. | |||
12654 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
12655 | return false; | |||
12656 | } | |||
12657 | ||||
12658 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
12659 | return false; | |||
12660 | } | |||
12661 | ||||
12662 | Record<nsString, int32_t>::EntryType* entry; | |||
12663 | if (!idsSeen.EnsureInserted(propName)) { | |||
12664 | // Find the existing entry. | |||
12665 | auto idx = recordEntries.IndexOf(propName); | |||
12666 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12667); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12667; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
12667 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12667); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12667; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
12668 | // Now blow it away to make it look like it was just added | |||
12669 | // to the array, because it's not obvious that it's | |||
12670 | // safe to write to its already-initialized mValue via our | |||
12671 | // normal codegen conversions. For example, the value | |||
12672 | // could be a union and this would change its type, but | |||
12673 | // codegen assumes we won't do that. | |||
12674 | entry = recordEntries.ReconstructElementAt(idx); | |||
12675 | } else { | |||
12676 | // Safe to do an infallible append here, because we did a | |||
12677 | // SetCapacity above to the right capacity. | |||
12678 | entry = recordEntries.AppendElement(); | |||
12679 | } | |||
12680 | entry->mKey = propName; | |||
12681 | int32_t& slot = entry->mValue; | |||
12682 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot)) { | |||
12683 | return false; | |||
12684 | } | |||
12685 | } | |||
12686 | } else if (args[0].isNullOrUndefined()) { | |||
12687 | arg0.Value().SetNull(); | |||
12688 | } else { | |||
12689 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
12690 | return false; | |||
12691 | } | |||
12692 | } | |||
12693 | // NOTE: This assert does NOT call the function. | |||
12694 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableRecord(Constify(arg0)))>, "Should be returning void here"); | |||
12695 | MOZ_KnownLive(self)(self)->PassOptionalNullableRecord(Constify(arg0)); | |||
12696 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 12696); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 12696; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
12697 | args.rval().setUndefined(); | |||
12698 | return true; | |||
12699 | } | |||
12700 | ||||
12701 | static const JSJitInfo passOptionalNullableRecord_methodinfo = { | |||
12702 | { (JSJitGetterOp)passOptionalNullableRecord }, | |||
12703 | { prototypes::id::TestExampleInterface }, | |||
12704 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
12705 | JSJitInfo::Method, | |||
12706 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
12707 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
12708 | false, /* isInfallible. False in setters. */ | |||
12709 | false, /* isMovable. Not relevant for setters. */ | |||
12710 | false, /* isEliminatable. Not relevant for setters. */ | |||
12711 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
12712 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
12713 | false, /* isTypedMethod. Only relevant for methods. */ | |||
12714 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
12715 | }; | |||
12716 | ||||
12717 | MOZ_CAN_RUN_SCRIPT static bool | |||
12718 | passOptionalNullableRecordWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
12719 | { | |||
12720 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableRecordWithDefaultValue"); | |||
12721 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject12724( cx, "TestExampleInterface" , "passOptionalNullableRecordWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12722 | "TestExampleInterface", "passOptionalNullableRecordWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject12724( cx, "TestExampleInterface" , "passOptionalNullableRecordWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12723 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject12724( cx, "TestExampleInterface" , "passOptionalNullableRecordWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12724 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject12724( cx, "TestExampleInterface" , "passOptionalNullableRecordWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
12725 | ||||
12726 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
12727 | Nullable<Record<nsString, int32_t>> arg0; | |||
12728 | if (args.hasDefined(0)) { | |||
12729 | if (args[0].isObject()) { | |||
12730 | auto& recordEntries = arg0.SetValue().Entries(); | |||
12731 | ||||
12732 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
12733 | JS::RootedVector<jsid> ids(cx); | |||
12734 | if (!js::GetPropertyKeys(cx, recordObj, | |||
12735 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12736 | return false; | |||
12737 | } | |||
12738 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12739 | JS_ReportOutOfMemory(cx); | |||
12740 | return false; | |||
12741 | } | |||
12742 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12743 | JS::Rooted<JS::Value> temp(cx); | |||
12744 | JS::Rooted<jsid> curId(cx); | |||
12745 | JS::Rooted<JS::Value> idVal(cx); | |||
12746 | // Use a hashset to keep track of ids seen, to avoid | |||
12747 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12748 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12749 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12750 | // around. | |||
12751 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12752 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12753 | curId = ids[i]; | |||
12754 | ||||
12755 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
12756 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
12757 | &desc)) { | |||
12758 | return false; | |||
12759 | } | |||
12760 | ||||
12761 | if (desc.isNothing() || !desc->enumerable()) { | |||
12762 | continue; | |||
12763 | } | |||
12764 | ||||
12765 | idVal = js::IdToValue(curId); | |||
12766 | nsString propName; | |||
12767 | // This will just throw if idVal is a Symbol, like the spec says | |||
12768 | // to do. | |||
12769 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
12770 | return false; | |||
12771 | } | |||
12772 | ||||
12773 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
12774 | return false; | |||
12775 | } | |||
12776 | ||||
12777 | Record<nsString, int32_t>::EntryType* entry; | |||
12778 | if (!idsSeen.EnsureInserted(propName)) { | |||
12779 | // Find the existing entry. | |||
12780 | auto idx = recordEntries.IndexOf(propName); | |||
12781 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12782); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12782; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
12782 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12782); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12782; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
12783 | // Now blow it away to make it look like it was just added | |||
12784 | // to the array, because it's not obvious that it's | |||
12785 | // safe to write to its already-initialized mValue via our | |||
12786 | // normal codegen conversions. For example, the value | |||
12787 | // could be a union and this would change its type, but | |||
12788 | // codegen assumes we won't do that. | |||
12789 | entry = recordEntries.ReconstructElementAt(idx); | |||
12790 | } else { | |||
12791 | // Safe to do an infallible append here, because we did a | |||
12792 | // SetCapacity above to the right capacity. | |||
12793 | entry = recordEntries.AppendElement(); | |||
12794 | } | |||
12795 | entry->mKey = propName; | |||
12796 | int32_t& slot = entry->mValue; | |||
12797 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot)) { | |||
12798 | return false; | |||
12799 | } | |||
12800 | } | |||
12801 | } else if (args[0].isNullOrUndefined()) { | |||
12802 | arg0.SetNull(); | |||
12803 | } else { | |||
12804 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
12805 | return false; | |||
12806 | } | |||
12807 | } else { | |||
12808 | arg0.SetNull(); | |||
12809 | } | |||
12810 | // NOTE: This assert does NOT call the function. | |||
12811 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableRecordWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
12812 | MOZ_KnownLive(self)(self)->PassOptionalNullableRecordWithDefaultValue(Constify(arg0)); | |||
12813 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 12813); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 12813; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
12814 | args.rval().setUndefined(); | |||
12815 | return true; | |||
12816 | } | |||
12817 | ||||
12818 | static const JSJitInfo passOptionalNullableRecordWithDefaultValue_methodinfo = { | |||
12819 | { (JSJitGetterOp)passOptionalNullableRecordWithDefaultValue }, | |||
12820 | { prototypes::id::TestExampleInterface }, | |||
12821 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
12822 | JSJitInfo::Method, | |||
12823 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
12824 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
12825 | false, /* isInfallible. False in setters. */ | |||
12826 | false, /* isMovable. Not relevant for setters. */ | |||
12827 | false, /* isEliminatable. Not relevant for setters. */ | |||
12828 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
12829 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
12830 | false, /* isTypedMethod. Only relevant for methods. */ | |||
12831 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
12832 | }; | |||
12833 | ||||
12834 | MOZ_CAN_RUN_SCRIPT static bool | |||
12835 | passOptionalObjectRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
12836 | { | |||
12837 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalObjectRecord"); | |||
12838 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject12841( cx, "TestExampleInterface" , "passOptionalObjectRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12839 | "TestExampleInterface", "passOptionalObjectRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject12841( cx, "TestExampleInterface" , "passOptionalObjectRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12840 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject12841( cx, "TestExampleInterface" , "passOptionalObjectRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12841 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject12841( cx, "TestExampleInterface" , "passOptionalObjectRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
12842 | ||||
12843 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
12844 | Optional<Record<nsString, OwningNonNull<mozilla::dom::TestInterface>>> arg0; | |||
12845 | if (args.hasDefined(0)) { | |||
12846 | arg0.Construct(); | |||
12847 | if (args[0].isObject()) { | |||
12848 | auto& recordEntries = arg0.Value().Entries(); | |||
12849 | ||||
12850 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
12851 | JS::RootedVector<jsid> ids(cx); | |||
12852 | if (!js::GetPropertyKeys(cx, recordObj, | |||
12853 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12854 | return false; | |||
12855 | } | |||
12856 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12857 | JS_ReportOutOfMemory(cx); | |||
12858 | return false; | |||
12859 | } | |||
12860 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12861 | JS::Rooted<JS::Value> temp(cx); | |||
12862 | JS::Rooted<jsid> curId(cx); | |||
12863 | JS::Rooted<JS::Value> idVal(cx); | |||
12864 | // Use a hashset to keep track of ids seen, to avoid | |||
12865 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12866 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12867 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12868 | // around. | |||
12869 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12870 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12871 | curId = ids[i]; | |||
12872 | ||||
12873 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
12874 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
12875 | &desc)) { | |||
12876 | return false; | |||
12877 | } | |||
12878 | ||||
12879 | if (desc.isNothing() || !desc->enumerable()) { | |||
12880 | continue; | |||
12881 | } | |||
12882 | ||||
12883 | idVal = js::IdToValue(curId); | |||
12884 | nsString propName; | |||
12885 | // This will just throw if idVal is a Symbol, like the spec says | |||
12886 | // to do. | |||
12887 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
12888 | return false; | |||
12889 | } | |||
12890 | ||||
12891 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
12892 | return false; | |||
12893 | } | |||
12894 | ||||
12895 | Record<nsString, OwningNonNull<mozilla::dom::TestInterface>>::EntryType* entry; | |||
12896 | if (!idsSeen.EnsureInserted(propName)) { | |||
12897 | // Find the existing entry. | |||
12898 | auto idx = recordEntries.IndexOf(propName); | |||
12899 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12900); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12900; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
12900 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 12900); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 12900; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
12901 | // Now blow it away to make it look like it was just added | |||
12902 | // to the array, because it's not obvious that it's | |||
12903 | // safe to write to its already-initialized mValue via our | |||
12904 | // normal codegen conversions. For example, the value | |||
12905 | // could be a union and this would change its type, but | |||
12906 | // codegen assumes we won't do that. | |||
12907 | entry = recordEntries.ReconstructElementAt(idx); | |||
12908 | } else { | |||
12909 | // Safe to do an infallible append here, because we did a | |||
12910 | // SetCapacity above to the right capacity. | |||
12911 | entry = recordEntries.AppendElement(); | |||
12912 | } | |||
12913 | entry->mKey = propName; | |||
12914 | OwningNonNull<mozilla::dom::TestInterface>& slot = entry->mValue; | |||
12915 | if (temp.isObject()) { | |||
12916 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
12917 | { | |||
12918 | // Our JSContext should be in the right global to do unwrapping in. | |||
12919 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
12920 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
12921 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "TestInterface"); | |||
12922 | return false; | |||
12923 | } | |||
12924 | } | |||
12925 | } else { | |||
12926 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
12927 | return false; | |||
12928 | } | |||
12929 | } | |||
12930 | } else { | |||
12931 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
12932 | return false; | |||
12933 | } | |||
12934 | } | |||
12935 | // NOTE: This assert does NOT call the function. | |||
12936 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalObjectRecord(Constify(arg0)))>, "Should be returning void here"); | |||
12937 | MOZ_KnownLive(self)(self)->PassOptionalObjectRecord(Constify(arg0)); | |||
12938 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 12938); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 12938; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
12939 | args.rval().setUndefined(); | |||
12940 | return true; | |||
12941 | } | |||
12942 | ||||
12943 | static const JSJitInfo passOptionalObjectRecord_methodinfo = { | |||
12944 | { (JSJitGetterOp)passOptionalObjectRecord }, | |||
12945 | { prototypes::id::TestExampleInterface }, | |||
12946 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
12947 | JSJitInfo::Method, | |||
12948 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
12949 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
12950 | false, /* isInfallible. False in setters. */ | |||
12951 | false, /* isMovable. Not relevant for setters. */ | |||
12952 | false, /* isEliminatable. Not relevant for setters. */ | |||
12953 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
12954 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
12955 | false, /* isTypedMethod. Only relevant for methods. */ | |||
12956 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
12957 | }; | |||
12958 | ||||
12959 | MOZ_CAN_RUN_SCRIPT static bool | |||
12960 | passExternalInterfaceRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
12961 | { | |||
12962 | BindingCallContext cx(cx_, "TestExampleInterface.passExternalInterfaceRecord"); | |||
12963 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject12966( cx, "TestExampleInterface" , "passExternalInterfaceRecord", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12964 | "TestExampleInterface", "passExternalInterfaceRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject12966( cx, "TestExampleInterface" , "passExternalInterfaceRecord", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12965 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject12966( cx, "TestExampleInterface" , "passExternalInterfaceRecord", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
12966 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject12966( cx, "TestExampleInterface" , "passExternalInterfaceRecord", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
12967 | ||||
12968 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
12969 | if (!args.requireAtLeast(cx, "TestExampleInterface.passExternalInterfaceRecord", 1)) { | |||
12970 | return false; | |||
12971 | } | |||
12972 | Record<nsString, RefPtr<mozilla::dom::TestExternalInterface>> arg0; | |||
12973 | if (args[0].isObject()) { | |||
12974 | auto& recordEntries = arg0.Entries(); | |||
12975 | ||||
12976 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
12977 | JS::RootedVector<jsid> ids(cx); | |||
12978 | if (!js::GetPropertyKeys(cx, recordObj, | |||
12979 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
12980 | return false; | |||
12981 | } | |||
12982 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
12983 | JS_ReportOutOfMemory(cx); | |||
12984 | return false; | |||
12985 | } | |||
12986 | JS::Rooted<JS::Value> propNameValue(cx); | |||
12987 | JS::Rooted<JS::Value> temp(cx); | |||
12988 | JS::Rooted<jsid> curId(cx); | |||
12989 | JS::Rooted<JS::Value> idVal(cx); | |||
12990 | // Use a hashset to keep track of ids seen, to avoid | |||
12991 | // introducing nasty O(N^2) behavior scanning for them all the | |||
12992 | // time. Ideally we'd use a data structure with O(1) lookup | |||
12993 | // _and_ ordering for the MozMap, but we don't have one lying | |||
12994 | // around. | |||
12995 | nsTHashtable<nsStringHashKey> idsSeen; | |||
12996 | for (size_t i = 0; i < ids.length(); ++i) { | |||
12997 | curId = ids[i]; | |||
12998 | ||||
12999 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
13000 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
13001 | &desc)) { | |||
13002 | return false; | |||
13003 | } | |||
13004 | ||||
13005 | if (desc.isNothing() || !desc->enumerable()) { | |||
13006 | continue; | |||
13007 | } | |||
13008 | ||||
13009 | idVal = js::IdToValue(curId); | |||
13010 | nsString propName; | |||
13011 | // This will just throw if idVal is a Symbol, like the spec says | |||
13012 | // to do. | |||
13013 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
13014 | return false; | |||
13015 | } | |||
13016 | ||||
13017 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
13018 | return false; | |||
13019 | } | |||
13020 | ||||
13021 | Record<nsString, RefPtr<mozilla::dom::TestExternalInterface>>::EntryType* entry; | |||
13022 | if (!idsSeen.EnsureInserted(propName)) { | |||
13023 | // Find the existing entry. | |||
13024 | auto idx = recordEntries.IndexOf(propName); | |||
13025 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13026); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13026; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
13026 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13026); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13026; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13027 | // Now blow it away to make it look like it was just added | |||
13028 | // to the array, because it's not obvious that it's | |||
13029 | // safe to write to its already-initialized mValue via our | |||
13030 | // normal codegen conversions. For example, the value | |||
13031 | // could be a union and this would change its type, but | |||
13032 | // codegen assumes we won't do that. | |||
13033 | entry = recordEntries.ReconstructElementAt(idx); | |||
13034 | } else { | |||
13035 | // Safe to do an infallible append here, because we did a | |||
13036 | // SetCapacity above to the right capacity. | |||
13037 | entry = recordEntries.AppendElement(); | |||
13038 | } | |||
13039 | entry->mKey = propName; | |||
13040 | RefPtr<mozilla::dom::TestExternalInterface>& slot = entry->mValue; | |||
13041 | if (temp.isObject()) { | |||
13042 | static_assert(IsRefcounted<mozilla::dom::TestExternalInterface>::value, "We can only store refcounted classes."); | |||
13043 | RefPtr<mozilla::dom::TestExternalInterface> tempHolder; | |||
13044 | JS::Rooted<JSObject*> source(cx, &temp.toObject()); | |||
13045 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(tempHolder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(tempHolder )))), 0)))) { | |||
13046 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "TestExternalInterface"); | |||
13047 | return false; | |||
13048 | } | |||
13049 | MOZ_ASSERT(tempHolder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(tempHolder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(tempHolder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("tempHolder", "../TestExampleGenBinding.cpp" , 13049); AnnotateMozCrashReason("MOZ_ASSERT" "(" "tempHolder" ")"); do { *((volatile int*)__null) = 13049; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13050 | slot = tempHolder; | |||
13051 | } else { | |||
13052 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
13053 | return false; | |||
13054 | } | |||
13055 | } | |||
13056 | } else { | |||
13057 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
13058 | return false; | |||
13059 | } | |||
13060 | // NOTE: This assert does NOT call the function. | |||
13061 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassExternalInterfaceRecord(Constify(arg0)))>, "Should be returning void here"); | |||
13062 | MOZ_KnownLive(self)(self)->PassExternalInterfaceRecord(Constify(arg0)); | |||
13063 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13063); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13063; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13064 | args.rval().setUndefined(); | |||
13065 | return true; | |||
13066 | } | |||
13067 | ||||
13068 | static const JSJitInfo passExternalInterfaceRecord_methodinfo = { | |||
13069 | { (JSJitGetterOp)passExternalInterfaceRecord }, | |||
13070 | { prototypes::id::TestExampleInterface }, | |||
13071 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13072 | JSJitInfo::Method, | |||
13073 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13074 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
13075 | false, /* isInfallible. False in setters. */ | |||
13076 | false, /* isMovable. Not relevant for setters. */ | |||
13077 | false, /* isEliminatable. Not relevant for setters. */ | |||
13078 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13079 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13080 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13081 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13082 | }; | |||
13083 | ||||
13084 | MOZ_CAN_RUN_SCRIPT static bool | |||
13085 | passNullableExternalInterfaceRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13086 | { | |||
13087 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableExternalInterfaceRecord"); | |||
13088 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13091( cx, "TestExampleInterface" , "passNullableExternalInterfaceRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13089 | "TestExampleInterface", "passNullableExternalInterfaceRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13091( cx, "TestExampleInterface" , "passNullableExternalInterfaceRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13090 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13091( cx, "TestExampleInterface" , "passNullableExternalInterfaceRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13091 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13091( cx, "TestExampleInterface" , "passNullableExternalInterfaceRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
13092 | ||||
13093 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13094 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableExternalInterfaceRecord", 1)) { | |||
13095 | return false; | |||
13096 | } | |||
13097 | Record<nsString, RefPtr<mozilla::dom::TestExternalInterface>> arg0; | |||
13098 | if (args[0].isObject()) { | |||
13099 | auto& recordEntries = arg0.Entries(); | |||
13100 | ||||
13101 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
13102 | JS::RootedVector<jsid> ids(cx); | |||
13103 | if (!js::GetPropertyKeys(cx, recordObj, | |||
13104 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
13105 | return false; | |||
13106 | } | |||
13107 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
13108 | JS_ReportOutOfMemory(cx); | |||
13109 | return false; | |||
13110 | } | |||
13111 | JS::Rooted<JS::Value> propNameValue(cx); | |||
13112 | JS::Rooted<JS::Value> temp(cx); | |||
13113 | JS::Rooted<jsid> curId(cx); | |||
13114 | JS::Rooted<JS::Value> idVal(cx); | |||
13115 | // Use a hashset to keep track of ids seen, to avoid | |||
13116 | // introducing nasty O(N^2) behavior scanning for them all the | |||
13117 | // time. Ideally we'd use a data structure with O(1) lookup | |||
13118 | // _and_ ordering for the MozMap, but we don't have one lying | |||
13119 | // around. | |||
13120 | nsTHashtable<nsStringHashKey> idsSeen; | |||
13121 | for (size_t i = 0; i < ids.length(); ++i) { | |||
13122 | curId = ids[i]; | |||
13123 | ||||
13124 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
13125 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
13126 | &desc)) { | |||
13127 | return false; | |||
13128 | } | |||
13129 | ||||
13130 | if (desc.isNothing() || !desc->enumerable()) { | |||
13131 | continue; | |||
13132 | } | |||
13133 | ||||
13134 | idVal = js::IdToValue(curId); | |||
13135 | nsString propName; | |||
13136 | // This will just throw if idVal is a Symbol, like the spec says | |||
13137 | // to do. | |||
13138 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
13139 | return false; | |||
13140 | } | |||
13141 | ||||
13142 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
13143 | return false; | |||
13144 | } | |||
13145 | ||||
13146 | Record<nsString, RefPtr<mozilla::dom::TestExternalInterface>>::EntryType* entry; | |||
13147 | if (!idsSeen.EnsureInserted(propName)) { | |||
13148 | // Find the existing entry. | |||
13149 | auto idx = recordEntries.IndexOf(propName); | |||
13150 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13151); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13151; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
13151 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13151); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13151; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13152 | // Now blow it away to make it look like it was just added | |||
13153 | // to the array, because it's not obvious that it's | |||
13154 | // safe to write to its already-initialized mValue via our | |||
13155 | // normal codegen conversions. For example, the value | |||
13156 | // could be a union and this would change its type, but | |||
13157 | // codegen assumes we won't do that. | |||
13158 | entry = recordEntries.ReconstructElementAt(idx); | |||
13159 | } else { | |||
13160 | // Safe to do an infallible append here, because we did a | |||
13161 | // SetCapacity above to the right capacity. | |||
13162 | entry = recordEntries.AppendElement(); | |||
13163 | } | |||
13164 | entry->mKey = propName; | |||
13165 | RefPtr<mozilla::dom::TestExternalInterface>& slot = entry->mValue; | |||
13166 | if (temp.isObject()) { | |||
13167 | static_assert(IsRefcounted<mozilla::dom::TestExternalInterface>::value, "We can only store refcounted classes."); | |||
13168 | RefPtr<mozilla::dom::TestExternalInterface> tempHolder; | |||
13169 | JS::Rooted<JSObject*> source(cx, &temp.toObject()); | |||
13170 | if (NS_FAILED(UnwrapArg<mozilla::dom::TestExternalInterface>(cx, source, getter_AddRefs(tempHolder)))((bool)(__builtin_expect(!!(NS_FAILED_impl(UnwrapArg<mozilla ::dom::TestExternalInterface>(cx, source, getter_AddRefs(tempHolder )))), 0)))) { | |||
13171 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "TestExternalInterface"); | |||
13172 | return false; | |||
13173 | } | |||
13174 | MOZ_ASSERT(tempHolder)do { static_assert( mozilla::detail::AssertionConditionType< decltype(tempHolder)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(tempHolder))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("tempHolder", "../TestExampleGenBinding.cpp" , 13174); AnnotateMozCrashReason("MOZ_ASSERT" "(" "tempHolder" ")"); do { *((volatile int*)__null) = 13174; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13175 | slot = tempHolder; | |||
13176 | } else if (temp.isNullOrUndefined()) { | |||
13177 | slot = nullptr; | |||
13178 | } else { | |||
13179 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
13180 | return false; | |||
13181 | } | |||
13182 | } | |||
13183 | } else { | |||
13184 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
13185 | return false; | |||
13186 | } | |||
13187 | // NOTE: This assert does NOT call the function. | |||
13188 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableExternalInterfaceRecord(Constify(arg0)))>, "Should be returning void here"); | |||
13189 | MOZ_KnownLive(self)(self)->PassNullableExternalInterfaceRecord(Constify(arg0)); | |||
13190 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13190); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13190; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13191 | args.rval().setUndefined(); | |||
13192 | return true; | |||
13193 | } | |||
13194 | ||||
13195 | static const JSJitInfo passNullableExternalInterfaceRecord_methodinfo = { | |||
13196 | { (JSJitGetterOp)passNullableExternalInterfaceRecord }, | |||
13197 | { prototypes::id::TestExampleInterface }, | |||
13198 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13199 | JSJitInfo::Method, | |||
13200 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13201 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
13202 | false, /* isInfallible. False in setters. */ | |||
13203 | false, /* isMovable. Not relevant for setters. */ | |||
13204 | false, /* isEliminatable. Not relevant for setters. */ | |||
13205 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13206 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13207 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13208 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13209 | }; | |||
13210 | ||||
13211 | MOZ_CAN_RUN_SCRIPT static bool | |||
13212 | passStringRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13213 | { | |||
13214 | BindingCallContext cx(cx_, "TestExampleInterface.passStringRecord"); | |||
13215 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13218( cx, "TestExampleInterface" , "passStringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13216 | "TestExampleInterface", "passStringRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13218( cx, "TestExampleInterface" , "passStringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13217 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13218( cx, "TestExampleInterface" , "passStringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13218 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13218( cx, "TestExampleInterface" , "passStringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
13219 | ||||
13220 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13221 | if (!args.requireAtLeast(cx, "TestExampleInterface.passStringRecord", 1)) { | |||
13222 | return false; | |||
13223 | } | |||
13224 | Record<nsString, nsString> arg0; | |||
13225 | if (args[0].isObject()) { | |||
13226 | auto& recordEntries = arg0.Entries(); | |||
13227 | ||||
13228 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
13229 | JS::RootedVector<jsid> ids(cx); | |||
13230 | if (!js::GetPropertyKeys(cx, recordObj, | |||
13231 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
13232 | return false; | |||
13233 | } | |||
13234 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
13235 | JS_ReportOutOfMemory(cx); | |||
13236 | return false; | |||
13237 | } | |||
13238 | JS::Rooted<JS::Value> propNameValue(cx); | |||
13239 | JS::Rooted<JS::Value> temp(cx); | |||
13240 | JS::Rooted<jsid> curId(cx); | |||
13241 | JS::Rooted<JS::Value> idVal(cx); | |||
13242 | // Use a hashset to keep track of ids seen, to avoid | |||
13243 | // introducing nasty O(N^2) behavior scanning for them all the | |||
13244 | // time. Ideally we'd use a data structure with O(1) lookup | |||
13245 | // _and_ ordering for the MozMap, but we don't have one lying | |||
13246 | // around. | |||
13247 | nsTHashtable<nsStringHashKey> idsSeen; | |||
13248 | for (size_t i = 0; i < ids.length(); ++i) { | |||
13249 | curId = ids[i]; | |||
13250 | ||||
13251 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
13252 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
13253 | &desc)) { | |||
13254 | return false; | |||
13255 | } | |||
13256 | ||||
13257 | if (desc.isNothing() || !desc->enumerable()) { | |||
13258 | continue; | |||
13259 | } | |||
13260 | ||||
13261 | idVal = js::IdToValue(curId); | |||
13262 | nsString propName; | |||
13263 | // This will just throw if idVal is a Symbol, like the spec says | |||
13264 | // to do. | |||
13265 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
13266 | return false; | |||
13267 | } | |||
13268 | ||||
13269 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
13270 | return false; | |||
13271 | } | |||
13272 | ||||
13273 | Record<nsString, nsString>::EntryType* entry; | |||
13274 | if (!idsSeen.EnsureInserted(propName)) { | |||
13275 | // Find the existing entry. | |||
13276 | auto idx = recordEntries.IndexOf(propName); | |||
13277 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13278); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13278; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
13278 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13278); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13278; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13279 | // Now blow it away to make it look like it was just added | |||
13280 | // to the array, because it's not obvious that it's | |||
13281 | // safe to write to its already-initialized mValue via our | |||
13282 | // normal codegen conversions. For example, the value | |||
13283 | // could be a union and this would change its type, but | |||
13284 | // codegen assumes we won't do that. | |||
13285 | entry = recordEntries.ReconstructElementAt(idx); | |||
13286 | } else { | |||
13287 | // Safe to do an infallible append here, because we did a | |||
13288 | // SetCapacity above to the right capacity. | |||
13289 | entry = recordEntries.AppendElement(); | |||
13290 | } | |||
13291 | entry->mKey = propName; | |||
13292 | nsString& slot = entry->mValue; | |||
13293 | if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) { | |||
13294 | return false; | |||
13295 | } | |||
13296 | } | |||
13297 | } else { | |||
13298 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
13299 | return false; | |||
13300 | } | |||
13301 | // NOTE: This assert does NOT call the function. | |||
13302 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassStringRecord(Constify(arg0)))>, "Should be returning void here"); | |||
13303 | MOZ_KnownLive(self)(self)->PassStringRecord(Constify(arg0)); | |||
13304 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13304); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13304; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13305 | args.rval().setUndefined(); | |||
13306 | return true; | |||
13307 | } | |||
13308 | ||||
13309 | static const JSJitInfo passStringRecord_methodinfo = { | |||
13310 | { (JSJitGetterOp)passStringRecord }, | |||
13311 | { prototypes::id::TestExampleInterface }, | |||
13312 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13313 | JSJitInfo::Method, | |||
13314 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13315 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
13316 | false, /* isInfallible. False in setters. */ | |||
13317 | false, /* isMovable. Not relevant for setters. */ | |||
13318 | false, /* isEliminatable. Not relevant for setters. */ | |||
13319 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13320 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13321 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13322 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13323 | }; | |||
13324 | ||||
13325 | MOZ_CAN_RUN_SCRIPT static bool | |||
13326 | passByteStringRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13327 | { | |||
13328 | BindingCallContext cx(cx_, "TestExampleInterface.passByteStringRecord"); | |||
13329 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13332( cx, "TestExampleInterface" , "passByteStringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13330 | "TestExampleInterface", "passByteStringRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13332( cx, "TestExampleInterface" , "passByteStringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13331 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13332( cx, "TestExampleInterface" , "passByteStringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13332 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13332( cx, "TestExampleInterface" , "passByteStringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
13333 | ||||
13334 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13335 | if (!args.requireAtLeast(cx, "TestExampleInterface.passByteStringRecord", 1)) { | |||
13336 | return false; | |||
13337 | } | |||
13338 | Record<nsString, nsCString> arg0; | |||
13339 | if (args[0].isObject()) { | |||
13340 | auto& recordEntries = arg0.Entries(); | |||
13341 | ||||
13342 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
13343 | JS::RootedVector<jsid> ids(cx); | |||
13344 | if (!js::GetPropertyKeys(cx, recordObj, | |||
13345 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
13346 | return false; | |||
13347 | } | |||
13348 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
13349 | JS_ReportOutOfMemory(cx); | |||
13350 | return false; | |||
13351 | } | |||
13352 | JS::Rooted<JS::Value> propNameValue(cx); | |||
13353 | JS::Rooted<JS::Value> temp(cx); | |||
13354 | JS::Rooted<jsid> curId(cx); | |||
13355 | JS::Rooted<JS::Value> idVal(cx); | |||
13356 | // Use a hashset to keep track of ids seen, to avoid | |||
13357 | // introducing nasty O(N^2) behavior scanning for them all the | |||
13358 | // time. Ideally we'd use a data structure with O(1) lookup | |||
13359 | // _and_ ordering for the MozMap, but we don't have one lying | |||
13360 | // around. | |||
13361 | nsTHashtable<nsStringHashKey> idsSeen; | |||
13362 | for (size_t i = 0; i < ids.length(); ++i) { | |||
13363 | curId = ids[i]; | |||
13364 | ||||
13365 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
13366 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
13367 | &desc)) { | |||
13368 | return false; | |||
13369 | } | |||
13370 | ||||
13371 | if (desc.isNothing() || !desc->enumerable()) { | |||
13372 | continue; | |||
13373 | } | |||
13374 | ||||
13375 | idVal = js::IdToValue(curId); | |||
13376 | nsString propName; | |||
13377 | // This will just throw if idVal is a Symbol, like the spec says | |||
13378 | // to do. | |||
13379 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
13380 | return false; | |||
13381 | } | |||
13382 | ||||
13383 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
13384 | return false; | |||
13385 | } | |||
13386 | ||||
13387 | Record<nsString, nsCString>::EntryType* entry; | |||
13388 | if (!idsSeen.EnsureInserted(propName)) { | |||
13389 | // Find the existing entry. | |||
13390 | auto idx = recordEntries.IndexOf(propName); | |||
13391 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13392); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13392; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
13392 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13392); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13392; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13393 | // Now blow it away to make it look like it was just added | |||
13394 | // to the array, because it's not obvious that it's | |||
13395 | // safe to write to its already-initialized mValue via our | |||
13396 | // normal codegen conversions. For example, the value | |||
13397 | // could be a union and this would change its type, but | |||
13398 | // codegen assumes we won't do that. | |||
13399 | entry = recordEntries.ReconstructElementAt(idx); | |||
13400 | } else { | |||
13401 | // Safe to do an infallible append here, because we did a | |||
13402 | // SetCapacity above to the right capacity. | |||
13403 | entry = recordEntries.AppendElement(); | |||
13404 | } | |||
13405 | entry->mKey = propName; | |||
13406 | nsCString& slot = entry->mValue; | |||
13407 | if (!ConvertJSValueToByteString(cx, temp, false, "value in argument 1", slot)) { | |||
13408 | return false; | |||
13409 | } | |||
13410 | } | |||
13411 | } else { | |||
13412 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
13413 | return false; | |||
13414 | } | |||
13415 | // NOTE: This assert does NOT call the function. | |||
13416 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassByteStringRecord(Constify(arg0)))>, "Should be returning void here"); | |||
13417 | MOZ_KnownLive(self)(self)->PassByteStringRecord(Constify(arg0)); | |||
13418 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13418); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13418; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13419 | args.rval().setUndefined(); | |||
13420 | return true; | |||
13421 | } | |||
13422 | ||||
13423 | static const JSJitInfo passByteStringRecord_methodinfo = { | |||
13424 | { (JSJitGetterOp)passByteStringRecord }, | |||
13425 | { prototypes::id::TestExampleInterface }, | |||
13426 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13427 | JSJitInfo::Method, | |||
13428 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13429 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
13430 | false, /* isInfallible. False in setters. */ | |||
13431 | false, /* isMovable. Not relevant for setters. */ | |||
13432 | false, /* isEliminatable. Not relevant for setters. */ | |||
13433 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13434 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13435 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13436 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13437 | }; | |||
13438 | ||||
13439 | MOZ_CAN_RUN_SCRIPT static bool | |||
13440 | passUTF8StringRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13441 | { | |||
13442 | BindingCallContext cx(cx_, "TestExampleInterface.passUTF8StringRecord"); | |||
13443 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13446( cx, "TestExampleInterface" , "passUTF8StringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13444 | "TestExampleInterface", "passUTF8StringRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13446( cx, "TestExampleInterface" , "passUTF8StringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13445 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13446( cx, "TestExampleInterface" , "passUTF8StringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13446 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13446( cx, "TestExampleInterface" , "passUTF8StringRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
13447 | ||||
13448 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13449 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUTF8StringRecord", 1)) { | |||
13450 | return false; | |||
13451 | } | |||
13452 | Record<nsString, nsCString> arg0; | |||
13453 | if (args[0].isObject()) { | |||
13454 | auto& recordEntries = arg0.Entries(); | |||
13455 | ||||
13456 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
13457 | JS::RootedVector<jsid> ids(cx); | |||
13458 | if (!js::GetPropertyKeys(cx, recordObj, | |||
13459 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
13460 | return false; | |||
13461 | } | |||
13462 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
13463 | JS_ReportOutOfMemory(cx); | |||
13464 | return false; | |||
13465 | } | |||
13466 | JS::Rooted<JS::Value> propNameValue(cx); | |||
13467 | JS::Rooted<JS::Value> temp(cx); | |||
13468 | JS::Rooted<jsid> curId(cx); | |||
13469 | JS::Rooted<JS::Value> idVal(cx); | |||
13470 | // Use a hashset to keep track of ids seen, to avoid | |||
13471 | // introducing nasty O(N^2) behavior scanning for them all the | |||
13472 | // time. Ideally we'd use a data structure with O(1) lookup | |||
13473 | // _and_ ordering for the MozMap, but we don't have one lying | |||
13474 | // around. | |||
13475 | nsTHashtable<nsStringHashKey> idsSeen; | |||
13476 | for (size_t i = 0; i < ids.length(); ++i) { | |||
13477 | curId = ids[i]; | |||
13478 | ||||
13479 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
13480 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
13481 | &desc)) { | |||
13482 | return false; | |||
13483 | } | |||
13484 | ||||
13485 | if (desc.isNothing() || !desc->enumerable()) { | |||
13486 | continue; | |||
13487 | } | |||
13488 | ||||
13489 | idVal = js::IdToValue(curId); | |||
13490 | nsString propName; | |||
13491 | // This will just throw if idVal is a Symbol, like the spec says | |||
13492 | // to do. | |||
13493 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
13494 | return false; | |||
13495 | } | |||
13496 | ||||
13497 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
13498 | return false; | |||
13499 | } | |||
13500 | ||||
13501 | Record<nsString, nsCString>::EntryType* entry; | |||
13502 | if (!idsSeen.EnsureInserted(propName)) { | |||
13503 | // Find the existing entry. | |||
13504 | auto idx = recordEntries.IndexOf(propName); | |||
13505 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13506); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13506; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
13506 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13506); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13506; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13507 | // Now blow it away to make it look like it was just added | |||
13508 | // to the array, because it's not obvious that it's | |||
13509 | // safe to write to its already-initialized mValue via our | |||
13510 | // normal codegen conversions. For example, the value | |||
13511 | // could be a union and this would change its type, but | |||
13512 | // codegen assumes we won't do that. | |||
13513 | entry = recordEntries.ReconstructElementAt(idx); | |||
13514 | } else { | |||
13515 | // Safe to do an infallible append here, because we did a | |||
13516 | // SetCapacity above to the right capacity. | |||
13517 | entry = recordEntries.AppendElement(); | |||
13518 | } | |||
13519 | entry->mKey = propName; | |||
13520 | nsCString& slot = entry->mValue; | |||
13521 | if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) { | |||
13522 | return false; | |||
13523 | } | |||
13524 | } | |||
13525 | } else { | |||
13526 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
13527 | return false; | |||
13528 | } | |||
13529 | // NOTE: This assert does NOT call the function. | |||
13530 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUTF8StringRecord(Constify(arg0)))>, "Should be returning void here"); | |||
13531 | MOZ_KnownLive(self)(self)->PassUTF8StringRecord(Constify(arg0)); | |||
13532 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13532); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13532; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13533 | args.rval().setUndefined(); | |||
13534 | return true; | |||
13535 | } | |||
13536 | ||||
13537 | static const JSJitInfo passUTF8StringRecord_methodinfo = { | |||
13538 | { (JSJitGetterOp)passUTF8StringRecord }, | |||
13539 | { prototypes::id::TestExampleInterface }, | |||
13540 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13541 | JSJitInfo::Method, | |||
13542 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13543 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
13544 | false, /* isInfallible. False in setters. */ | |||
13545 | false, /* isMovable. Not relevant for setters. */ | |||
13546 | false, /* isEliminatable. Not relevant for setters. */ | |||
13547 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13548 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13549 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13550 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13551 | }; | |||
13552 | ||||
13553 | MOZ_CAN_RUN_SCRIPT static bool | |||
13554 | passRecordOfRecords(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13555 | { | |||
13556 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfRecords"); | |||
13557 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13560( cx, "TestExampleInterface" , "passRecordOfRecords", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13558 | "TestExampleInterface", "passRecordOfRecords", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13560( cx, "TestExampleInterface" , "passRecordOfRecords", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13559 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13560( cx, "TestExampleInterface" , "passRecordOfRecords", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13560 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13560( cx, "TestExampleInterface" , "passRecordOfRecords", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
13561 | ||||
13562 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13563 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfRecords", 1)) { | |||
13564 | return false; | |||
13565 | } | |||
13566 | Record<nsString, Record<nsString, int32_t>> arg0; | |||
13567 | if (args[0].isObject()) { | |||
13568 | auto& recordEntries = arg0.Entries(); | |||
13569 | ||||
13570 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
13571 | JS::RootedVector<jsid> ids(cx); | |||
13572 | if (!js::GetPropertyKeys(cx, recordObj, | |||
13573 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
13574 | return false; | |||
13575 | } | |||
13576 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
13577 | JS_ReportOutOfMemory(cx); | |||
13578 | return false; | |||
13579 | } | |||
13580 | JS::Rooted<JS::Value> propNameValue(cx); | |||
13581 | JS::Rooted<JS::Value> temp(cx); | |||
13582 | JS::Rooted<jsid> curId(cx); | |||
13583 | JS::Rooted<JS::Value> idVal(cx); | |||
13584 | // Use a hashset to keep track of ids seen, to avoid | |||
13585 | // introducing nasty O(N^2) behavior scanning for them all the | |||
13586 | // time. Ideally we'd use a data structure with O(1) lookup | |||
13587 | // _and_ ordering for the MozMap, but we don't have one lying | |||
13588 | // around. | |||
13589 | nsTHashtable<nsStringHashKey> idsSeen; | |||
13590 | for (size_t i = 0; i < ids.length(); ++i) { | |||
13591 | curId = ids[i]; | |||
13592 | ||||
13593 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
13594 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
13595 | &desc)) { | |||
13596 | return false; | |||
13597 | } | |||
13598 | ||||
13599 | if (desc.isNothing() || !desc->enumerable()) { | |||
13600 | continue; | |||
13601 | } | |||
13602 | ||||
13603 | idVal = js::IdToValue(curId); | |||
13604 | nsString propName; | |||
13605 | // This will just throw if idVal is a Symbol, like the spec says | |||
13606 | // to do. | |||
13607 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
13608 | return false; | |||
13609 | } | |||
13610 | ||||
13611 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
13612 | return false; | |||
13613 | } | |||
13614 | ||||
13615 | Record<nsString, Record<nsString, int32_t>>::EntryType* entry; | |||
13616 | if (!idsSeen.EnsureInserted(propName)) { | |||
13617 | // Find the existing entry. | |||
13618 | auto idx = recordEntries.IndexOf(propName); | |||
13619 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13620); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13620; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
13620 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13620); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13620; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13621 | // Now blow it away to make it look like it was just added | |||
13622 | // to the array, because it's not obvious that it's | |||
13623 | // safe to write to its already-initialized mValue via our | |||
13624 | // normal codegen conversions. For example, the value | |||
13625 | // could be a union and this would change its type, but | |||
13626 | // codegen assumes we won't do that. | |||
13627 | entry = recordEntries.ReconstructElementAt(idx); | |||
13628 | } else { | |||
13629 | // Safe to do an infallible append here, because we did a | |||
13630 | // SetCapacity above to the right capacity. | |||
13631 | entry = recordEntries.AppendElement(); | |||
13632 | } | |||
13633 | entry->mKey = propName; | |||
13634 | Record<nsString, int32_t>& slot = entry->mValue; | |||
13635 | if (temp.isObject()) { | |||
13636 | auto& recordEntries = slot.Entries(); | |||
13637 | ||||
13638 | JS::Rooted<JSObject*> recordObj(cx, &temp.toObject()); | |||
13639 | JS::RootedVector<jsid> ids(cx); | |||
13640 | if (!js::GetPropertyKeys(cx, recordObj, | |||
13641 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
13642 | return false; | |||
13643 | } | |||
13644 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
13645 | JS_ReportOutOfMemory(cx); | |||
13646 | return false; | |||
13647 | } | |||
13648 | JS::Rooted<JS::Value> propNameValue(cx); | |||
13649 | JS::Rooted<JS::Value> temp(cx); | |||
13650 | JS::Rooted<jsid> curId(cx); | |||
13651 | JS::Rooted<JS::Value> idVal(cx); | |||
13652 | // Use a hashset to keep track of ids seen, to avoid | |||
13653 | // introducing nasty O(N^2) behavior scanning for them all the | |||
13654 | // time. Ideally we'd use a data structure with O(1) lookup | |||
13655 | // _and_ ordering for the MozMap, but we don't have one lying | |||
13656 | // around. | |||
13657 | nsTHashtable<nsStringHashKey> idsSeen; | |||
13658 | for (size_t i = 0; i < ids.length(); ++i) { | |||
13659 | curId = ids[i]; | |||
13660 | ||||
13661 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
13662 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
13663 | &desc)) { | |||
13664 | return false; | |||
13665 | } | |||
13666 | ||||
13667 | if (desc.isNothing() || !desc->enumerable()) { | |||
13668 | continue; | |||
13669 | } | |||
13670 | ||||
13671 | idVal = js::IdToValue(curId); | |||
13672 | nsString propName; | |||
13673 | // This will just throw if idVal is a Symbol, like the spec says | |||
13674 | // to do. | |||
13675 | if (!ConvertJSValueToString(cx, idVal, "key of value in argument 1", propName)) { | |||
13676 | return false; | |||
13677 | } | |||
13678 | ||||
13679 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
13680 | return false; | |||
13681 | } | |||
13682 | ||||
13683 | Record<nsString, int32_t>::EntryType* entry; | |||
13684 | if (!idsSeen.EnsureInserted(propName)) { | |||
13685 | // Find the existing entry. | |||
13686 | auto idx = recordEntries.IndexOf(propName); | |||
13687 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13688); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13688; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
13688 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 13688); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 13688; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
13689 | // Now blow it away to make it look like it was just added | |||
13690 | // to the array, because it's not obvious that it's | |||
13691 | // safe to write to its already-initialized mValue via our | |||
13692 | // normal codegen conversions. For example, the value | |||
13693 | // could be a union and this would change its type, but | |||
13694 | // codegen assumes we won't do that. | |||
13695 | entry = recordEntries.ReconstructElementAt(idx); | |||
13696 | } else { | |||
13697 | // Safe to do an infallible append here, because we did a | |||
13698 | // SetCapacity above to the right capacity. | |||
13699 | entry = recordEntries.AppendElement(); | |||
13700 | } | |||
13701 | entry->mKey = propName; | |||
13702 | int32_t& slot = entry->mValue; | |||
13703 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in value in argument 1", &slot)) { | |||
13704 | return false; | |||
13705 | } | |||
13706 | } | |||
13707 | } else { | |||
13708 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
13709 | return false; | |||
13710 | } | |||
13711 | } | |||
13712 | } else { | |||
13713 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
13714 | return false; | |||
13715 | } | |||
13716 | // NOTE: This assert does NOT call the function. | |||
13717 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfRecords(Constify(arg0)))>, "Should be returning void here"); | |||
13718 | MOZ_KnownLive(self)(self)->PassRecordOfRecords(Constify(arg0)); | |||
13719 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13719); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13719; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13720 | args.rval().setUndefined(); | |||
13721 | return true; | |||
13722 | } | |||
13723 | ||||
13724 | static const JSJitInfo passRecordOfRecords_methodinfo = { | |||
13725 | { (JSJitGetterOp)passRecordOfRecords }, | |||
13726 | { prototypes::id::TestExampleInterface }, | |||
13727 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13728 | JSJitInfo::Method, | |||
13729 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13730 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
13731 | false, /* isInfallible. False in setters. */ | |||
13732 | false, /* isMovable. Not relevant for setters. */ | |||
13733 | false, /* isEliminatable. Not relevant for setters. */ | |||
13734 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13735 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13736 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13737 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13738 | }; | |||
13739 | ||||
13740 | MOZ_CAN_RUN_SCRIPT static bool | |||
13741 | receiveRecord(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13742 | { | |||
13743 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13746( cx, "TestExampleInterface" , "receiveRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13744 | "TestExampleInterface", "receiveRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13746( cx, "TestExampleInterface" , "receiveRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13745 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13746( cx, "TestExampleInterface" , "receiveRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13746 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13746( cx, "TestExampleInterface" , "receiveRecord", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
13747 | ||||
13748 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13749 | Record<nsString, int32_t> result; | |||
13750 | // NOTE: This assert does NOT call the function. | |||
13751 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveRecord(result))>, "Should be returning void here"); | |||
13752 | MOZ_KnownLive(self)(self)->ReceiveRecord(result); | |||
13753 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13753); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13753; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13754 | ||||
13755 | JS::Rooted<JSObject*> returnObj(cx, JS_NewPlainObject(cx)); | |||
13756 | if (!returnObj) { | |||
13757 | return false; | |||
13758 | } | |||
13759 | // Scope for 'tmp' | |||
13760 | { | |||
13761 | JS::Rooted<JS::Value> tmp(cx); | |||
13762 | for (auto& entry : result.Entries()) { | |||
13763 | auto& recordValue0 = entry.mValue; | |||
13764 | // Control block to let us common up the JS_DefineUCProperty calls when there | |||
13765 | // are different ways to succeed at wrapping the value. | |||
13766 | do { | |||
13767 | tmp.setInt32(int32_t(recordValue0)); | |||
13768 | break; | |||
13769 | } while (false); | |||
13770 | if (!JS_DefineUCProperty(cx, returnObj, | |||
13771 | entry.mKey.BeginReading(), | |||
13772 | entry.mKey.Length(), tmp, | |||
13773 | JSPROP_ENUMERATE)) { | |||
13774 | return false; | |||
13775 | } | |||
13776 | } | |||
13777 | } | |||
13778 | args.rval().setObject(*returnObj); | |||
13779 | return true; | |||
13780 | } | |||
13781 | ||||
13782 | static const JSJitInfo receiveRecord_methodinfo = { | |||
13783 | { (JSJitGetterOp)receiveRecord }, | |||
13784 | { prototypes::id::TestExampleInterface }, | |||
13785 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13786 | JSJitInfo::Method, | |||
13787 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13788 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
13789 | false, /* isInfallible. False in setters. */ | |||
13790 | false, /* isMovable. Not relevant for setters. */ | |||
13791 | false, /* isEliminatable. Not relevant for setters. */ | |||
13792 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13793 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13794 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13795 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13796 | }; | |||
13797 | ||||
13798 | MOZ_CAN_RUN_SCRIPT static bool | |||
13799 | receiveNullableRecord(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13800 | { | |||
13801 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13804( cx, "TestExampleInterface" , "receiveNullableRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13802 | "TestExampleInterface", "receiveNullableRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13804( cx, "TestExampleInterface" , "receiveNullableRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13803 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13804( cx, "TestExampleInterface" , "receiveNullableRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13804 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13804( cx, "TestExampleInterface" , "receiveNullableRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
13805 | ||||
13806 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13807 | Nullable<Record<nsString, int32_t>> result; | |||
13808 | // NOTE: This assert does NOT call the function. | |||
13809 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableRecord(result))>, "Should be returning void here"); | |||
13810 | MOZ_KnownLive(self)(self)->ReceiveNullableRecord(result); | |||
13811 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13811); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13811; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13812 | ||||
13813 | if (result.IsNull()) { | |||
13814 | args.rval().setNull(); | |||
13815 | return true; | |||
13816 | } | |||
13817 | ||||
13818 | JS::Rooted<JSObject*> returnObj(cx, JS_NewPlainObject(cx)); | |||
13819 | if (!returnObj) { | |||
13820 | return false; | |||
13821 | } | |||
13822 | // Scope for 'tmp' | |||
13823 | { | |||
13824 | JS::Rooted<JS::Value> tmp(cx); | |||
13825 | for (auto& entry : result.Value().Entries()) { | |||
13826 | auto& recordValue0 = entry.mValue; | |||
13827 | // Control block to let us common up the JS_DefineUCProperty calls when there | |||
13828 | // are different ways to succeed at wrapping the value. | |||
13829 | do { | |||
13830 | tmp.setInt32(int32_t(recordValue0)); | |||
13831 | break; | |||
13832 | } while (false); | |||
13833 | if (!JS_DefineUCProperty(cx, returnObj, | |||
13834 | entry.mKey.BeginReading(), | |||
13835 | entry.mKey.Length(), tmp, | |||
13836 | JSPROP_ENUMERATE)) { | |||
13837 | return false; | |||
13838 | } | |||
13839 | } | |||
13840 | } | |||
13841 | args.rval().setObject(*returnObj); | |||
13842 | return true; | |||
13843 | } | |||
13844 | ||||
13845 | static const JSJitInfo receiveNullableRecord_methodinfo = { | |||
13846 | { (JSJitGetterOp)receiveNullableRecord }, | |||
13847 | { prototypes::id::TestExampleInterface }, | |||
13848 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13849 | JSJitInfo::Method, | |||
13850 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13851 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
13852 | false, /* isInfallible. False in setters. */ | |||
13853 | false, /* isMovable. Not relevant for setters. */ | |||
13854 | false, /* isEliminatable. Not relevant for setters. */ | |||
13855 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13856 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13857 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13858 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13859 | }; | |||
13860 | ||||
13861 | MOZ_CAN_RUN_SCRIPT static bool | |||
13862 | receiveRecordOfNullableInts(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13863 | { | |||
13864 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13867( cx, "TestExampleInterface" , "receiveRecordOfNullableInts", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13865 | "TestExampleInterface", "receiveRecordOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13867( cx, "TestExampleInterface" , "receiveRecordOfNullableInts", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13866 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13867( cx, "TestExampleInterface" , "receiveRecordOfNullableInts", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13867 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13867( cx, "TestExampleInterface" , "receiveRecordOfNullableInts", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
13868 | ||||
13869 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13870 | Record<nsString, Nullable<int32_t>> result; | |||
13871 | // NOTE: This assert does NOT call the function. | |||
13872 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveRecordOfNullableInts(result))>, "Should be returning void here"); | |||
13873 | MOZ_KnownLive(self)(self)->ReceiveRecordOfNullableInts(result); | |||
13874 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13874); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13874; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13875 | ||||
13876 | JS::Rooted<JSObject*> returnObj(cx, JS_NewPlainObject(cx)); | |||
13877 | if (!returnObj) { | |||
13878 | return false; | |||
13879 | } | |||
13880 | // Scope for 'tmp' | |||
13881 | { | |||
13882 | JS::Rooted<JS::Value> tmp(cx); | |||
13883 | for (auto& entry : result.Entries()) { | |||
13884 | auto& recordValue0 = entry.mValue; | |||
13885 | // Control block to let us common up the JS_DefineUCProperty calls when there | |||
13886 | // are different ways to succeed at wrapping the value. | |||
13887 | do { | |||
13888 | if (recordValue0.IsNull()) { | |||
13889 | tmp.setNull(); | |||
13890 | break; | |||
13891 | } | |||
13892 | tmp.setInt32(int32_t(recordValue0.Value())); | |||
13893 | break; | |||
13894 | } while (false); | |||
13895 | if (!JS_DefineUCProperty(cx, returnObj, | |||
13896 | entry.mKey.BeginReading(), | |||
13897 | entry.mKey.Length(), tmp, | |||
13898 | JSPROP_ENUMERATE)) { | |||
13899 | return false; | |||
13900 | } | |||
13901 | } | |||
13902 | } | |||
13903 | args.rval().setObject(*returnObj); | |||
13904 | return true; | |||
13905 | } | |||
13906 | ||||
13907 | static const JSJitInfo receiveRecordOfNullableInts_methodinfo = { | |||
13908 | { (JSJitGetterOp)receiveRecordOfNullableInts }, | |||
13909 | { prototypes::id::TestExampleInterface }, | |||
13910 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13911 | JSJitInfo::Method, | |||
13912 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13913 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
13914 | false, /* isInfallible. False in setters. */ | |||
13915 | false, /* isMovable. Not relevant for setters. */ | |||
13916 | false, /* isEliminatable. Not relevant for setters. */ | |||
13917 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13918 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13919 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13920 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13921 | }; | |||
13922 | ||||
13923 | MOZ_CAN_RUN_SCRIPT static bool | |||
13924 | receiveNullableRecordOfNullableInts(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13925 | { | |||
13926 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13929( cx, "TestExampleInterface" , "receiveNullableRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13927 | "TestExampleInterface", "receiveNullableRecordOfNullableInts", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13929( cx, "TestExampleInterface" , "receiveNullableRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13928 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13929( cx, "TestExampleInterface" , "receiveNullableRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
13929 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13929( cx, "TestExampleInterface" , "receiveNullableRecordOfNullableInts", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
13930 | ||||
13931 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13932 | Nullable<Record<nsString, Nullable<int32_t>>> result; | |||
13933 | // NOTE: This assert does NOT call the function. | |||
13934 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableRecordOfNullableInts(result))>, "Should be returning void here"); | |||
13935 | MOZ_KnownLive(self)(self)->ReceiveNullableRecordOfNullableInts(result); | |||
13936 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 13936); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 13936; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
13937 | ||||
13938 | if (result.IsNull()) { | |||
13939 | args.rval().setNull(); | |||
13940 | return true; | |||
13941 | } | |||
13942 | ||||
13943 | JS::Rooted<JSObject*> returnObj(cx, JS_NewPlainObject(cx)); | |||
13944 | if (!returnObj) { | |||
13945 | return false; | |||
13946 | } | |||
13947 | // Scope for 'tmp' | |||
13948 | { | |||
13949 | JS::Rooted<JS::Value> tmp(cx); | |||
13950 | for (auto& entry : result.Value().Entries()) { | |||
13951 | auto& recordValue0 = entry.mValue; | |||
13952 | // Control block to let us common up the JS_DefineUCProperty calls when there | |||
13953 | // are different ways to succeed at wrapping the value. | |||
13954 | do { | |||
13955 | if (recordValue0.IsNull()) { | |||
13956 | tmp.setNull(); | |||
13957 | break; | |||
13958 | } | |||
13959 | tmp.setInt32(int32_t(recordValue0.Value())); | |||
13960 | break; | |||
13961 | } while (false); | |||
13962 | if (!JS_DefineUCProperty(cx, returnObj, | |||
13963 | entry.mKey.BeginReading(), | |||
13964 | entry.mKey.Length(), tmp, | |||
13965 | JSPROP_ENUMERATE)) { | |||
13966 | return false; | |||
13967 | } | |||
13968 | } | |||
13969 | } | |||
13970 | args.rval().setObject(*returnObj); | |||
13971 | return true; | |||
13972 | } | |||
13973 | ||||
13974 | static const JSJitInfo receiveNullableRecordOfNullableInts_methodinfo = { | |||
13975 | { (JSJitGetterOp)receiveNullableRecordOfNullableInts }, | |||
13976 | { prototypes::id::TestExampleInterface }, | |||
13977 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
13978 | JSJitInfo::Method, | |||
13979 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
13980 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
13981 | false, /* isInfallible. False in setters. */ | |||
13982 | false, /* isMovable. Not relevant for setters. */ | |||
13983 | false, /* isEliminatable. Not relevant for setters. */ | |||
13984 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
13985 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
13986 | false, /* isTypedMethod. Only relevant for methods. */ | |||
13987 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
13988 | }; | |||
13989 | ||||
13990 | MOZ_CAN_RUN_SCRIPT static bool | |||
13991 | receiveAnyRecord(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
13992 | { | |||
13993 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject13996( cx, "TestExampleInterface" , "receiveAnyRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13994 | "TestExampleInterface", "receiveAnyRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject13996( cx, "TestExampleInterface" , "receiveAnyRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13995 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject13996( cx, "TestExampleInterface" , "receiveAnyRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
13996 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject13996( cx, "TestExampleInterface" , "receiveAnyRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
13997 | ||||
13998 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
13999 | Record<nsString, JS::Value> result; | |||
14000 | RecordRooter<nsString, JS::Value> resultRooter(cx, &result); | |||
14001 | // NOTE: This assert does NOT call the function. | |||
14002 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveAnyRecord(cx, result))>, "Should be returning void here"); | |||
14003 | MOZ_KnownLive(self)(self)->ReceiveAnyRecord(cx, result); | |||
14004 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14004); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14004; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14005 | ||||
14006 | JS::Rooted<JSObject*> returnObj(cx, JS_NewPlainObject(cx)); | |||
14007 | if (!returnObj) { | |||
14008 | return false; | |||
14009 | } | |||
14010 | // Scope for 'tmp' | |||
14011 | { | |||
14012 | JS::Rooted<JS::Value> tmp(cx); | |||
14013 | for (auto& entry : result.Entries()) { | |||
14014 | auto& recordValue0 = entry.mValue; | |||
14015 | // Control block to let us common up the JS_DefineUCProperty calls when there | |||
14016 | // are different ways to succeed at wrapping the value. | |||
14017 | do { | |||
14018 | JS::ExposeValueToActiveJS(recordValue0); | |||
14019 | tmp.set(recordValue0); | |||
14020 | if (!MaybeWrapValue(cx, &tmp)) { | |||
14021 | return false; | |||
14022 | } | |||
14023 | break; | |||
14024 | } while (false); | |||
14025 | if (!JS_DefineUCProperty(cx, returnObj, | |||
14026 | entry.mKey.BeginReading(), | |||
14027 | entry.mKey.Length(), tmp, | |||
14028 | JSPROP_ENUMERATE)) { | |||
14029 | return false; | |||
14030 | } | |||
14031 | } | |||
14032 | } | |||
14033 | args.rval().setObject(*returnObj); | |||
14034 | return true; | |||
14035 | } | |||
14036 | ||||
14037 | static const JSJitInfo receiveAnyRecord_methodinfo = { | |||
14038 | { (JSJitGetterOp)receiveAnyRecord }, | |||
14039 | { prototypes::id::TestExampleInterface }, | |||
14040 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14041 | JSJitInfo::Method, | |||
14042 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14043 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
14044 | false, /* isInfallible. False in setters. */ | |||
14045 | false, /* isMovable. Not relevant for setters. */ | |||
14046 | false, /* isEliminatable. Not relevant for setters. */ | |||
14047 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14048 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14049 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14050 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14051 | }; | |||
14052 | ||||
14053 | MOZ_CAN_RUN_SCRIPT static bool | |||
14054 | passArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14055 | { | |||
14056 | BindingCallContext cx(cx_, "TestExampleInterface.passArrayBuffer"); | |||
14057 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14060( cx, "TestExampleInterface" , "passArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14058 | "TestExampleInterface", "passArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14060( cx, "TestExampleInterface" , "passArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14059 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14060( cx, "TestExampleInterface" , "passArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14060 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14060( cx, "TestExampleInterface" , "passArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14061 | ||||
14062 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14063 | if (!args.requireAtLeast(cx, "TestExampleInterface.passArrayBuffer", 1)) { | |||
14064 | return false; | |||
14065 | } | |||
14066 | RootedSpiderMonkeyInterface<ArrayBuffer> arg0(cx); | |||
14067 | if (args[0].isObject()) { | |||
14068 | if (!arg0.Init(&args[0].toObject())) { | |||
14069 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBuffer"); | |||
14070 | return false; | |||
14071 | } | |||
14072 | if (JS::IsSharedArrayBufferObject(arg0.Obj())) { | |||
14073 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14074 | return false; | |||
14075 | } | |||
14076 | if (JS::IsLargeArrayBufferMaybeShared(arg0.Obj())) { | |||
14077 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14078 | return false; | |||
14079 | } | |||
14080 | if (JS::IsResizableArrayBufferMaybeShared(arg0.Obj())) { | |||
14081 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14082 | return false; | |||
14083 | } | |||
14084 | } else { | |||
14085 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14086 | return false; | |||
14087 | } | |||
14088 | // NOTE: This assert does NOT call the function. | |||
14089 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
14090 | MOZ_KnownLive(self)(self)->PassArrayBuffer(Constify(arg0)); | |||
14091 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14091); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14091; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14092 | args.rval().setUndefined(); | |||
14093 | return true; | |||
14094 | } | |||
14095 | ||||
14096 | static const JSJitInfo passArrayBuffer_methodinfo = { | |||
14097 | { (JSJitGetterOp)passArrayBuffer }, | |||
14098 | { prototypes::id::TestExampleInterface }, | |||
14099 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14100 | JSJitInfo::Method, | |||
14101 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14102 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14103 | false, /* isInfallible. False in setters. */ | |||
14104 | false, /* isMovable. Not relevant for setters. */ | |||
14105 | false, /* isEliminatable. Not relevant for setters. */ | |||
14106 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14107 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14108 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14109 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14110 | }; | |||
14111 | ||||
14112 | MOZ_CAN_RUN_SCRIPT static bool | |||
14113 | passNullableArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14114 | { | |||
14115 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableArrayBuffer"); | |||
14116 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14119( cx, "TestExampleInterface" , "passNullableArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14117 | "TestExampleInterface", "passNullableArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14119( cx, "TestExampleInterface" , "passNullableArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14118 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14119( cx, "TestExampleInterface" , "passNullableArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14119 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14119( cx, "TestExampleInterface" , "passNullableArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14120 | ||||
14121 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14122 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableArrayBuffer", 1)) { | |||
14123 | return false; | |||
14124 | } | |||
14125 | RootedSpiderMonkeyInterface<Nullable<ArrayBuffer>> arg0(cx); | |||
14126 | if (args[0].isObject()) { | |||
14127 | if (!arg0.SetValue().Init(&args[0].toObject())) { | |||
14128 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBufferOrNull"); | |||
14129 | return false; | |||
14130 | } | |||
14131 | if (JS::IsSharedArrayBufferObject(arg0.SetValue().Obj())) { | |||
14132 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14133 | return false; | |||
14134 | } | |||
14135 | if (JS::IsLargeArrayBufferMaybeShared(arg0.SetValue().Obj())) { | |||
14136 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14137 | return false; | |||
14138 | } | |||
14139 | if (JS::IsResizableArrayBufferMaybeShared(arg0.SetValue().Obj())) { | |||
14140 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14141 | return false; | |||
14142 | } | |||
14143 | } else if (args[0].isNullOrUndefined()) { | |||
14144 | arg0.SetNull(); | |||
14145 | } else { | |||
14146 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14147 | return false; | |||
14148 | } | |||
14149 | // NOTE: This assert does NOT call the function. | |||
14150 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
14151 | MOZ_KnownLive(self)(self)->PassNullableArrayBuffer(Constify(arg0)); | |||
14152 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14152); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14152; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14153 | args.rval().setUndefined(); | |||
14154 | return true; | |||
14155 | } | |||
14156 | ||||
14157 | static const JSJitInfo passNullableArrayBuffer_methodinfo = { | |||
14158 | { (JSJitGetterOp)passNullableArrayBuffer }, | |||
14159 | { prototypes::id::TestExampleInterface }, | |||
14160 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14161 | JSJitInfo::Method, | |||
14162 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14163 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14164 | false, /* isInfallible. False in setters. */ | |||
14165 | false, /* isMovable. Not relevant for setters. */ | |||
14166 | false, /* isEliminatable. Not relevant for setters. */ | |||
14167 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14168 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14169 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14170 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14171 | }; | |||
14172 | ||||
14173 | MOZ_CAN_RUN_SCRIPT static bool | |||
14174 | passOptionalArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14175 | { | |||
14176 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalArrayBuffer"); | |||
14177 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14180( cx, "TestExampleInterface" , "passOptionalArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14178 | "TestExampleInterface", "passOptionalArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14180( cx, "TestExampleInterface" , "passOptionalArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14179 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14180( cx, "TestExampleInterface" , "passOptionalArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14180 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14180( cx, "TestExampleInterface" , "passOptionalArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14181 | ||||
14182 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14183 | Optional<ArrayBuffer> arg0; | |||
14184 | Maybe<SpiderMonkeyInterfaceRooter<ArrayBuffer>> arg0_holder; | |||
14185 | if (args.hasDefined(0)) { | |||
14186 | arg0.Construct(); | |||
14187 | arg0_holder.emplace(cx, &arg0.Value()); | |||
14188 | if (args[0].isObject()) { | |||
14189 | if (!arg0.Value().Init(&args[0].toObject())) { | |||
14190 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBuffer"); | |||
14191 | return false; | |||
14192 | } | |||
14193 | if (JS::IsSharedArrayBufferObject(arg0.Value().Obj())) { | |||
14194 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14195 | return false; | |||
14196 | } | |||
14197 | if (JS::IsLargeArrayBufferMaybeShared(arg0.Value().Obj())) { | |||
14198 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14199 | return false; | |||
14200 | } | |||
14201 | if (JS::IsResizableArrayBufferMaybeShared(arg0.Value().Obj())) { | |||
14202 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14203 | return false; | |||
14204 | } | |||
14205 | } else { | |||
14206 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14207 | return false; | |||
14208 | } | |||
14209 | } | |||
14210 | // NOTE: This assert does NOT call the function. | |||
14211 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
14212 | MOZ_KnownLive(self)(self)->PassOptionalArrayBuffer(Constify(arg0)); | |||
14213 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14213); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14213; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14214 | args.rval().setUndefined(); | |||
14215 | return true; | |||
14216 | } | |||
14217 | ||||
14218 | static const JSJitInfo passOptionalArrayBuffer_methodinfo = { | |||
14219 | { (JSJitGetterOp)passOptionalArrayBuffer }, | |||
14220 | { prototypes::id::TestExampleInterface }, | |||
14221 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14222 | JSJitInfo::Method, | |||
14223 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14224 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14225 | false, /* isInfallible. False in setters. */ | |||
14226 | false, /* isMovable. Not relevant for setters. */ | |||
14227 | false, /* isEliminatable. Not relevant for setters. */ | |||
14228 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14229 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14230 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14231 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14232 | }; | |||
14233 | ||||
14234 | MOZ_CAN_RUN_SCRIPT static bool | |||
14235 | passOptionalNullableArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14236 | { | |||
14237 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableArrayBuffer"); | |||
14238 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14241( cx, "TestExampleInterface" , "passOptionalNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14239 | "TestExampleInterface", "passOptionalNullableArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14241( cx, "TestExampleInterface" , "passOptionalNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14240 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14241( cx, "TestExampleInterface" , "passOptionalNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14241 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14241( cx, "TestExampleInterface" , "passOptionalNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
14242 | ||||
14243 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14244 | Optional<Nullable<ArrayBuffer>> arg0; | |||
14245 | Maybe<SpiderMonkeyInterfaceRooter<ArrayBuffer>> arg0_holder; | |||
14246 | if (args.hasDefined(0)) { | |||
14247 | arg0.Construct(); | |||
14248 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
14249 | if (args[0].isObject()) { | |||
14250 | if (!arg0.Value().SetValue().Init(&args[0].toObject())) { | |||
14251 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBufferOrNull"); | |||
14252 | return false; | |||
14253 | } | |||
14254 | if (JS::IsSharedArrayBufferObject(arg0.Value().SetValue().Obj())) { | |||
14255 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14256 | return false; | |||
14257 | } | |||
14258 | if (JS::IsLargeArrayBufferMaybeShared(arg0.Value().SetValue().Obj())) { | |||
14259 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14260 | return false; | |||
14261 | } | |||
14262 | if (JS::IsResizableArrayBufferMaybeShared(arg0.Value().SetValue().Obj())) { | |||
14263 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14264 | return false; | |||
14265 | } | |||
14266 | } else if (args[0].isNullOrUndefined()) { | |||
14267 | arg0.Value().SetNull(); | |||
14268 | } else { | |||
14269 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14270 | return false; | |||
14271 | } | |||
14272 | } | |||
14273 | // NOTE: This assert does NOT call the function. | |||
14274 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
14275 | MOZ_KnownLive(self)(self)->PassOptionalNullableArrayBuffer(Constify(arg0)); | |||
14276 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14276); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14276; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14277 | args.rval().setUndefined(); | |||
14278 | return true; | |||
14279 | } | |||
14280 | ||||
14281 | static const JSJitInfo passOptionalNullableArrayBuffer_methodinfo = { | |||
14282 | { (JSJitGetterOp)passOptionalNullableArrayBuffer }, | |||
14283 | { prototypes::id::TestExampleInterface }, | |||
14284 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14285 | JSJitInfo::Method, | |||
14286 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14287 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14288 | false, /* isInfallible. False in setters. */ | |||
14289 | false, /* isMovable. Not relevant for setters. */ | |||
14290 | false, /* isEliminatable. Not relevant for setters. */ | |||
14291 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14292 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14293 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14294 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14295 | }; | |||
14296 | ||||
14297 | MOZ_CAN_RUN_SCRIPT static bool | |||
14298 | passOptionalNullableArrayBufferWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14299 | { | |||
14300 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableArrayBufferWithDefaultValue"); | |||
14301 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14304( cx, "TestExampleInterface" , "passOptionalNullableArrayBufferWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14302 | "TestExampleInterface", "passOptionalNullableArrayBufferWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14304( cx, "TestExampleInterface" , "passOptionalNullableArrayBufferWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14303 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14304( cx, "TestExampleInterface" , "passOptionalNullableArrayBufferWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14304 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14304( cx, "TestExampleInterface" , "passOptionalNullableArrayBufferWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
14305 | ||||
14306 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14307 | RootedSpiderMonkeyInterface<Nullable<ArrayBuffer>> arg0(cx); | |||
14308 | if (args.hasDefined(0)) { | |||
14309 | if (args[0].isObject()) { | |||
14310 | if (!arg0.SetValue().Init(&args[0].toObject())) { | |||
14311 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBufferOrNull"); | |||
14312 | return false; | |||
14313 | } | |||
14314 | if (JS::IsSharedArrayBufferObject(arg0.SetValue().Obj())) { | |||
14315 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14316 | return false; | |||
14317 | } | |||
14318 | if (JS::IsLargeArrayBufferMaybeShared(arg0.SetValue().Obj())) { | |||
14319 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14320 | return false; | |||
14321 | } | |||
14322 | if (JS::IsResizableArrayBufferMaybeShared(arg0.SetValue().Obj())) { | |||
14323 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14324 | return false; | |||
14325 | } | |||
14326 | } else if (args[0].isNullOrUndefined()) { | |||
14327 | arg0.SetNull(); | |||
14328 | } else { | |||
14329 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14330 | return false; | |||
14331 | } | |||
14332 | } else { | |||
14333 | arg0.SetNull(); | |||
14334 | } | |||
14335 | // NOTE: This assert does NOT call the function. | |||
14336 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableArrayBufferWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
14337 | MOZ_KnownLive(self)(self)->PassOptionalNullableArrayBufferWithDefaultValue(Constify(arg0)); | |||
14338 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14338); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14338; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14339 | args.rval().setUndefined(); | |||
14340 | return true; | |||
14341 | } | |||
14342 | ||||
14343 | static const JSJitInfo passOptionalNullableArrayBufferWithDefaultValue_methodinfo = { | |||
14344 | { (JSJitGetterOp)passOptionalNullableArrayBufferWithDefaultValue }, | |||
14345 | { prototypes::id::TestExampleInterface }, | |||
14346 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14347 | JSJitInfo::Method, | |||
14348 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14349 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14350 | false, /* isInfallible. False in setters. */ | |||
14351 | false, /* isMovable. Not relevant for setters. */ | |||
14352 | false, /* isEliminatable. Not relevant for setters. */ | |||
14353 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14354 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14355 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14356 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14357 | }; | |||
14358 | ||||
14359 | MOZ_CAN_RUN_SCRIPT static bool | |||
14360 | passArrayBufferView(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14361 | { | |||
14362 | BindingCallContext cx(cx_, "TestExampleInterface.passArrayBufferView"); | |||
14363 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14366( cx, "TestExampleInterface" , "passArrayBufferView", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14364 | "TestExampleInterface", "passArrayBufferView", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14366( cx, "TestExampleInterface" , "passArrayBufferView", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14365 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14366( cx, "TestExampleInterface" , "passArrayBufferView", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14366 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14366( cx, "TestExampleInterface" , "passArrayBufferView", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14367 | ||||
14368 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14369 | if (!args.requireAtLeast(cx, "TestExampleInterface.passArrayBufferView", 1)) { | |||
14370 | return false; | |||
14371 | } | |||
14372 | RootedSpiderMonkeyInterface<ArrayBufferView> arg0(cx); | |||
14373 | if (args[0].isObject()) { | |||
14374 | if (!arg0.Init(&args[0].toObject())) { | |||
14375 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBufferView"); | |||
14376 | return false; | |||
14377 | } | |||
14378 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14379 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14380 | return false; | |||
14381 | } | |||
14382 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14383 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14384 | return false; | |||
14385 | } | |||
14386 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14387 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14388 | return false; | |||
14389 | } | |||
14390 | } else { | |||
14391 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14392 | return false; | |||
14393 | } | |||
14394 | // NOTE: This assert does NOT call the function. | |||
14395 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassArrayBufferView(Constify(arg0)))>, "Should be returning void here"); | |||
14396 | MOZ_KnownLive(self)(self)->PassArrayBufferView(Constify(arg0)); | |||
14397 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14397); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14397; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14398 | args.rval().setUndefined(); | |||
14399 | return true; | |||
14400 | } | |||
14401 | ||||
14402 | static const JSJitInfo passArrayBufferView_methodinfo = { | |||
14403 | { (JSJitGetterOp)passArrayBufferView }, | |||
14404 | { prototypes::id::TestExampleInterface }, | |||
14405 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14406 | JSJitInfo::Method, | |||
14407 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14408 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14409 | false, /* isInfallible. False in setters. */ | |||
14410 | false, /* isMovable. Not relevant for setters. */ | |||
14411 | false, /* isEliminatable. Not relevant for setters. */ | |||
14412 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14413 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14414 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14415 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14416 | }; | |||
14417 | ||||
14418 | MOZ_CAN_RUN_SCRIPT static bool | |||
14419 | passInt8Array(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14420 | { | |||
14421 | BindingCallContext cx(cx_, "TestExampleInterface.passInt8Array"); | |||
14422 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14425( cx, "TestExampleInterface" , "passInt8Array", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14423 | "TestExampleInterface", "passInt8Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14425( cx, "TestExampleInterface" , "passInt8Array", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14424 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14425( cx, "TestExampleInterface" , "passInt8Array", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14425 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14425( cx, "TestExampleInterface" , "passInt8Array", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14426 | ||||
14427 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14428 | if (!args.requireAtLeast(cx, "TestExampleInterface.passInt8Array", 1)) { | |||
14429 | return false; | |||
14430 | } | |||
14431 | RootedSpiderMonkeyInterface<Int8Array> arg0(cx); | |||
14432 | if (args[0].isObject()) { | |||
14433 | if (!arg0.Init(&args[0].toObject())) { | |||
14434 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Int8Array"); | |||
14435 | return false; | |||
14436 | } | |||
14437 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14438 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14439 | return false; | |||
14440 | } | |||
14441 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14442 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14443 | return false; | |||
14444 | } | |||
14445 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14446 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14447 | return false; | |||
14448 | } | |||
14449 | } else { | |||
14450 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14451 | return false; | |||
14452 | } | |||
14453 | // NOTE: This assert does NOT call the function. | |||
14454 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassInt8Array(Constify(arg0)))>, "Should be returning void here"); | |||
14455 | MOZ_KnownLive(self)(self)->PassInt8Array(Constify(arg0)); | |||
14456 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14456); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14456; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14457 | args.rval().setUndefined(); | |||
14458 | return true; | |||
14459 | } | |||
14460 | ||||
14461 | static const JSJitInfo passInt8Array_methodinfo = { | |||
14462 | { (JSJitGetterOp)passInt8Array }, | |||
14463 | { prototypes::id::TestExampleInterface }, | |||
14464 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14465 | JSJitInfo::Method, | |||
14466 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14467 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14468 | false, /* isInfallible. False in setters. */ | |||
14469 | false, /* isMovable. Not relevant for setters. */ | |||
14470 | false, /* isEliminatable. Not relevant for setters. */ | |||
14471 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14472 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14473 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14474 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14475 | }; | |||
14476 | ||||
14477 | MOZ_CAN_RUN_SCRIPT static bool | |||
14478 | passInt16Array(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14479 | { | |||
14480 | BindingCallContext cx(cx_, "TestExampleInterface.passInt16Array"); | |||
14481 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14484( cx, "TestExampleInterface" , "passInt16Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14482 | "TestExampleInterface", "passInt16Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14484( cx, "TestExampleInterface" , "passInt16Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14483 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14484( cx, "TestExampleInterface" , "passInt16Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14484 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14484( cx, "TestExampleInterface" , "passInt16Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14485 | ||||
14486 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14487 | if (!args.requireAtLeast(cx, "TestExampleInterface.passInt16Array", 1)) { | |||
14488 | return false; | |||
14489 | } | |||
14490 | RootedSpiderMonkeyInterface<Int16Array> arg0(cx); | |||
14491 | if (args[0].isObject()) { | |||
14492 | if (!arg0.Init(&args[0].toObject())) { | |||
14493 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Int16Array"); | |||
14494 | return false; | |||
14495 | } | |||
14496 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14497 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14498 | return false; | |||
14499 | } | |||
14500 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14501 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14502 | return false; | |||
14503 | } | |||
14504 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14505 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14506 | return false; | |||
14507 | } | |||
14508 | } else { | |||
14509 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14510 | return false; | |||
14511 | } | |||
14512 | // NOTE: This assert does NOT call the function. | |||
14513 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassInt16Array(Constify(arg0)))>, "Should be returning void here"); | |||
14514 | MOZ_KnownLive(self)(self)->PassInt16Array(Constify(arg0)); | |||
14515 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14515); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14515; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14516 | args.rval().setUndefined(); | |||
14517 | return true; | |||
14518 | } | |||
14519 | ||||
14520 | static const JSJitInfo passInt16Array_methodinfo = { | |||
14521 | { (JSJitGetterOp)passInt16Array }, | |||
14522 | { prototypes::id::TestExampleInterface }, | |||
14523 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14524 | JSJitInfo::Method, | |||
14525 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14526 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14527 | false, /* isInfallible. False in setters. */ | |||
14528 | false, /* isMovable. Not relevant for setters. */ | |||
14529 | false, /* isEliminatable. Not relevant for setters. */ | |||
14530 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14531 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14532 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14533 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14534 | }; | |||
14535 | ||||
14536 | MOZ_CAN_RUN_SCRIPT static bool | |||
14537 | passInt32Array(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14538 | { | |||
14539 | BindingCallContext cx(cx_, "TestExampleInterface.passInt32Array"); | |||
14540 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14543( cx, "TestExampleInterface" , "passInt32Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14541 | "TestExampleInterface", "passInt32Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14543( cx, "TestExampleInterface" , "passInt32Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14542 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14543( cx, "TestExampleInterface" , "passInt32Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14543 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14543( cx, "TestExampleInterface" , "passInt32Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14544 | ||||
14545 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14546 | if (!args.requireAtLeast(cx, "TestExampleInterface.passInt32Array", 1)) { | |||
14547 | return false; | |||
14548 | } | |||
14549 | RootedSpiderMonkeyInterface<Int32Array> arg0(cx); | |||
14550 | if (args[0].isObject()) { | |||
14551 | if (!arg0.Init(&args[0].toObject())) { | |||
14552 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Int32Array"); | |||
14553 | return false; | |||
14554 | } | |||
14555 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14556 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14557 | return false; | |||
14558 | } | |||
14559 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14560 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14561 | return false; | |||
14562 | } | |||
14563 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14564 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14565 | return false; | |||
14566 | } | |||
14567 | } else { | |||
14568 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14569 | return false; | |||
14570 | } | |||
14571 | // NOTE: This assert does NOT call the function. | |||
14572 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassInt32Array(Constify(arg0)))>, "Should be returning void here"); | |||
14573 | MOZ_KnownLive(self)(self)->PassInt32Array(Constify(arg0)); | |||
14574 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14574); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14574; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14575 | args.rval().setUndefined(); | |||
14576 | return true; | |||
14577 | } | |||
14578 | ||||
14579 | static const JSJitInfo passInt32Array_methodinfo = { | |||
14580 | { (JSJitGetterOp)passInt32Array }, | |||
14581 | { prototypes::id::TestExampleInterface }, | |||
14582 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14583 | JSJitInfo::Method, | |||
14584 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14585 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14586 | false, /* isInfallible. False in setters. */ | |||
14587 | false, /* isMovable. Not relevant for setters. */ | |||
14588 | false, /* isEliminatable. Not relevant for setters. */ | |||
14589 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14590 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14591 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14592 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14593 | }; | |||
14594 | ||||
14595 | MOZ_CAN_RUN_SCRIPT static bool | |||
14596 | passUint8Array(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14597 | { | |||
14598 | BindingCallContext cx(cx_, "TestExampleInterface.passUint8Array"); | |||
14599 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14602( cx, "TestExampleInterface" , "passUint8Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14600 | "TestExampleInterface", "passUint8Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14602( cx, "TestExampleInterface" , "passUint8Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14601 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14602( cx, "TestExampleInterface" , "passUint8Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14602 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14602( cx, "TestExampleInterface" , "passUint8Array", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14603 | ||||
14604 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14605 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUint8Array", 1)) { | |||
14606 | return false; | |||
14607 | } | |||
14608 | RootedSpiderMonkeyInterface<Uint8Array> arg0(cx); | |||
14609 | if (args[0].isObject()) { | |||
14610 | if (!arg0.Init(&args[0].toObject())) { | |||
14611 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Uint8Array"); | |||
14612 | return false; | |||
14613 | } | |||
14614 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14615 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14616 | return false; | |||
14617 | } | |||
14618 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14619 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14620 | return false; | |||
14621 | } | |||
14622 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14623 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14624 | return false; | |||
14625 | } | |||
14626 | } else { | |||
14627 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14628 | return false; | |||
14629 | } | |||
14630 | // NOTE: This assert does NOT call the function. | |||
14631 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUint8Array(Constify(arg0)))>, "Should be returning void here"); | |||
14632 | MOZ_KnownLive(self)(self)->PassUint8Array(Constify(arg0)); | |||
14633 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14633); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14633; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14634 | args.rval().setUndefined(); | |||
14635 | return true; | |||
14636 | } | |||
14637 | ||||
14638 | static const JSJitInfo passUint8Array_methodinfo = { | |||
14639 | { (JSJitGetterOp)passUint8Array }, | |||
14640 | { prototypes::id::TestExampleInterface }, | |||
14641 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14642 | JSJitInfo::Method, | |||
14643 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14644 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14645 | false, /* isInfallible. False in setters. */ | |||
14646 | false, /* isMovable. Not relevant for setters. */ | |||
14647 | false, /* isEliminatable. Not relevant for setters. */ | |||
14648 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14649 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14650 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14651 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14652 | }; | |||
14653 | ||||
14654 | MOZ_CAN_RUN_SCRIPT static bool | |||
14655 | passUint16Array(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14656 | { | |||
14657 | BindingCallContext cx(cx_, "TestExampleInterface.passUint16Array"); | |||
14658 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14661( cx, "TestExampleInterface" , "passUint16Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14659 | "TestExampleInterface", "passUint16Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14661( cx, "TestExampleInterface" , "passUint16Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14660 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14661( cx, "TestExampleInterface" , "passUint16Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14661 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14661( cx, "TestExampleInterface" , "passUint16Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14662 | ||||
14663 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14664 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUint16Array", 1)) { | |||
14665 | return false; | |||
14666 | } | |||
14667 | RootedSpiderMonkeyInterface<Uint16Array> arg0(cx); | |||
14668 | if (args[0].isObject()) { | |||
14669 | if (!arg0.Init(&args[0].toObject())) { | |||
14670 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Uint16Array"); | |||
14671 | return false; | |||
14672 | } | |||
14673 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14674 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14675 | return false; | |||
14676 | } | |||
14677 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14678 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14679 | return false; | |||
14680 | } | |||
14681 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14682 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14683 | return false; | |||
14684 | } | |||
14685 | } else { | |||
14686 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14687 | return false; | |||
14688 | } | |||
14689 | // NOTE: This assert does NOT call the function. | |||
14690 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUint16Array(Constify(arg0)))>, "Should be returning void here"); | |||
14691 | MOZ_KnownLive(self)(self)->PassUint16Array(Constify(arg0)); | |||
14692 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14692); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14692; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14693 | args.rval().setUndefined(); | |||
14694 | return true; | |||
14695 | } | |||
14696 | ||||
14697 | static const JSJitInfo passUint16Array_methodinfo = { | |||
14698 | { (JSJitGetterOp)passUint16Array }, | |||
14699 | { prototypes::id::TestExampleInterface }, | |||
14700 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14701 | JSJitInfo::Method, | |||
14702 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14703 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14704 | false, /* isInfallible. False in setters. */ | |||
14705 | false, /* isMovable. Not relevant for setters. */ | |||
14706 | false, /* isEliminatable. Not relevant for setters. */ | |||
14707 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14708 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14709 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14710 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14711 | }; | |||
14712 | ||||
14713 | MOZ_CAN_RUN_SCRIPT static bool | |||
14714 | passUint32Array(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14715 | { | |||
14716 | BindingCallContext cx(cx_, "TestExampleInterface.passUint32Array"); | |||
14717 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14720( cx, "TestExampleInterface" , "passUint32Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14718 | "TestExampleInterface", "passUint32Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14720( cx, "TestExampleInterface" , "passUint32Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14719 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14720( cx, "TestExampleInterface" , "passUint32Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14720 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14720( cx, "TestExampleInterface" , "passUint32Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14721 | ||||
14722 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14723 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUint32Array", 1)) { | |||
14724 | return false; | |||
14725 | } | |||
14726 | RootedSpiderMonkeyInterface<Uint32Array> arg0(cx); | |||
14727 | if (args[0].isObject()) { | |||
14728 | if (!arg0.Init(&args[0].toObject())) { | |||
14729 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Uint32Array"); | |||
14730 | return false; | |||
14731 | } | |||
14732 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14733 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14734 | return false; | |||
14735 | } | |||
14736 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14737 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14738 | return false; | |||
14739 | } | |||
14740 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14741 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14742 | return false; | |||
14743 | } | |||
14744 | } else { | |||
14745 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14746 | return false; | |||
14747 | } | |||
14748 | // NOTE: This assert does NOT call the function. | |||
14749 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUint32Array(Constify(arg0)))>, "Should be returning void here"); | |||
14750 | MOZ_KnownLive(self)(self)->PassUint32Array(Constify(arg0)); | |||
14751 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14751); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14751; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14752 | args.rval().setUndefined(); | |||
14753 | return true; | |||
14754 | } | |||
14755 | ||||
14756 | static const JSJitInfo passUint32Array_methodinfo = { | |||
14757 | { (JSJitGetterOp)passUint32Array }, | |||
14758 | { prototypes::id::TestExampleInterface }, | |||
14759 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14760 | JSJitInfo::Method, | |||
14761 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14762 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14763 | false, /* isInfallible. False in setters. */ | |||
14764 | false, /* isMovable. Not relevant for setters. */ | |||
14765 | false, /* isEliminatable. Not relevant for setters. */ | |||
14766 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14767 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14768 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14769 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14770 | }; | |||
14771 | ||||
14772 | MOZ_CAN_RUN_SCRIPT static bool | |||
14773 | passUint8ClampedArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14774 | { | |||
14775 | BindingCallContext cx(cx_, "TestExampleInterface.passUint8ClampedArray"); | |||
14776 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14779( cx, "TestExampleInterface" , "passUint8ClampedArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14777 | "TestExampleInterface", "passUint8ClampedArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14779( cx, "TestExampleInterface" , "passUint8ClampedArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14778 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14779( cx, "TestExampleInterface" , "passUint8ClampedArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14779 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14779( cx, "TestExampleInterface" , "passUint8ClampedArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14780 | ||||
14781 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14782 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUint8ClampedArray", 1)) { | |||
14783 | return false; | |||
14784 | } | |||
14785 | RootedSpiderMonkeyInterface<Uint8ClampedArray> arg0(cx); | |||
14786 | if (args[0].isObject()) { | |||
14787 | if (!arg0.Init(&args[0].toObject())) { | |||
14788 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Uint8ClampedArray"); | |||
14789 | return false; | |||
14790 | } | |||
14791 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14792 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14793 | return false; | |||
14794 | } | |||
14795 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14796 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14797 | return false; | |||
14798 | } | |||
14799 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14800 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14801 | return false; | |||
14802 | } | |||
14803 | } else { | |||
14804 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14805 | return false; | |||
14806 | } | |||
14807 | // NOTE: This assert does NOT call the function. | |||
14808 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUint8ClampedArray(Constify(arg0)))>, "Should be returning void here"); | |||
14809 | MOZ_KnownLive(self)(self)->PassUint8ClampedArray(Constify(arg0)); | |||
14810 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14810); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14810; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14811 | args.rval().setUndefined(); | |||
14812 | return true; | |||
14813 | } | |||
14814 | ||||
14815 | static const JSJitInfo passUint8ClampedArray_methodinfo = { | |||
14816 | { (JSJitGetterOp)passUint8ClampedArray }, | |||
14817 | { prototypes::id::TestExampleInterface }, | |||
14818 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14819 | JSJitInfo::Method, | |||
14820 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14821 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14822 | false, /* isInfallible. False in setters. */ | |||
14823 | false, /* isMovable. Not relevant for setters. */ | |||
14824 | false, /* isEliminatable. Not relevant for setters. */ | |||
14825 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14826 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14827 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14828 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14829 | }; | |||
14830 | ||||
14831 | MOZ_CAN_RUN_SCRIPT static bool | |||
14832 | passFloat32Array(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14833 | { | |||
14834 | BindingCallContext cx(cx_, "TestExampleInterface.passFloat32Array"); | |||
14835 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14838( cx, "TestExampleInterface" , "passFloat32Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14836 | "TestExampleInterface", "passFloat32Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14838( cx, "TestExampleInterface" , "passFloat32Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14837 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14838( cx, "TestExampleInterface" , "passFloat32Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14838 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14838( cx, "TestExampleInterface" , "passFloat32Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14839 | ||||
14840 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14841 | if (!args.requireAtLeast(cx, "TestExampleInterface.passFloat32Array", 1)) { | |||
14842 | return false; | |||
14843 | } | |||
14844 | RootedSpiderMonkeyInterface<Float32Array> arg0(cx); | |||
14845 | if (args[0].isObject()) { | |||
14846 | if (!arg0.Init(&args[0].toObject())) { | |||
14847 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Float32Array"); | |||
14848 | return false; | |||
14849 | } | |||
14850 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14851 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14852 | return false; | |||
14853 | } | |||
14854 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14855 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14856 | return false; | |||
14857 | } | |||
14858 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14859 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14860 | return false; | |||
14861 | } | |||
14862 | } else { | |||
14863 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14864 | return false; | |||
14865 | } | |||
14866 | // NOTE: This assert does NOT call the function. | |||
14867 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassFloat32Array(Constify(arg0)))>, "Should be returning void here"); | |||
14868 | MOZ_KnownLive(self)(self)->PassFloat32Array(Constify(arg0)); | |||
14869 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14869); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14869; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14870 | args.rval().setUndefined(); | |||
14871 | return true; | |||
14872 | } | |||
14873 | ||||
14874 | static const JSJitInfo passFloat32Array_methodinfo = { | |||
14875 | { (JSJitGetterOp)passFloat32Array }, | |||
14876 | { prototypes::id::TestExampleInterface }, | |||
14877 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14878 | JSJitInfo::Method, | |||
14879 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14880 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14881 | false, /* isInfallible. False in setters. */ | |||
14882 | false, /* isMovable. Not relevant for setters. */ | |||
14883 | false, /* isEliminatable. Not relevant for setters. */ | |||
14884 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14885 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14886 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14887 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14888 | }; | |||
14889 | ||||
14890 | MOZ_CAN_RUN_SCRIPT static bool | |||
14891 | passFloat64Array(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14892 | { | |||
14893 | BindingCallContext cx(cx_, "TestExampleInterface.passFloat64Array"); | |||
14894 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14897( cx, "TestExampleInterface" , "passFloat64Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14895 | "TestExampleInterface", "passFloat64Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14897( cx, "TestExampleInterface" , "passFloat64Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14896 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14897( cx, "TestExampleInterface" , "passFloat64Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
14897 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14897( cx, "TestExampleInterface" , "passFloat64Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
14898 | ||||
14899 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14900 | if (!args.requireAtLeast(cx, "TestExampleInterface.passFloat64Array", 1)) { | |||
14901 | return false; | |||
14902 | } | |||
14903 | RootedSpiderMonkeyInterface<Float64Array> arg0(cx); | |||
14904 | if (args[0].isObject()) { | |||
14905 | if (!arg0.Init(&args[0].toObject())) { | |||
14906 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Float64Array"); | |||
14907 | return false; | |||
14908 | } | |||
14909 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
14910 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
14911 | return false; | |||
14912 | } | |||
14913 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
14914 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
14915 | return false; | |||
14916 | } | |||
14917 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
14918 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
14919 | return false; | |||
14920 | } | |||
14921 | } else { | |||
14922 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
14923 | return false; | |||
14924 | } | |||
14925 | // NOTE: This assert does NOT call the function. | |||
14926 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassFloat64Array(Constify(arg0)))>, "Should be returning void here"); | |||
14927 | MOZ_KnownLive(self)(self)->PassFloat64Array(Constify(arg0)); | |||
14928 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 14928); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 14928; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
14929 | args.rval().setUndefined(); | |||
14930 | return true; | |||
14931 | } | |||
14932 | ||||
14933 | static const JSJitInfo passFloat64Array_methodinfo = { | |||
14934 | { (JSJitGetterOp)passFloat64Array }, | |||
14935 | { prototypes::id::TestExampleInterface }, | |||
14936 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
14937 | JSJitInfo::Method, | |||
14938 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
14939 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
14940 | false, /* isInfallible. False in setters. */ | |||
14941 | false, /* isMovable. Not relevant for setters. */ | |||
14942 | false, /* isEliminatable. Not relevant for setters. */ | |||
14943 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
14944 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
14945 | false, /* isTypedMethod. Only relevant for methods. */ | |||
14946 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
14947 | }; | |||
14948 | ||||
14949 | MOZ_CAN_RUN_SCRIPT static bool | |||
14950 | passSequenceOfArrayBuffers(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
14951 | { | |||
14952 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfArrayBuffers"); | |||
14953 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject14956( cx, "TestExampleInterface" , "passSequenceOfArrayBuffers", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14954 | "TestExampleInterface", "passSequenceOfArrayBuffers", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject14956( cx, "TestExampleInterface" , "passSequenceOfArrayBuffers", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14955 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject14956( cx, "TestExampleInterface" , "passSequenceOfArrayBuffers", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
14956 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject14956( cx, "TestExampleInterface" , "passSequenceOfArrayBuffers", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
14957 | ||||
14958 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
14959 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfArrayBuffers", 1)) { | |||
14960 | return false; | |||
14961 | } | |||
14962 | binding_detail::AutoSequence<ArrayBuffer> arg0; | |||
14963 | SequenceRooter<ArrayBuffer> arg0_holder(cx, &arg0); | |||
14964 | if (args[0].isObject()) { | |||
14965 | JS::ForOfIterator iter(cx); | |||
14966 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
14967 | return false; | |||
14968 | } | |||
14969 | if (!iter.valueIsIterable()) { | |||
14970 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
14971 | return false; | |||
14972 | } | |||
14973 | binding_detail::AutoSequence<ArrayBuffer> &arr = arg0; | |||
14974 | JS::Rooted<JS::Value> temp(cx); | |||
14975 | while (true) { | |||
14976 | bool done; | |||
14977 | if (!iter.next(&temp, &done)) { | |||
14978 | return false; | |||
14979 | } | |||
14980 | if (done) { | |||
14981 | break; | |||
14982 | } | |||
14983 | ArrayBuffer* slotPtr = arr.AppendElement(mozilla::fallible); | |||
14984 | if (!slotPtr) { | |||
14985 | JS_ReportOutOfMemory(cx); | |||
14986 | return false; | |||
14987 | } | |||
14988 | ArrayBuffer& slot = *slotPtr; | |||
14989 | if (temp.isObject()) { | |||
14990 | if (!slot.Init(&temp.toObject())) { | |||
14991 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "ArrayBuffer"); | |||
14992 | return false; | |||
14993 | } | |||
14994 | if (JS::IsSharedArrayBufferObject(slot.Obj())) { | |||
14995 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Element of argument 1"); | |||
14996 | return false; | |||
14997 | } | |||
14998 | if (JS::IsLargeArrayBufferMaybeShared(slot.Obj())) { | |||
14999 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Element of argument 1"); | |||
15000 | return false; | |||
15001 | } | |||
15002 | if (JS::IsResizableArrayBufferMaybeShared(slot.Obj())) { | |||
15003 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Element of argument 1"); | |||
15004 | return false; | |||
15005 | } | |||
15006 | } else { | |||
15007 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
15008 | return false; | |||
15009 | } | |||
15010 | } | |||
15011 | } else { | |||
15012 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
15013 | return false; | |||
15014 | } | |||
15015 | // NOTE: This assert does NOT call the function. | |||
15016 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfArrayBuffers(Constify(arg0)))>, "Should be returning void here"); | |||
15017 | MOZ_KnownLive(self)(self)->PassSequenceOfArrayBuffers(Constify(arg0)); | |||
15018 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15018); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15018; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15019 | args.rval().setUndefined(); | |||
15020 | return true; | |||
15021 | } | |||
15022 | ||||
15023 | static const JSJitInfo passSequenceOfArrayBuffers_methodinfo = { | |||
15024 | { (JSJitGetterOp)passSequenceOfArrayBuffers }, | |||
15025 | { prototypes::id::TestExampleInterface }, | |||
15026 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15027 | JSJitInfo::Method, | |||
15028 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15029 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15030 | false, /* isInfallible. False in setters. */ | |||
15031 | false, /* isMovable. Not relevant for setters. */ | |||
15032 | false, /* isEliminatable. Not relevant for setters. */ | |||
15033 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15034 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15035 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15036 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15037 | }; | |||
15038 | ||||
15039 | MOZ_CAN_RUN_SCRIPT static bool | |||
15040 | passSequenceOfNullableArrayBuffers(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15041 | { | |||
15042 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfNullableArrayBuffers"); | |||
15043 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15046( cx, "TestExampleInterface" , "passSequenceOfNullableArrayBuffers", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15044 | "TestExampleInterface", "passSequenceOfNullableArrayBuffers", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15046( cx, "TestExampleInterface" , "passSequenceOfNullableArrayBuffers", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15045 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15046( cx, "TestExampleInterface" , "passSequenceOfNullableArrayBuffers", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15046 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15046( cx, "TestExampleInterface" , "passSequenceOfNullableArrayBuffers", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
15047 | ||||
15048 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15049 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfNullableArrayBuffers", 1)) { | |||
15050 | return false; | |||
15051 | } | |||
15052 | binding_detail::AutoSequence<Nullable<ArrayBuffer>> arg0; | |||
15053 | SequenceRooter<Nullable<ArrayBuffer>> arg0_holder(cx, &arg0); | |||
15054 | if (args[0].isObject()) { | |||
15055 | JS::ForOfIterator iter(cx); | |||
15056 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
15057 | return false; | |||
15058 | } | |||
15059 | if (!iter.valueIsIterable()) { | |||
15060 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
15061 | return false; | |||
15062 | } | |||
15063 | binding_detail::AutoSequence<Nullable<ArrayBuffer>> &arr = arg0; | |||
15064 | JS::Rooted<JS::Value> temp(cx); | |||
15065 | while (true) { | |||
15066 | bool done; | |||
15067 | if (!iter.next(&temp, &done)) { | |||
15068 | return false; | |||
15069 | } | |||
15070 | if (done) { | |||
15071 | break; | |||
15072 | } | |||
15073 | Nullable<ArrayBuffer>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
15074 | if (!slotPtr) { | |||
15075 | JS_ReportOutOfMemory(cx); | |||
15076 | return false; | |||
15077 | } | |||
15078 | Nullable<ArrayBuffer>& slot = *slotPtr; | |||
15079 | if (temp.isObject()) { | |||
15080 | if (!slot.SetValue().Init(&temp.toObject())) { | |||
15081 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of argument 1", "ArrayBufferOrNull"); | |||
15082 | return false; | |||
15083 | } | |||
15084 | if (JS::IsSharedArrayBufferObject(slot.SetValue().Obj())) { | |||
15085 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Element of argument 1"); | |||
15086 | return false; | |||
15087 | } | |||
15088 | if (JS::IsLargeArrayBufferMaybeShared(slot.SetValue().Obj())) { | |||
15089 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Element of argument 1"); | |||
15090 | return false; | |||
15091 | } | |||
15092 | if (JS::IsResizableArrayBufferMaybeShared(slot.SetValue().Obj())) { | |||
15093 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Element of argument 1"); | |||
15094 | return false; | |||
15095 | } | |||
15096 | } else if (temp.isNullOrUndefined()) { | |||
15097 | slot.SetNull(); | |||
15098 | } else { | |||
15099 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
15100 | return false; | |||
15101 | } | |||
15102 | } | |||
15103 | } else { | |||
15104 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
15105 | return false; | |||
15106 | } | |||
15107 | // NOTE: This assert does NOT call the function. | |||
15108 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfNullableArrayBuffers(Constify(arg0)))>, "Should be returning void here"); | |||
15109 | MOZ_KnownLive(self)(self)->PassSequenceOfNullableArrayBuffers(Constify(arg0)); | |||
15110 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15110); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15110; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15111 | args.rval().setUndefined(); | |||
15112 | return true; | |||
15113 | } | |||
15114 | ||||
15115 | static const JSJitInfo passSequenceOfNullableArrayBuffers_methodinfo = { | |||
15116 | { (JSJitGetterOp)passSequenceOfNullableArrayBuffers }, | |||
15117 | { prototypes::id::TestExampleInterface }, | |||
15118 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15119 | JSJitInfo::Method, | |||
15120 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15121 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15122 | false, /* isInfallible. False in setters. */ | |||
15123 | false, /* isMovable. Not relevant for setters. */ | |||
15124 | false, /* isEliminatable. Not relevant for setters. */ | |||
15125 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15126 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15127 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15128 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15129 | }; | |||
15130 | ||||
15131 | MOZ_CAN_RUN_SCRIPT static bool | |||
15132 | passRecordOfArrayBuffers(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15133 | { | |||
15134 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfArrayBuffers"); | |||
15135 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15138( cx, "TestExampleInterface" , "passRecordOfArrayBuffers", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15136 | "TestExampleInterface", "passRecordOfArrayBuffers", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15138( cx, "TestExampleInterface" , "passRecordOfArrayBuffers", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15137 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15138( cx, "TestExampleInterface" , "passRecordOfArrayBuffers", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15138 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15138( cx, "TestExampleInterface" , "passRecordOfArrayBuffers", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
15139 | ||||
15140 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15141 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfArrayBuffers", 1)) { | |||
15142 | return false; | |||
15143 | } | |||
15144 | Record<nsString, ArrayBuffer> arg0; | |||
15145 | RecordRooter<nsString, ArrayBuffer> arg0_holder(cx, &arg0); | |||
15146 | if (args[0].isObject()) { | |||
15147 | auto& recordEntries = arg0.Entries(); | |||
15148 | ||||
15149 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
15150 | JS::RootedVector<jsid> ids(cx); | |||
15151 | if (!js::GetPropertyKeys(cx, recordObj, | |||
15152 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
15153 | return false; | |||
15154 | } | |||
15155 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
15156 | JS_ReportOutOfMemory(cx); | |||
15157 | return false; | |||
15158 | } | |||
15159 | JS::Rooted<JS::Value> propNameValue(cx); | |||
15160 | JS::Rooted<JS::Value> temp(cx); | |||
15161 | JS::Rooted<jsid> curId(cx); | |||
15162 | JS::Rooted<JS::Value> idVal(cx); | |||
15163 | // Use a hashset to keep track of ids seen, to avoid | |||
15164 | // introducing nasty O(N^2) behavior scanning for them all the | |||
15165 | // time. Ideally we'd use a data structure with O(1) lookup | |||
15166 | // _and_ ordering for the MozMap, but we don't have one lying | |||
15167 | // around. | |||
15168 | nsTHashtable<nsStringHashKey> idsSeen; | |||
15169 | for (size_t i = 0; i < ids.length(); ++i) { | |||
15170 | curId = ids[i]; | |||
15171 | ||||
15172 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
15173 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
15174 | &desc)) { | |||
15175 | return false; | |||
15176 | } | |||
15177 | ||||
15178 | if (desc.isNothing() || !desc->enumerable()) { | |||
15179 | continue; | |||
15180 | } | |||
15181 | ||||
15182 | idVal = js::IdToValue(curId); | |||
15183 | nsString propName; | |||
15184 | // This will just throw if idVal is a Symbol, like the spec says | |||
15185 | // to do. | |||
15186 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
15187 | return false; | |||
15188 | } | |||
15189 | ||||
15190 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
15191 | return false; | |||
15192 | } | |||
15193 | ||||
15194 | Record<nsString, ArrayBuffer>::EntryType* entry; | |||
15195 | if (!idsSeen.EnsureInserted(propName)) { | |||
15196 | // Find the existing entry. | |||
15197 | auto idx = recordEntries.IndexOf(propName); | |||
15198 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 15199); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 15199; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
15199 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 15199); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 15199; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
15200 | // Now blow it away to make it look like it was just added | |||
15201 | // to the array, because it's not obvious that it's | |||
15202 | // safe to write to its already-initialized mValue via our | |||
15203 | // normal codegen conversions. For example, the value | |||
15204 | // could be a union and this would change its type, but | |||
15205 | // codegen assumes we won't do that. | |||
15206 | entry = recordEntries.ReconstructElementAt(idx); | |||
15207 | } else { | |||
15208 | // Safe to do an infallible append here, because we did a | |||
15209 | // SetCapacity above to the right capacity. | |||
15210 | entry = recordEntries.AppendElement(); | |||
15211 | } | |||
15212 | entry->mKey = propName; | |||
15213 | ArrayBuffer& slot = entry->mValue; | |||
15214 | if (temp.isObject()) { | |||
15215 | if (!slot.Init(&temp.toObject())) { | |||
15216 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "ArrayBuffer"); | |||
15217 | return false; | |||
15218 | } | |||
15219 | if (JS::IsSharedArrayBufferObject(slot.Obj())) { | |||
15220 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Value in argument 1"); | |||
15221 | return false; | |||
15222 | } | |||
15223 | if (JS::IsLargeArrayBufferMaybeShared(slot.Obj())) { | |||
15224 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Value in argument 1"); | |||
15225 | return false; | |||
15226 | } | |||
15227 | if (JS::IsResizableArrayBufferMaybeShared(slot.Obj())) { | |||
15228 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Value in argument 1"); | |||
15229 | return false; | |||
15230 | } | |||
15231 | } else { | |||
15232 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
15233 | return false; | |||
15234 | } | |||
15235 | } | |||
15236 | } else { | |||
15237 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
15238 | return false; | |||
15239 | } | |||
15240 | // NOTE: This assert does NOT call the function. | |||
15241 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfArrayBuffers(Constify(arg0)))>, "Should be returning void here"); | |||
15242 | MOZ_KnownLive(self)(self)->PassRecordOfArrayBuffers(Constify(arg0)); | |||
15243 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15243); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15243; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15244 | args.rval().setUndefined(); | |||
15245 | return true; | |||
15246 | } | |||
15247 | ||||
15248 | static const JSJitInfo passRecordOfArrayBuffers_methodinfo = { | |||
15249 | { (JSJitGetterOp)passRecordOfArrayBuffers }, | |||
15250 | { prototypes::id::TestExampleInterface }, | |||
15251 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15252 | JSJitInfo::Method, | |||
15253 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15254 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15255 | false, /* isInfallible. False in setters. */ | |||
15256 | false, /* isMovable. Not relevant for setters. */ | |||
15257 | false, /* isEliminatable. Not relevant for setters. */ | |||
15258 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15259 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15260 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15261 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15262 | }; | |||
15263 | ||||
15264 | MOZ_CAN_RUN_SCRIPT static bool | |||
15265 | passRecordOfNullableArrayBuffers(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15266 | { | |||
15267 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfNullableArrayBuffers"); | |||
15268 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15271( cx, "TestExampleInterface" , "passRecordOfNullableArrayBuffers", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15269 | "TestExampleInterface", "passRecordOfNullableArrayBuffers", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15271( cx, "TestExampleInterface" , "passRecordOfNullableArrayBuffers", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15270 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15271( cx, "TestExampleInterface" , "passRecordOfNullableArrayBuffers", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15271 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15271( cx, "TestExampleInterface" , "passRecordOfNullableArrayBuffers", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
15272 | ||||
15273 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15274 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfNullableArrayBuffers", 1)) { | |||
15275 | return false; | |||
15276 | } | |||
15277 | Record<nsString, Nullable<ArrayBuffer>> arg0; | |||
15278 | RecordRooter<nsString, Nullable<ArrayBuffer>> arg0_holder(cx, &arg0); | |||
15279 | if (args[0].isObject()) { | |||
15280 | auto& recordEntries = arg0.Entries(); | |||
15281 | ||||
15282 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
15283 | JS::RootedVector<jsid> ids(cx); | |||
15284 | if (!js::GetPropertyKeys(cx, recordObj, | |||
15285 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
15286 | return false; | |||
15287 | } | |||
15288 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
15289 | JS_ReportOutOfMemory(cx); | |||
15290 | return false; | |||
15291 | } | |||
15292 | JS::Rooted<JS::Value> propNameValue(cx); | |||
15293 | JS::Rooted<JS::Value> temp(cx); | |||
15294 | JS::Rooted<jsid> curId(cx); | |||
15295 | JS::Rooted<JS::Value> idVal(cx); | |||
15296 | // Use a hashset to keep track of ids seen, to avoid | |||
15297 | // introducing nasty O(N^2) behavior scanning for them all the | |||
15298 | // time. Ideally we'd use a data structure with O(1) lookup | |||
15299 | // _and_ ordering for the MozMap, but we don't have one lying | |||
15300 | // around. | |||
15301 | nsTHashtable<nsStringHashKey> idsSeen; | |||
15302 | for (size_t i = 0; i < ids.length(); ++i) { | |||
15303 | curId = ids[i]; | |||
15304 | ||||
15305 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
15306 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
15307 | &desc)) { | |||
15308 | return false; | |||
15309 | } | |||
15310 | ||||
15311 | if (desc.isNothing() || !desc->enumerable()) { | |||
15312 | continue; | |||
15313 | } | |||
15314 | ||||
15315 | idVal = js::IdToValue(curId); | |||
15316 | nsString propName; | |||
15317 | // This will just throw if idVal is a Symbol, like the spec says | |||
15318 | // to do. | |||
15319 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
15320 | return false; | |||
15321 | } | |||
15322 | ||||
15323 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
15324 | return false; | |||
15325 | } | |||
15326 | ||||
15327 | Record<nsString, Nullable<ArrayBuffer>>::EntryType* entry; | |||
15328 | if (!idsSeen.EnsureInserted(propName)) { | |||
15329 | // Find the existing entry. | |||
15330 | auto idx = recordEntries.IndexOf(propName); | |||
15331 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 15332); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 15332; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
15332 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 15332); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 15332; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
15333 | // Now blow it away to make it look like it was just added | |||
15334 | // to the array, because it's not obvious that it's | |||
15335 | // safe to write to its already-initialized mValue via our | |||
15336 | // normal codegen conversions. For example, the value | |||
15337 | // could be a union and this would change its type, but | |||
15338 | // codegen assumes we won't do that. | |||
15339 | entry = recordEntries.ReconstructElementAt(idx); | |||
15340 | } else { | |||
15341 | // Safe to do an infallible append here, because we did a | |||
15342 | // SetCapacity above to the right capacity. | |||
15343 | entry = recordEntries.AppendElement(); | |||
15344 | } | |||
15345 | entry->mKey = propName; | |||
15346 | Nullable<ArrayBuffer>& slot = entry->mValue; | |||
15347 | if (temp.isObject()) { | |||
15348 | if (!slot.SetValue().Init(&temp.toObject())) { | |||
15349 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value in argument 1", "ArrayBufferOrNull"); | |||
15350 | return false; | |||
15351 | } | |||
15352 | if (JS::IsSharedArrayBufferObject(slot.SetValue().Obj())) { | |||
15353 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Value in argument 1"); | |||
15354 | return false; | |||
15355 | } | |||
15356 | if (JS::IsLargeArrayBufferMaybeShared(slot.SetValue().Obj())) { | |||
15357 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Value in argument 1"); | |||
15358 | return false; | |||
15359 | } | |||
15360 | if (JS::IsResizableArrayBufferMaybeShared(slot.SetValue().Obj())) { | |||
15361 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Value in argument 1"); | |||
15362 | return false; | |||
15363 | } | |||
15364 | } else if (temp.isNullOrUndefined()) { | |||
15365 | slot.SetNull(); | |||
15366 | } else { | |||
15367 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
15368 | return false; | |||
15369 | } | |||
15370 | } | |||
15371 | } else { | |||
15372 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
15373 | return false; | |||
15374 | } | |||
15375 | // NOTE: This assert does NOT call the function. | |||
15376 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfNullableArrayBuffers(Constify(arg0)))>, "Should be returning void here"); | |||
15377 | MOZ_KnownLive(self)(self)->PassRecordOfNullableArrayBuffers(Constify(arg0)); | |||
15378 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15378); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15378; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15379 | args.rval().setUndefined(); | |||
15380 | return true; | |||
15381 | } | |||
15382 | ||||
15383 | static const JSJitInfo passRecordOfNullableArrayBuffers_methodinfo = { | |||
15384 | { (JSJitGetterOp)passRecordOfNullableArrayBuffers }, | |||
15385 | { prototypes::id::TestExampleInterface }, | |||
15386 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15387 | JSJitInfo::Method, | |||
15388 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15389 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15390 | false, /* isInfallible. False in setters. */ | |||
15391 | false, /* isMovable. Not relevant for setters. */ | |||
15392 | false, /* isEliminatable. Not relevant for setters. */ | |||
15393 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15394 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15395 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15396 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15397 | }; | |||
15398 | ||||
15399 | MOZ_CAN_RUN_SCRIPT static bool | |||
15400 | passVariadicTypedArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15401 | { | |||
15402 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicTypedArray"); | |||
15403 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15406( cx, "TestExampleInterface" , "passVariadicTypedArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15404 | "TestExampleInterface", "passVariadicTypedArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15406( cx, "TestExampleInterface" , "passVariadicTypedArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15405 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15406( cx, "TestExampleInterface" , "passVariadicTypedArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15406 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15406( cx, "TestExampleInterface" , "passVariadicTypedArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15407 | ||||
15408 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15409 | AutoSequence<Float32Array> arg0; | |||
15410 | SequenceRooter<Float32Array> arg0_holder(cx, &arg0); | |||
15411 | if (args.length() > 0) { | |||
15412 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
15413 | JS_ReportOutOfMemory(cx); | |||
15414 | return false; | |||
15415 | } | |||
15416 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
15417 | // OK to do infallible append here, since we ensured capacity already. | |||
15418 | Float32Array& slot = *arg0.AppendElement(); | |||
15419 | if (args[variadicArg].isObject()) { | |||
15420 | if (!slot.Init(&args[variadicArg].toObject())) { | |||
15421 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Float32Array"); | |||
15422 | return false; | |||
15423 | } | |||
15424 | if (JS::IsArrayBufferViewShared(slot.Obj())) { | |||
15425 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
15426 | return false; | |||
15427 | } | |||
15428 | if (JS::IsLargeArrayBufferView(slot.Obj())) { | |||
15429 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
15430 | return false; | |||
15431 | } | |||
15432 | if (JS::IsResizableArrayBufferView(slot.Obj())) { | |||
15433 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
15434 | return false; | |||
15435 | } | |||
15436 | } else { | |||
15437 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
15438 | return false; | |||
15439 | } | |||
15440 | } | |||
15441 | } | |||
15442 | // NOTE: This assert does NOT call the function. | |||
15443 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicTypedArray(Constify(arg0)))>, "Should be returning void here"); | |||
15444 | MOZ_KnownLive(self)(self)->PassVariadicTypedArray(Constify(arg0)); | |||
15445 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15445); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15445; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15446 | args.rval().setUndefined(); | |||
15447 | return true; | |||
15448 | } | |||
15449 | ||||
15450 | static const JSJitInfo passVariadicTypedArray_methodinfo = { | |||
15451 | { (JSJitGetterOp)passVariadicTypedArray }, | |||
15452 | { prototypes::id::TestExampleInterface }, | |||
15453 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15454 | JSJitInfo::Method, | |||
15455 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15456 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15457 | false, /* isInfallible. False in setters. */ | |||
15458 | false, /* isMovable. Not relevant for setters. */ | |||
15459 | false, /* isEliminatable. Not relevant for setters. */ | |||
15460 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15461 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15462 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15463 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15464 | }; | |||
15465 | ||||
15466 | MOZ_CAN_RUN_SCRIPT static bool | |||
15467 | passVariadicNullableTypedArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15468 | { | |||
15469 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicNullableTypedArray"); | |||
15470 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15473( cx, "TestExampleInterface" , "passVariadicNullableTypedArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15471 | "TestExampleInterface", "passVariadicNullableTypedArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15473( cx, "TestExampleInterface" , "passVariadicNullableTypedArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15472 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15473( cx, "TestExampleInterface" , "passVariadicNullableTypedArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15473 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15473( cx, "TestExampleInterface" , "passVariadicNullableTypedArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
15474 | ||||
15475 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15476 | AutoSequence<Nullable<Float32Array>> arg0; | |||
15477 | SequenceRooter<Nullable<Float32Array>> arg0_holder(cx, &arg0); | |||
15478 | if (args.length() > 0) { | |||
15479 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
15480 | JS_ReportOutOfMemory(cx); | |||
15481 | return false; | |||
15482 | } | |||
15483 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
15484 | // OK to do infallible append here, since we ensured capacity already. | |||
15485 | Nullable<Float32Array>& slot = *arg0.AppendElement(); | |||
15486 | if (args[variadicArg].isObject()) { | |||
15487 | if (!slot.SetValue().Init(&args[variadicArg].toObject())) { | |||
15488 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "Float32ArrayOrNull"); | |||
15489 | return false; | |||
15490 | } | |||
15491 | if (JS::IsArrayBufferViewShared(slot.SetValue().Obj())) { | |||
15492 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
15493 | return false; | |||
15494 | } | |||
15495 | if (JS::IsLargeArrayBufferView(slot.SetValue().Obj())) { | |||
15496 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
15497 | return false; | |||
15498 | } | |||
15499 | if (JS::IsResizableArrayBufferView(slot.SetValue().Obj())) { | |||
15500 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
15501 | return false; | |||
15502 | } | |||
15503 | } else if (args[variadicArg].isNullOrUndefined()) { | |||
15504 | slot.SetNull(); | |||
15505 | } else { | |||
15506 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
15507 | return false; | |||
15508 | } | |||
15509 | } | |||
15510 | } | |||
15511 | // NOTE: This assert does NOT call the function. | |||
15512 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicNullableTypedArray(Constify(arg0)))>, "Should be returning void here"); | |||
15513 | MOZ_KnownLive(self)(self)->PassVariadicNullableTypedArray(Constify(arg0)); | |||
15514 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15514); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15514; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15515 | args.rval().setUndefined(); | |||
15516 | return true; | |||
15517 | } | |||
15518 | ||||
15519 | static const JSJitInfo passVariadicNullableTypedArray_methodinfo = { | |||
15520 | { (JSJitGetterOp)passVariadicNullableTypedArray }, | |||
15521 | { prototypes::id::TestExampleInterface }, | |||
15522 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15523 | JSJitInfo::Method, | |||
15524 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15525 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15526 | false, /* isInfallible. False in setters. */ | |||
15527 | false, /* isMovable. Not relevant for setters. */ | |||
15528 | false, /* isEliminatable. Not relevant for setters. */ | |||
15529 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15530 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15531 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15532 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15533 | }; | |||
15534 | ||||
15535 | MOZ_CAN_RUN_SCRIPT static bool | |||
15536 | receiveUint8Array(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15537 | { | |||
15538 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15541( cx, "TestExampleInterface" , "receiveUint8Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15539 | "TestExampleInterface", "receiveUint8Array", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15541( cx, "TestExampleInterface" , "receiveUint8Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15540 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15541( cx, "TestExampleInterface" , "receiveUint8Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15541 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15541( cx, "TestExampleInterface" , "receiveUint8Array", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15542 | ||||
15543 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15544 | JS::Rooted<JSObject*> result(cx); | |||
15545 | // NOTE: This assert does NOT call the function. | |||
15546 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveUint8Array(cx, &result))>, "Should be returning void here"); | |||
15547 | MOZ_KnownLive(self)(self)->ReceiveUint8Array(cx, &result); | |||
15548 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15548); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15548; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15549 | JS::ExposeObjectToActiveJS(result); | |||
15550 | args.rval().setObject(*result); | |||
15551 | if (!MaybeWrapNonDOMObjectValue(cx, args.rval())) { | |||
15552 | return false; | |||
15553 | } | |||
15554 | return true; | |||
15555 | } | |||
15556 | ||||
15557 | static const JSJitInfo receiveUint8Array_methodinfo = { | |||
15558 | { (JSJitGetterOp)receiveUint8Array }, | |||
15559 | { prototypes::id::TestExampleInterface }, | |||
15560 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15561 | JSJitInfo::Method, | |||
15562 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15563 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
15564 | false, /* isInfallible. False in setters. */ | |||
15565 | false, /* isMovable. Not relevant for setters. */ | |||
15566 | false, /* isEliminatable. Not relevant for setters. */ | |||
15567 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15568 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15569 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15570 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15571 | }; | |||
15572 | ||||
15573 | MOZ_CAN_RUN_SCRIPT static bool | |||
15574 | get_uint8ArrayAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
15575 | { | |||
15576 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15579( cx, "TestExampleInterface" , "uint8ArrayAttr", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15577 | "TestExampleInterface", "uint8ArrayAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15579( cx, "TestExampleInterface" , "uint8ArrayAttr", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15578 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject15579( cx, "TestExampleInterface" , "uint8ArrayAttr", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15579 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15579( cx, "TestExampleInterface" , "uint8ArrayAttr", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15580 | ||||
15581 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15582 | JS::Rooted<JSObject*> result(cx); | |||
15583 | // NOTE: This assert does NOT call the function. | |||
15584 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetUint8ArrayAttr(cx, &result))>, "Should be returning void here"); | |||
15585 | MOZ_KnownLive(self)(self)->GetUint8ArrayAttr(cx, &result); | |||
15586 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15586); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15586; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15587 | JS::ExposeObjectToActiveJS(result); | |||
15588 | args.rval().setObject(*result); | |||
15589 | if (!MaybeWrapNonDOMObjectValue(cx, args.rval())) { | |||
15590 | return false; | |||
15591 | } | |||
15592 | return true; | |||
15593 | } | |||
15594 | ||||
15595 | MOZ_CAN_RUN_SCRIPT static bool | |||
15596 | set_uint8ArrayAttr(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
15597 | { | |||
15598 | BindingCallContext cx(cx_, "TestExampleInterface.uint8ArrayAttr setter"); | |||
15599 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15602( cx, "TestExampleInterface" , "uint8ArrayAttr", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15600 | "TestExampleInterface", "uint8ArrayAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15602( cx, "TestExampleInterface" , "uint8ArrayAttr", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15601 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject15602( cx, "TestExampleInterface" , "uint8ArrayAttr", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15602 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15602( cx, "TestExampleInterface" , "uint8ArrayAttr", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15603 | ||||
15604 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15605 | RootedSpiderMonkeyInterface<Uint8Array> arg0(cx); | |||
15606 | if (args[0].isObject()) { | |||
15607 | if (!arg0.Init(&args[0].toObject())) { | |||
15608 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "Uint8Array"); | |||
15609 | return false; | |||
15610 | } | |||
15611 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
15612 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Value being assigned"); | |||
15613 | return false; | |||
15614 | } | |||
15615 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
15616 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Value being assigned"); | |||
15617 | return false; | |||
15618 | } | |||
15619 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
15620 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Value being assigned"); | |||
15621 | return false; | |||
15622 | } | |||
15623 | } else { | |||
15624 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
15625 | return false; | |||
15626 | } | |||
15627 | // NOTE: This assert does NOT call the function. | |||
15628 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetUint8ArrayAttr(Constify(arg0)))>, "Should be returning void here"); | |||
15629 | MOZ_KnownLive(self)(self)->SetUint8ArrayAttr(Constify(arg0)); | |||
15630 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15630); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15630; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15631 | ||||
15632 | return true; | |||
15633 | } | |||
15634 | ||||
15635 | static const JSJitInfo uint8ArrayAttr_getterinfo = { | |||
15636 | { get_uint8ArrayAttr }, | |||
15637 | { prototypes::id::TestExampleInterface }, | |||
15638 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15639 | JSJitInfo::Getter, | |||
15640 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15641 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
15642 | false, /* isInfallible. False in setters. */ | |||
15643 | false, /* isMovable. Not relevant for setters. */ | |||
15644 | false, /* isEliminatable. Not relevant for setters. */ | |||
15645 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15646 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15647 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15648 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15649 | }; | |||
15650 | static const JSJitInfo uint8ArrayAttr_setterinfo = { | |||
15651 | { (JSJitGetterOp)set_uint8ArrayAttr }, | |||
15652 | { prototypes::id::TestExampleInterface }, | |||
15653 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15654 | JSJitInfo::Setter, | |||
15655 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15656 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15657 | false, /* isInfallible. False in setters. */ | |||
15658 | false, /* isMovable. Not relevant for setters. */ | |||
15659 | false, /* isEliminatable. Not relevant for setters. */ | |||
15660 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15661 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15662 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15663 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15664 | }; | |||
15665 | ||||
15666 | MOZ_CAN_RUN_SCRIPT static bool | |||
15667 | passString(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15668 | { | |||
15669 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15672( cx, "TestExampleInterface" , "passString", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15670 | "TestExampleInterface", "passString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15672( cx, "TestExampleInterface" , "passString", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15671 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15672( cx, "TestExampleInterface" , "passString", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15672 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15672( cx, "TestExampleInterface" , "passString", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15673 | ||||
15674 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15675 | if (!args.requireAtLeast(cx, "TestExampleInterface.passString", 1)) { | |||
15676 | return false; | |||
15677 | } | |||
15678 | binding_detail::FakeString<char16_t> arg0; | |||
15679 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
15680 | return false; | |||
15681 | } | |||
15682 | // NOTE: This assert does NOT call the function. | |||
15683 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassString(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
15684 | MOZ_KnownLive(self)(self)->PassString(NonNullHelper(Constify(arg0))); | |||
15685 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15685); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15685; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15686 | args.rval().setUndefined(); | |||
15687 | return true; | |||
15688 | } | |||
15689 | ||||
15690 | static const JSJitInfo passString_methodinfo = { | |||
15691 | { (JSJitGetterOp)passString }, | |||
15692 | { prototypes::id::TestExampleInterface }, | |||
15693 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15694 | JSJitInfo::Method, | |||
15695 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15696 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15697 | false, /* isInfallible. False in setters. */ | |||
15698 | false, /* isMovable. Not relevant for setters. */ | |||
15699 | false, /* isEliminatable. Not relevant for setters. */ | |||
15700 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15701 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15702 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15703 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15704 | }; | |||
15705 | ||||
15706 | MOZ_CAN_RUN_SCRIPT static bool | |||
15707 | passNullableString(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15708 | { | |||
15709 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15712( cx, "TestExampleInterface" , "passNullableString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15710 | "TestExampleInterface", "passNullableString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15712( cx, "TestExampleInterface" , "passNullableString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15711 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15712( cx, "TestExampleInterface" , "passNullableString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15712 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15712( cx, "TestExampleInterface" , "passNullableString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15713 | ||||
15714 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15715 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableString", 1)) { | |||
15716 | return false; | |||
15717 | } | |||
15718 | binding_detail::FakeString<char16_t> arg0; | |||
15719 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) { | |||
15720 | return false; | |||
15721 | } | |||
15722 | // NOTE: This assert does NOT call the function. | |||
15723 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableString(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
15724 | MOZ_KnownLive(self)(self)->PassNullableString(NonNullHelper(Constify(arg0))); | |||
15725 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15725); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15725; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15726 | args.rval().setUndefined(); | |||
15727 | return true; | |||
15728 | } | |||
15729 | ||||
15730 | static const JSJitInfo passNullableString_methodinfo = { | |||
15731 | { (JSJitGetterOp)passNullableString }, | |||
15732 | { prototypes::id::TestExampleInterface }, | |||
15733 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15734 | JSJitInfo::Method, | |||
15735 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15736 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15737 | false, /* isInfallible. False in setters. */ | |||
15738 | false, /* isMovable. Not relevant for setters. */ | |||
15739 | false, /* isEliminatable. Not relevant for setters. */ | |||
15740 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15741 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15742 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15743 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15744 | }; | |||
15745 | ||||
15746 | MOZ_CAN_RUN_SCRIPT static bool | |||
15747 | passOptionalString(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15748 | { | |||
15749 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15752( cx, "TestExampleInterface" , "passOptionalString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15750 | "TestExampleInterface", "passOptionalString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15752( cx, "TestExampleInterface" , "passOptionalString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15751 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15752( cx, "TestExampleInterface" , "passOptionalString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15752 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15752( cx, "TestExampleInterface" , "passOptionalString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15753 | ||||
15754 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15755 | Optional<nsAString> arg0; | |||
15756 | binding_detail::FakeString<char16_t> arg0_holder; | |||
15757 | if (args.hasDefined(0)) { | |||
15758 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0_holder)) { | |||
15759 | return false; | |||
15760 | } | |||
15761 | arg0 = &arg0_holder; | |||
15762 | } | |||
15763 | // NOTE: This assert does NOT call the function. | |||
15764 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalString(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
15765 | MOZ_KnownLive(self)(self)->PassOptionalString(NonNullHelper(Constify(arg0))); | |||
15766 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15766); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15766; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15767 | args.rval().setUndefined(); | |||
15768 | return true; | |||
15769 | } | |||
15770 | ||||
15771 | static const JSJitInfo passOptionalString_methodinfo = { | |||
15772 | { (JSJitGetterOp)passOptionalString }, | |||
15773 | { prototypes::id::TestExampleInterface }, | |||
15774 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15775 | JSJitInfo::Method, | |||
15776 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15777 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15778 | false, /* isInfallible. False in setters. */ | |||
15779 | false, /* isMovable. Not relevant for setters. */ | |||
15780 | false, /* isEliminatable. Not relevant for setters. */ | |||
15781 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15782 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15783 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15784 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15785 | }; | |||
15786 | ||||
15787 | MOZ_CAN_RUN_SCRIPT static bool | |||
15788 | passOptionalStringWithDefaultValue(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15789 | { | |||
15790 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15793( cx, "TestExampleInterface" , "passOptionalStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15791 | "TestExampleInterface", "passOptionalStringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15793( cx, "TestExampleInterface" , "passOptionalStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15792 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15793( cx, "TestExampleInterface" , "passOptionalStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15793 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15793( cx, "TestExampleInterface" , "passOptionalStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
15794 | ||||
15795 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15796 | binding_detail::FakeString<char16_t> arg0; | |||
15797 | if (args.hasDefined(0)) { | |||
15798 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
15799 | return false; | |||
15800 | } | |||
15801 | } else { | |||
15802 | arg0.AssignLiteral(u"abc"); | |||
15803 | } | |||
15804 | // NOTE: This assert does NOT call the function. | |||
15805 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalStringWithDefaultValue(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
15806 | MOZ_KnownLive(self)(self)->PassOptionalStringWithDefaultValue(NonNullHelper(Constify(arg0))); | |||
15807 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15807); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15807; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15808 | args.rval().setUndefined(); | |||
15809 | return true; | |||
15810 | } | |||
15811 | ||||
15812 | static const JSJitInfo passOptionalStringWithDefaultValue_methodinfo = { | |||
15813 | { (JSJitGetterOp)passOptionalStringWithDefaultValue }, | |||
15814 | { prototypes::id::TestExampleInterface }, | |||
15815 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15816 | JSJitInfo::Method, | |||
15817 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15818 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15819 | false, /* isInfallible. False in setters. */ | |||
15820 | false, /* isMovable. Not relevant for setters. */ | |||
15821 | false, /* isEliminatable. Not relevant for setters. */ | |||
15822 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15823 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15824 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15825 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15826 | }; | |||
15827 | ||||
15828 | MOZ_CAN_RUN_SCRIPT static bool | |||
15829 | passOptionalNullableString(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15830 | { | |||
15831 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15834( cx, "TestExampleInterface" , "passOptionalNullableString", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15832 | "TestExampleInterface", "passOptionalNullableString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15834( cx, "TestExampleInterface" , "passOptionalNullableString", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15833 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15834( cx, "TestExampleInterface" , "passOptionalNullableString", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15834 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15834( cx, "TestExampleInterface" , "passOptionalNullableString", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
15835 | ||||
15836 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15837 | Optional<nsAString> arg0; | |||
15838 | binding_detail::FakeString<char16_t> arg0_holder; | |||
15839 | if (args.hasDefined(0)) { | |||
15840 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0_holder)) { | |||
15841 | return false; | |||
15842 | } | |||
15843 | arg0 = &arg0_holder; | |||
15844 | } | |||
15845 | // NOTE: This assert does NOT call the function. | |||
15846 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableString(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
15847 | MOZ_KnownLive(self)(self)->PassOptionalNullableString(NonNullHelper(Constify(arg0))); | |||
15848 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15848); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15848; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15849 | args.rval().setUndefined(); | |||
15850 | return true; | |||
15851 | } | |||
15852 | ||||
15853 | static const JSJitInfo passOptionalNullableString_methodinfo = { | |||
15854 | { (JSJitGetterOp)passOptionalNullableString }, | |||
15855 | { prototypes::id::TestExampleInterface }, | |||
15856 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15857 | JSJitInfo::Method, | |||
15858 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15859 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15860 | false, /* isInfallible. False in setters. */ | |||
15861 | false, /* isMovable. Not relevant for setters. */ | |||
15862 | false, /* isEliminatable. Not relevant for setters. */ | |||
15863 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15864 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15865 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15866 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15867 | }; | |||
15868 | ||||
15869 | MOZ_CAN_RUN_SCRIPT static bool | |||
15870 | passOptionalNullableStringWithDefaultValue(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15871 | { | |||
15872 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15875( cx, "TestExampleInterface" , "passOptionalNullableStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15873 | "TestExampleInterface", "passOptionalNullableStringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15875( cx, "TestExampleInterface" , "passOptionalNullableStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15874 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15875( cx, "TestExampleInterface" , "passOptionalNullableStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
15875 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15875( cx, "TestExampleInterface" , "passOptionalNullableStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
15876 | ||||
15877 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15878 | binding_detail::FakeString<char16_t> arg0; | |||
15879 | if (args.hasDefined(0)) { | |||
15880 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) { | |||
15881 | return false; | |||
15882 | } | |||
15883 | } else { | |||
15884 | arg0.SetIsVoid(true); | |||
15885 | } | |||
15886 | // NOTE: This assert does NOT call the function. | |||
15887 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableStringWithDefaultValue(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
15888 | MOZ_KnownLive(self)(self)->PassOptionalNullableStringWithDefaultValue(NonNullHelper(Constify(arg0))); | |||
15889 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15889); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15889; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15890 | args.rval().setUndefined(); | |||
15891 | return true; | |||
15892 | } | |||
15893 | ||||
15894 | static const JSJitInfo passOptionalNullableStringWithDefaultValue_methodinfo = { | |||
15895 | { (JSJitGetterOp)passOptionalNullableStringWithDefaultValue }, | |||
15896 | { prototypes::id::TestExampleInterface }, | |||
15897 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15898 | JSJitInfo::Method, | |||
15899 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15900 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15901 | false, /* isInfallible. False in setters. */ | |||
15902 | false, /* isMovable. Not relevant for setters. */ | |||
15903 | false, /* isEliminatable. Not relevant for setters. */ | |||
15904 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15905 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15906 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15907 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15908 | }; | |||
15909 | ||||
15910 | MOZ_CAN_RUN_SCRIPT static bool | |||
15911 | passVariadicString(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15912 | { | |||
15913 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15916( cx, "TestExampleInterface" , "passVariadicString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15914 | "TestExampleInterface", "passVariadicString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15916( cx, "TestExampleInterface" , "passVariadicString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15915 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15916( cx, "TestExampleInterface" , "passVariadicString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15916 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15916( cx, "TestExampleInterface" , "passVariadicString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15917 | ||||
15918 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15919 | AutoSequence<nsString> arg0; | |||
15920 | if (args.length() > 0) { | |||
15921 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
15922 | JS_ReportOutOfMemory(cx); | |||
15923 | return false; | |||
15924 | } | |||
15925 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
15926 | // OK to do infallible append here, since we ensured capacity already. | |||
15927 | nsString& slot = *arg0.AppendElement(); | |||
15928 | if (!ConvertJSValueToString(cx, args[variadicArg], eStringify, eStringify, slot)) { | |||
15929 | return false; | |||
15930 | } | |||
15931 | } | |||
15932 | } | |||
15933 | // NOTE: This assert does NOT call the function. | |||
15934 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicString(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
15935 | MOZ_KnownLive(self)(self)->PassVariadicString(NonNullHelper(Constify(arg0))); | |||
15936 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15936); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15936; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15937 | args.rval().setUndefined(); | |||
15938 | return true; | |||
15939 | } | |||
15940 | ||||
15941 | static const JSJitInfo passVariadicString_methodinfo = { | |||
15942 | { (JSJitGetterOp)passVariadicString }, | |||
15943 | { prototypes::id::TestExampleInterface }, | |||
15944 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15945 | JSJitInfo::Method, | |||
15946 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15947 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15948 | false, /* isInfallible. False in setters. */ | |||
15949 | false, /* isMovable. Not relevant for setters. */ | |||
15950 | false, /* isEliminatable. Not relevant for setters. */ | |||
15951 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15952 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15953 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15954 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15955 | }; | |||
15956 | ||||
15957 | MOZ_CAN_RUN_SCRIPT static bool | |||
15958 | passByteString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
15959 | { | |||
15960 | BindingCallContext cx(cx_, "TestExampleInterface.passByteString"); | |||
15961 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject15964( cx, "TestExampleInterface" , "passByteString", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15962 | "TestExampleInterface", "passByteString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject15964( cx, "TestExampleInterface" , "passByteString", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15963 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject15964( cx, "TestExampleInterface" , "passByteString", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
15964 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject15964( cx, "TestExampleInterface" , "passByteString", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
15965 | ||||
15966 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
15967 | if (!args.requireAtLeast(cx, "TestExampleInterface.passByteString", 1)) { | |||
15968 | return false; | |||
15969 | } | |||
15970 | nsCString arg0; | |||
15971 | if (!ConvertJSValueToByteString(cx, args[0], false, "argument 1", arg0)) { | |||
15972 | return false; | |||
15973 | } | |||
15974 | // NOTE: This assert does NOT call the function. | |||
15975 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassByteString(Constify(arg0)))>, "Should be returning void here"); | |||
15976 | MOZ_KnownLive(self)(self)->PassByteString(Constify(arg0)); | |||
15977 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 15977); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 15977; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
15978 | args.rval().setUndefined(); | |||
15979 | return true; | |||
15980 | } | |||
15981 | ||||
15982 | static const JSJitInfo passByteString_methodinfo = { | |||
15983 | { (JSJitGetterOp)passByteString }, | |||
15984 | { prototypes::id::TestExampleInterface }, | |||
15985 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
15986 | JSJitInfo::Method, | |||
15987 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
15988 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
15989 | false, /* isInfallible. False in setters. */ | |||
15990 | false, /* isMovable. Not relevant for setters. */ | |||
15991 | false, /* isEliminatable. Not relevant for setters. */ | |||
15992 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
15993 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
15994 | false, /* isTypedMethod. Only relevant for methods. */ | |||
15995 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
15996 | }; | |||
15997 | ||||
15998 | MOZ_CAN_RUN_SCRIPT static bool | |||
15999 | passNullableByteString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16000 | { | |||
16001 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableByteString"); | |||
16002 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16005( cx, "TestExampleInterface" , "passNullableByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16003 | "TestExampleInterface", "passNullableByteString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16005( cx, "TestExampleInterface" , "passNullableByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16004 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16005( cx, "TestExampleInterface" , "passNullableByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16005 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16005( cx, "TestExampleInterface" , "passNullableByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16006 | ||||
16007 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16008 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableByteString", 1)) { | |||
16009 | return false; | |||
16010 | } | |||
16011 | nsCString arg0; | |||
16012 | if (!ConvertJSValueToByteString(cx, args[0], true, "argument 1", arg0)) { | |||
16013 | return false; | |||
16014 | } | |||
16015 | // NOTE: This assert does NOT call the function. | |||
16016 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableByteString(Constify(arg0)))>, "Should be returning void here"); | |||
16017 | MOZ_KnownLive(self)(self)->PassNullableByteString(Constify(arg0)); | |||
16018 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16018); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16018; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16019 | args.rval().setUndefined(); | |||
16020 | return true; | |||
16021 | } | |||
16022 | ||||
16023 | static const JSJitInfo passNullableByteString_methodinfo = { | |||
16024 | { (JSJitGetterOp)passNullableByteString }, | |||
16025 | { prototypes::id::TestExampleInterface }, | |||
16026 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16027 | JSJitInfo::Method, | |||
16028 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16029 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16030 | false, /* isInfallible. False in setters. */ | |||
16031 | false, /* isMovable. Not relevant for setters. */ | |||
16032 | false, /* isEliminatable. Not relevant for setters. */ | |||
16033 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16034 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16035 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16036 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16037 | }; | |||
16038 | ||||
16039 | MOZ_CAN_RUN_SCRIPT static bool | |||
16040 | passOptionalByteString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16041 | { | |||
16042 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalByteString"); | |||
16043 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16046( cx, "TestExampleInterface" , "passOptionalByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16044 | "TestExampleInterface", "passOptionalByteString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16046( cx, "TestExampleInterface" , "passOptionalByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16045 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16046( cx, "TestExampleInterface" , "passOptionalByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16046 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16046( cx, "TestExampleInterface" , "passOptionalByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16047 | ||||
16048 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16049 | Optional<nsCString> arg0; | |||
16050 | if (args.hasDefined(0)) { | |||
16051 | arg0.Construct(); | |||
16052 | if (!ConvertJSValueToByteString(cx, args[0], false, "argument 1", arg0.Value())) { | |||
16053 | return false; | |||
16054 | } | |||
16055 | } | |||
16056 | // NOTE: This assert does NOT call the function. | |||
16057 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalByteString(Constify(arg0)))>, "Should be returning void here"); | |||
16058 | MOZ_KnownLive(self)(self)->PassOptionalByteString(Constify(arg0)); | |||
16059 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16059); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16059; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16060 | args.rval().setUndefined(); | |||
16061 | return true; | |||
16062 | } | |||
16063 | ||||
16064 | static const JSJitInfo passOptionalByteString_methodinfo = { | |||
16065 | { (JSJitGetterOp)passOptionalByteString }, | |||
16066 | { prototypes::id::TestExampleInterface }, | |||
16067 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16068 | JSJitInfo::Method, | |||
16069 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16070 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16071 | false, /* isInfallible. False in setters. */ | |||
16072 | false, /* isMovable. Not relevant for setters. */ | |||
16073 | false, /* isEliminatable. Not relevant for setters. */ | |||
16074 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16075 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16076 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16077 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16078 | }; | |||
16079 | ||||
16080 | MOZ_CAN_RUN_SCRIPT static bool | |||
16081 | passOptionalByteStringWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16082 | { | |||
16083 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalByteStringWithDefaultValue"); | |||
16084 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16087( cx, "TestExampleInterface" , "passOptionalByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16085 | "TestExampleInterface", "passOptionalByteStringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16087( cx, "TestExampleInterface" , "passOptionalByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16086 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16087( cx, "TestExampleInterface" , "passOptionalByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16087 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16087( cx, "TestExampleInterface" , "passOptionalByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16088 | ||||
16089 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16090 | nsCString arg0; | |||
16091 | if (args.hasDefined(0)) { | |||
16092 | if (!ConvertJSValueToByteString(cx, args[0], false, "argument 1", arg0)) { | |||
16093 | return false; | |||
16094 | } | |||
16095 | } else { | |||
16096 | arg0.AssignLiteral("abc"); | |||
16097 | } | |||
16098 | // NOTE: This assert does NOT call the function. | |||
16099 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalByteStringWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
16100 | MOZ_KnownLive(self)(self)->PassOptionalByteStringWithDefaultValue(Constify(arg0)); | |||
16101 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16101); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16101; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16102 | args.rval().setUndefined(); | |||
16103 | return true; | |||
16104 | } | |||
16105 | ||||
16106 | static const JSJitInfo passOptionalByteStringWithDefaultValue_methodinfo = { | |||
16107 | { (JSJitGetterOp)passOptionalByteStringWithDefaultValue }, | |||
16108 | { prototypes::id::TestExampleInterface }, | |||
16109 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16110 | JSJitInfo::Method, | |||
16111 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16112 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16113 | false, /* isInfallible. False in setters. */ | |||
16114 | false, /* isMovable. Not relevant for setters. */ | |||
16115 | false, /* isEliminatable. Not relevant for setters. */ | |||
16116 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16117 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16118 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16119 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16120 | }; | |||
16121 | ||||
16122 | MOZ_CAN_RUN_SCRIPT static bool | |||
16123 | passOptionalNullableByteString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16124 | { | |||
16125 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableByteString"); | |||
16126 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16129( cx, "TestExampleInterface" , "passOptionalNullableByteString", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16127 | "TestExampleInterface", "passOptionalNullableByteString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16129( cx, "TestExampleInterface" , "passOptionalNullableByteString", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16128 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16129( cx, "TestExampleInterface" , "passOptionalNullableByteString", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16129 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16129( cx, "TestExampleInterface" , "passOptionalNullableByteString", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16130 | ||||
16131 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16132 | Optional<nsCString> arg0; | |||
16133 | if (args.hasDefined(0)) { | |||
16134 | arg0.Construct(); | |||
16135 | if (!ConvertJSValueToByteString(cx, args[0], true, "argument 1", arg0.Value())) { | |||
16136 | return false; | |||
16137 | } | |||
16138 | } | |||
16139 | // NOTE: This assert does NOT call the function. | |||
16140 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableByteString(Constify(arg0)))>, "Should be returning void here"); | |||
16141 | MOZ_KnownLive(self)(self)->PassOptionalNullableByteString(Constify(arg0)); | |||
16142 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16142); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16142; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16143 | args.rval().setUndefined(); | |||
16144 | return true; | |||
16145 | } | |||
16146 | ||||
16147 | static const JSJitInfo passOptionalNullableByteString_methodinfo = { | |||
16148 | { (JSJitGetterOp)passOptionalNullableByteString }, | |||
16149 | { prototypes::id::TestExampleInterface }, | |||
16150 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16151 | JSJitInfo::Method, | |||
16152 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16153 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16154 | false, /* isInfallible. False in setters. */ | |||
16155 | false, /* isMovable. Not relevant for setters. */ | |||
16156 | false, /* isEliminatable. Not relevant for setters. */ | |||
16157 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16158 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16159 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16160 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16161 | }; | |||
16162 | ||||
16163 | MOZ_CAN_RUN_SCRIPT static bool | |||
16164 | passOptionalNullableByteStringWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16165 | { | |||
16166 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableByteStringWithDefaultValue"); | |||
16167 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16170( cx, "TestExampleInterface" , "passOptionalNullableByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16168 | "TestExampleInterface", "passOptionalNullableByteStringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16170( cx, "TestExampleInterface" , "passOptionalNullableByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16169 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16170( cx, "TestExampleInterface" , "passOptionalNullableByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16170 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16170( cx, "TestExampleInterface" , "passOptionalNullableByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16171 | ||||
16172 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16173 | nsCString arg0; | |||
16174 | if (args.hasDefined(0)) { | |||
16175 | if (!ConvertJSValueToByteString(cx, args[0], true, "argument 1", arg0)) { | |||
16176 | return false; | |||
16177 | } | |||
16178 | } else { | |||
16179 | arg0.SetIsVoid(true); | |||
16180 | } | |||
16181 | // NOTE: This assert does NOT call the function. | |||
16182 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableByteStringWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
16183 | MOZ_KnownLive(self)(self)->PassOptionalNullableByteStringWithDefaultValue(Constify(arg0)); | |||
16184 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16184); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16184; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16185 | args.rval().setUndefined(); | |||
16186 | return true; | |||
16187 | } | |||
16188 | ||||
16189 | static const JSJitInfo passOptionalNullableByteStringWithDefaultValue_methodinfo = { | |||
16190 | { (JSJitGetterOp)passOptionalNullableByteStringWithDefaultValue }, | |||
16191 | { prototypes::id::TestExampleInterface }, | |||
16192 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16193 | JSJitInfo::Method, | |||
16194 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16195 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16196 | false, /* isInfallible. False in setters. */ | |||
16197 | false, /* isMovable. Not relevant for setters. */ | |||
16198 | false, /* isEliminatable. Not relevant for setters. */ | |||
16199 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16200 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16201 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16202 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16203 | }; | |||
16204 | ||||
16205 | MOZ_CAN_RUN_SCRIPT static bool | |||
16206 | passVariadicByteString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16207 | { | |||
16208 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicByteString"); | |||
16209 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16212( cx, "TestExampleInterface" , "passVariadicByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16210 | "TestExampleInterface", "passVariadicByteString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16212( cx, "TestExampleInterface" , "passVariadicByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16211 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16212( cx, "TestExampleInterface" , "passVariadicByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16212 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16212( cx, "TestExampleInterface" , "passVariadicByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16213 | ||||
16214 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16215 | AutoSequence<nsCString> arg0; | |||
16216 | if (args.length() > 0) { | |||
16217 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
16218 | JS_ReportOutOfMemory(cx); | |||
16219 | return false; | |||
16220 | } | |||
16221 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
16222 | // OK to do infallible append here, since we ensured capacity already. | |||
16223 | nsCString& slot = *arg0.AppendElement(); | |||
16224 | if (!ConvertJSValueToByteString(cx, args[variadicArg], false, "argument 1", slot)) { | |||
16225 | return false; | |||
16226 | } | |||
16227 | } | |||
16228 | } | |||
16229 | // NOTE: This assert does NOT call the function. | |||
16230 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicByteString(Constify(arg0)))>, "Should be returning void here"); | |||
16231 | MOZ_KnownLive(self)(self)->PassVariadicByteString(Constify(arg0)); | |||
16232 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16232); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16232; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16233 | args.rval().setUndefined(); | |||
16234 | return true; | |||
16235 | } | |||
16236 | ||||
16237 | static const JSJitInfo passVariadicByteString_methodinfo = { | |||
16238 | { (JSJitGetterOp)passVariadicByteString }, | |||
16239 | { prototypes::id::TestExampleInterface }, | |||
16240 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16241 | JSJitInfo::Method, | |||
16242 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16243 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16244 | false, /* isInfallible. False in setters. */ | |||
16245 | false, /* isMovable. Not relevant for setters. */ | |||
16246 | false, /* isEliminatable. Not relevant for setters. */ | |||
16247 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16248 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16249 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16250 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16251 | }; | |||
16252 | ||||
16253 | MOZ_CAN_RUN_SCRIPT static bool | |||
16254 | passUnionByteString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16255 | { | |||
16256 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionByteString"); | |||
16257 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16260( cx, "TestExampleInterface" , "passUnionByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16258 | "TestExampleInterface", "passUnionByteString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16260( cx, "TestExampleInterface" , "passUnionByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16259 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16260( cx, "TestExampleInterface" , "passUnionByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16260 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16260( cx, "TestExampleInterface" , "passUnionByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16261 | ||||
16262 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16263 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionByteString", 1)) { | |||
16264 | return false; | |||
16265 | } | |||
16266 | ByteStringOrLong arg0; | |||
16267 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
16268 | return false; | |||
16269 | } | |||
16270 | // NOTE: This assert does NOT call the function. | |||
16271 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionByteString(Constify(arg0)))>, "Should be returning void here"); | |||
16272 | MOZ_KnownLive(self)(self)->PassUnionByteString(Constify(arg0)); | |||
16273 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16273); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16273; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16274 | args.rval().setUndefined(); | |||
16275 | return true; | |||
16276 | } | |||
16277 | ||||
16278 | static const JSJitInfo passUnionByteString_methodinfo = { | |||
16279 | { (JSJitGetterOp)passUnionByteString }, | |||
16280 | { prototypes::id::TestExampleInterface }, | |||
16281 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16282 | JSJitInfo::Method, | |||
16283 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16284 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16285 | false, /* isInfallible. False in setters. */ | |||
16286 | false, /* isMovable. Not relevant for setters. */ | |||
16287 | false, /* isEliminatable. Not relevant for setters. */ | |||
16288 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16289 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16290 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16291 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16292 | }; | |||
16293 | ||||
16294 | MOZ_CAN_RUN_SCRIPT static bool | |||
16295 | passOptionalUnionByteString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16296 | { | |||
16297 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalUnionByteString"); | |||
16298 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16301( cx, "TestExampleInterface" , "passOptionalUnionByteString", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16299 | "TestExampleInterface", "passOptionalUnionByteString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16301( cx, "TestExampleInterface" , "passOptionalUnionByteString", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16300 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16301( cx, "TestExampleInterface" , "passOptionalUnionByteString", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16301 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16301( cx, "TestExampleInterface" , "passOptionalUnionByteString", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16302 | ||||
16303 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16304 | Optional<ByteStringOrLong> arg0; | |||
16305 | if (args.hasDefined(0)) { | |||
16306 | arg0.Construct(); | |||
16307 | if (!arg0.Value().Init(cx, args[0], "Argument 1", false)) { | |||
16308 | return false; | |||
16309 | } | |||
16310 | } | |||
16311 | // NOTE: This assert does NOT call the function. | |||
16312 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnionByteString(Constify(arg0)))>, "Should be returning void here"); | |||
16313 | MOZ_KnownLive(self)(self)->PassOptionalUnionByteString(Constify(arg0)); | |||
16314 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16314); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16314; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16315 | args.rval().setUndefined(); | |||
16316 | return true; | |||
16317 | } | |||
16318 | ||||
16319 | static const JSJitInfo passOptionalUnionByteString_methodinfo = { | |||
16320 | { (JSJitGetterOp)passOptionalUnionByteString }, | |||
16321 | { prototypes::id::TestExampleInterface }, | |||
16322 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16323 | JSJitInfo::Method, | |||
16324 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16325 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16326 | false, /* isInfallible. False in setters. */ | |||
16327 | false, /* isMovable. Not relevant for setters. */ | |||
16328 | false, /* isEliminatable. Not relevant for setters. */ | |||
16329 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16330 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16331 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16332 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16333 | }; | |||
16334 | ||||
16335 | MOZ_CAN_RUN_SCRIPT static bool | |||
16336 | passOptionalUnionByteStringWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16337 | { | |||
16338 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalUnionByteStringWithDefaultValue"); | |||
16339 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16342( cx, "TestExampleInterface" , "passOptionalUnionByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16340 | "TestExampleInterface", "passOptionalUnionByteStringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16342( cx, "TestExampleInterface" , "passOptionalUnionByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16341 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16342( cx, "TestExampleInterface" , "passOptionalUnionByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16342 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16342( cx, "TestExampleInterface" , "passOptionalUnionByteStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16343 | ||||
16344 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16345 | ByteStringOrLong arg0; | |||
16346 | if (!(args.hasDefined(0))) { | |||
16347 | arg0.SetStringLiteral("abc"); | |||
16348 | } else { | |||
16349 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
16350 | return false; | |||
16351 | } | |||
16352 | } | |||
16353 | // NOTE: This assert does NOT call the function. | |||
16354 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnionByteStringWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
16355 | MOZ_KnownLive(self)(self)->PassOptionalUnionByteStringWithDefaultValue(Constify(arg0)); | |||
16356 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16356); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16356; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16357 | args.rval().setUndefined(); | |||
16358 | return true; | |||
16359 | } | |||
16360 | ||||
16361 | static const JSJitInfo passOptionalUnionByteStringWithDefaultValue_methodinfo = { | |||
16362 | { (JSJitGetterOp)passOptionalUnionByteStringWithDefaultValue }, | |||
16363 | { prototypes::id::TestExampleInterface }, | |||
16364 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16365 | JSJitInfo::Method, | |||
16366 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16367 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16368 | false, /* isInfallible. False in setters. */ | |||
16369 | false, /* isMovable. Not relevant for setters. */ | |||
16370 | false, /* isEliminatable. Not relevant for setters. */ | |||
16371 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16372 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16373 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16374 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16375 | }; | |||
16376 | ||||
16377 | MOZ_CAN_RUN_SCRIPT static bool | |||
16378 | passUTF8String(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16379 | { | |||
16380 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16383( cx, "TestExampleInterface" , "passUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16381 | "TestExampleInterface", "passUTF8String", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16383( cx, "TestExampleInterface" , "passUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16382 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16383( cx, "TestExampleInterface" , "passUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16383 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16383( cx, "TestExampleInterface" , "passUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16384 | ||||
16385 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16386 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUTF8String", 1)) { | |||
16387 | return false; | |||
16388 | } | |||
16389 | binding_detail::FakeString<char> arg0; | |||
16390 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
16391 | return false; | |||
16392 | } | |||
16393 | // NOTE: This assert does NOT call the function. | |||
16394 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUTF8String(Constify(arg0)))>, "Should be returning void here"); | |||
16395 | MOZ_KnownLive(self)(self)->PassUTF8String(Constify(arg0)); | |||
16396 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16396); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16396; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16397 | args.rval().setUndefined(); | |||
16398 | return true; | |||
16399 | } | |||
16400 | ||||
16401 | static const JSJitInfo passUTF8String_methodinfo = { | |||
16402 | { (JSJitGetterOp)passUTF8String }, | |||
16403 | { prototypes::id::TestExampleInterface }, | |||
16404 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16405 | JSJitInfo::Method, | |||
16406 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16407 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16408 | false, /* isInfallible. False in setters. */ | |||
16409 | false, /* isMovable. Not relevant for setters. */ | |||
16410 | false, /* isEliminatable. Not relevant for setters. */ | |||
16411 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16412 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16413 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16414 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16415 | }; | |||
16416 | ||||
16417 | MOZ_CAN_RUN_SCRIPT static bool | |||
16418 | passNullableUTF8String(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16419 | { | |||
16420 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16423( cx, "TestExampleInterface" , "passNullableUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16421 | "TestExampleInterface", "passNullableUTF8String", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16423( cx, "TestExampleInterface" , "passNullableUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16422 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16423( cx, "TestExampleInterface" , "passNullableUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16423 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16423( cx, "TestExampleInterface" , "passNullableUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16424 | ||||
16425 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16426 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableUTF8String", 1)) { | |||
16427 | return false; | |||
16428 | } | |||
16429 | binding_detail::FakeString<char> arg0; | |||
16430 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) { | |||
16431 | return false; | |||
16432 | } | |||
16433 | // NOTE: This assert does NOT call the function. | |||
16434 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUTF8String(Constify(arg0)))>, "Should be returning void here"); | |||
16435 | MOZ_KnownLive(self)(self)->PassNullableUTF8String(Constify(arg0)); | |||
16436 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16436); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16436; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16437 | args.rval().setUndefined(); | |||
16438 | return true; | |||
16439 | } | |||
16440 | ||||
16441 | static const JSJitInfo passNullableUTF8String_methodinfo = { | |||
16442 | { (JSJitGetterOp)passNullableUTF8String }, | |||
16443 | { prototypes::id::TestExampleInterface }, | |||
16444 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16445 | JSJitInfo::Method, | |||
16446 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16447 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16448 | false, /* isInfallible. False in setters. */ | |||
16449 | false, /* isMovable. Not relevant for setters. */ | |||
16450 | false, /* isEliminatable. Not relevant for setters. */ | |||
16451 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16452 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16453 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16454 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16455 | }; | |||
16456 | ||||
16457 | MOZ_CAN_RUN_SCRIPT static bool | |||
16458 | passOptionalUTF8String(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16459 | { | |||
16460 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16463( cx, "TestExampleInterface" , "passOptionalUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16461 | "TestExampleInterface", "passOptionalUTF8String", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16463( cx, "TestExampleInterface" , "passOptionalUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16462 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16463( cx, "TestExampleInterface" , "passOptionalUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16463 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16463( cx, "TestExampleInterface" , "passOptionalUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16464 | ||||
16465 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16466 | Optional<nsACString> arg0; | |||
16467 | binding_detail::FakeString<char> arg0_holder; | |||
16468 | if (args.hasDefined(0)) { | |||
16469 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0_holder)) { | |||
16470 | return false; | |||
16471 | } | |||
16472 | arg0 = &arg0_holder; | |||
16473 | } | |||
16474 | // NOTE: This assert does NOT call the function. | |||
16475 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUTF8String(Constify(arg0)))>, "Should be returning void here"); | |||
16476 | MOZ_KnownLive(self)(self)->PassOptionalUTF8String(Constify(arg0)); | |||
16477 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16477); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16477; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16478 | args.rval().setUndefined(); | |||
16479 | return true; | |||
16480 | } | |||
16481 | ||||
16482 | static const JSJitInfo passOptionalUTF8String_methodinfo = { | |||
16483 | { (JSJitGetterOp)passOptionalUTF8String }, | |||
16484 | { prototypes::id::TestExampleInterface }, | |||
16485 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16486 | JSJitInfo::Method, | |||
16487 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16488 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16489 | false, /* isInfallible. False in setters. */ | |||
16490 | false, /* isMovable. Not relevant for setters. */ | |||
16491 | false, /* isEliminatable. Not relevant for setters. */ | |||
16492 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16493 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16494 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16495 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16496 | }; | |||
16497 | ||||
16498 | MOZ_CAN_RUN_SCRIPT static bool | |||
16499 | passOptionalUTF8StringWithDefaultValue(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16500 | { | |||
16501 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16504( cx, "TestExampleInterface" , "passOptionalUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16502 | "TestExampleInterface", "passOptionalUTF8StringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16504( cx, "TestExampleInterface" , "passOptionalUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16503 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16504( cx, "TestExampleInterface" , "passOptionalUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16504 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16504( cx, "TestExampleInterface" , "passOptionalUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16505 | ||||
16506 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16507 | binding_detail::FakeString<char> arg0; | |||
16508 | if (args.hasDefined(0)) { | |||
16509 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
16510 | return false; | |||
16511 | } | |||
16512 | } else { | |||
16513 | arg0.AssignLiteral("abc"); | |||
16514 | } | |||
16515 | // NOTE: This assert does NOT call the function. | |||
16516 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUTF8StringWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
16517 | MOZ_KnownLive(self)(self)->PassOptionalUTF8StringWithDefaultValue(Constify(arg0)); | |||
16518 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16518); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16518; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16519 | args.rval().setUndefined(); | |||
16520 | return true; | |||
16521 | } | |||
16522 | ||||
16523 | static const JSJitInfo passOptionalUTF8StringWithDefaultValue_methodinfo = { | |||
16524 | { (JSJitGetterOp)passOptionalUTF8StringWithDefaultValue }, | |||
16525 | { prototypes::id::TestExampleInterface }, | |||
16526 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16527 | JSJitInfo::Method, | |||
16528 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16529 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16530 | false, /* isInfallible. False in setters. */ | |||
16531 | false, /* isMovable. Not relevant for setters. */ | |||
16532 | false, /* isEliminatable. Not relevant for setters. */ | |||
16533 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16534 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16535 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16536 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16537 | }; | |||
16538 | ||||
16539 | MOZ_CAN_RUN_SCRIPT static bool | |||
16540 | passOptionalNullableUTF8String(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16541 | { | |||
16542 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16545( cx, "TestExampleInterface" , "passOptionalNullableUTF8String", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16543 | "TestExampleInterface", "passOptionalNullableUTF8String", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16545( cx, "TestExampleInterface" , "passOptionalNullableUTF8String", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16544 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16545( cx, "TestExampleInterface" , "passOptionalNullableUTF8String", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16545 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16545( cx, "TestExampleInterface" , "passOptionalNullableUTF8String", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16546 | ||||
16547 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16548 | Optional<nsACString> arg0; | |||
16549 | binding_detail::FakeString<char> arg0_holder; | |||
16550 | if (args.hasDefined(0)) { | |||
16551 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0_holder)) { | |||
16552 | return false; | |||
16553 | } | |||
16554 | arg0 = &arg0_holder; | |||
16555 | } | |||
16556 | // NOTE: This assert does NOT call the function. | |||
16557 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableUTF8String(Constify(arg0)))>, "Should be returning void here"); | |||
16558 | MOZ_KnownLive(self)(self)->PassOptionalNullableUTF8String(Constify(arg0)); | |||
16559 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16559); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16559; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16560 | args.rval().setUndefined(); | |||
16561 | return true; | |||
16562 | } | |||
16563 | ||||
16564 | static const JSJitInfo passOptionalNullableUTF8String_methodinfo = { | |||
16565 | { (JSJitGetterOp)passOptionalNullableUTF8String }, | |||
16566 | { prototypes::id::TestExampleInterface }, | |||
16567 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16568 | JSJitInfo::Method, | |||
16569 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16570 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16571 | false, /* isInfallible. False in setters. */ | |||
16572 | false, /* isMovable. Not relevant for setters. */ | |||
16573 | false, /* isEliminatable. Not relevant for setters. */ | |||
16574 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16575 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16576 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16577 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16578 | }; | |||
16579 | ||||
16580 | MOZ_CAN_RUN_SCRIPT static bool | |||
16581 | passOptionalNullableUTF8StringWithDefaultValue(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16582 | { | |||
16583 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16586( cx, "TestExampleInterface" , "passOptionalNullableUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16584 | "TestExampleInterface", "passOptionalNullableUTF8StringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16586( cx, "TestExampleInterface" , "passOptionalNullableUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16585 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16586( cx, "TestExampleInterface" , "passOptionalNullableUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16586 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16586( cx, "TestExampleInterface" , "passOptionalNullableUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16587 | ||||
16588 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16589 | binding_detail::FakeString<char> arg0; | |||
16590 | if (args.hasDefined(0)) { | |||
16591 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) { | |||
16592 | return false; | |||
16593 | } | |||
16594 | } else { | |||
16595 | arg0.SetIsVoid(true); | |||
16596 | } | |||
16597 | // NOTE: This assert does NOT call the function. | |||
16598 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableUTF8StringWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
16599 | MOZ_KnownLive(self)(self)->PassOptionalNullableUTF8StringWithDefaultValue(Constify(arg0)); | |||
16600 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16600); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16600; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16601 | args.rval().setUndefined(); | |||
16602 | return true; | |||
16603 | } | |||
16604 | ||||
16605 | static const JSJitInfo passOptionalNullableUTF8StringWithDefaultValue_methodinfo = { | |||
16606 | { (JSJitGetterOp)passOptionalNullableUTF8StringWithDefaultValue }, | |||
16607 | { prototypes::id::TestExampleInterface }, | |||
16608 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16609 | JSJitInfo::Method, | |||
16610 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16611 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16612 | false, /* isInfallible. False in setters. */ | |||
16613 | false, /* isMovable. Not relevant for setters. */ | |||
16614 | false, /* isEliminatable. Not relevant for setters. */ | |||
16615 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16616 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16617 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16618 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16619 | }; | |||
16620 | ||||
16621 | MOZ_CAN_RUN_SCRIPT static bool | |||
16622 | passVariadicUTF8String(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16623 | { | |||
16624 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16627( cx, "TestExampleInterface" , "passVariadicUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16625 | "TestExampleInterface", "passVariadicUTF8String", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16627( cx, "TestExampleInterface" , "passVariadicUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16626 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16627( cx, "TestExampleInterface" , "passVariadicUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16627 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16627( cx, "TestExampleInterface" , "passVariadicUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16628 | ||||
16629 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16630 | AutoSequence<nsCString> arg0; | |||
16631 | if (args.length() > 0) { | |||
16632 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
16633 | JS_ReportOutOfMemory(cx); | |||
16634 | return false; | |||
16635 | } | |||
16636 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
16637 | // OK to do infallible append here, since we ensured capacity already. | |||
16638 | nsCString& slot = *arg0.AppendElement(); | |||
16639 | if (!ConvertJSValueToString(cx, args[variadicArg], eStringify, eStringify, slot)) { | |||
16640 | return false; | |||
16641 | } | |||
16642 | } | |||
16643 | } | |||
16644 | // NOTE: This assert does NOT call the function. | |||
16645 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicUTF8String(Constify(arg0)))>, "Should be returning void here"); | |||
16646 | MOZ_KnownLive(self)(self)->PassVariadicUTF8String(Constify(arg0)); | |||
16647 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16647); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16647; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16648 | args.rval().setUndefined(); | |||
16649 | return true; | |||
16650 | } | |||
16651 | ||||
16652 | static const JSJitInfo passVariadicUTF8String_methodinfo = { | |||
16653 | { (JSJitGetterOp)passVariadicUTF8String }, | |||
16654 | { prototypes::id::TestExampleInterface }, | |||
16655 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16656 | JSJitInfo::Method, | |||
16657 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16658 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16659 | false, /* isInfallible. False in setters. */ | |||
16660 | false, /* isMovable. Not relevant for setters. */ | |||
16661 | false, /* isEliminatable. Not relevant for setters. */ | |||
16662 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16663 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16664 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16665 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16666 | }; | |||
16667 | ||||
16668 | MOZ_CAN_RUN_SCRIPT static bool | |||
16669 | passUnionUTF8String(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16670 | { | |||
16671 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionUTF8String"); | |||
16672 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16675( cx, "TestExampleInterface" , "passUnionUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16673 | "TestExampleInterface", "passUnionUTF8String", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16675( cx, "TestExampleInterface" , "passUnionUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16674 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16675( cx, "TestExampleInterface" , "passUnionUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16675 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16675( cx, "TestExampleInterface" , "passUnionUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16676 | ||||
16677 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16678 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionUTF8String", 1)) { | |||
16679 | return false; | |||
16680 | } | |||
16681 | UTF8StringOrLong arg0; | |||
16682 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
16683 | return false; | |||
16684 | } | |||
16685 | // NOTE: This assert does NOT call the function. | |||
16686 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionUTF8String(Constify(arg0)))>, "Should be returning void here"); | |||
16687 | MOZ_KnownLive(self)(self)->PassUnionUTF8String(Constify(arg0)); | |||
16688 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16688); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16688; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16689 | args.rval().setUndefined(); | |||
16690 | return true; | |||
16691 | } | |||
16692 | ||||
16693 | static const JSJitInfo passUnionUTF8String_methodinfo = { | |||
16694 | { (JSJitGetterOp)passUnionUTF8String }, | |||
16695 | { prototypes::id::TestExampleInterface }, | |||
16696 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16697 | JSJitInfo::Method, | |||
16698 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16699 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16700 | false, /* isInfallible. False in setters. */ | |||
16701 | false, /* isMovable. Not relevant for setters. */ | |||
16702 | false, /* isEliminatable. Not relevant for setters. */ | |||
16703 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16704 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16705 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16706 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16707 | }; | |||
16708 | ||||
16709 | MOZ_CAN_RUN_SCRIPT static bool | |||
16710 | passOptionalUnionUTF8String(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16711 | { | |||
16712 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalUnionUTF8String"); | |||
16713 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16716( cx, "TestExampleInterface" , "passOptionalUnionUTF8String", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16714 | "TestExampleInterface", "passOptionalUnionUTF8String", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16716( cx, "TestExampleInterface" , "passOptionalUnionUTF8String", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16715 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16716( cx, "TestExampleInterface" , "passOptionalUnionUTF8String", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16716 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16716( cx, "TestExampleInterface" , "passOptionalUnionUTF8String", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16717 | ||||
16718 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16719 | Optional<UTF8StringOrLong> arg0; | |||
16720 | if (args.hasDefined(0)) { | |||
16721 | arg0.Construct(); | |||
16722 | if (!arg0.Value().Init(cx, args[0], "Argument 1", false)) { | |||
16723 | return false; | |||
16724 | } | |||
16725 | } | |||
16726 | // NOTE: This assert does NOT call the function. | |||
16727 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnionUTF8String(Constify(arg0)))>, "Should be returning void here"); | |||
16728 | MOZ_KnownLive(self)(self)->PassOptionalUnionUTF8String(Constify(arg0)); | |||
16729 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16729); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16729; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16730 | args.rval().setUndefined(); | |||
16731 | return true; | |||
16732 | } | |||
16733 | ||||
16734 | static const JSJitInfo passOptionalUnionUTF8String_methodinfo = { | |||
16735 | { (JSJitGetterOp)passOptionalUnionUTF8String }, | |||
16736 | { prototypes::id::TestExampleInterface }, | |||
16737 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16738 | JSJitInfo::Method, | |||
16739 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16740 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16741 | false, /* isInfallible. False in setters. */ | |||
16742 | false, /* isMovable. Not relevant for setters. */ | |||
16743 | false, /* isEliminatable. Not relevant for setters. */ | |||
16744 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16745 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16746 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16747 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16748 | }; | |||
16749 | ||||
16750 | MOZ_CAN_RUN_SCRIPT static bool | |||
16751 | passOptionalUnionUTF8StringWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16752 | { | |||
16753 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalUnionUTF8StringWithDefaultValue"); | |||
16754 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16757( cx, "TestExampleInterface" , "passOptionalUnionUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16755 | "TestExampleInterface", "passOptionalUnionUTF8StringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16757( cx, "TestExampleInterface" , "passOptionalUnionUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16756 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16757( cx, "TestExampleInterface" , "passOptionalUnionUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16757 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16757( cx, "TestExampleInterface" , "passOptionalUnionUTF8StringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16758 | ||||
16759 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16760 | UTF8StringOrLong arg0; | |||
16761 | if (!(args.hasDefined(0))) { | |||
16762 | arg0.SetStringLiteral("abc"); | |||
16763 | } else { | |||
16764 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
16765 | return false; | |||
16766 | } | |||
16767 | } | |||
16768 | // NOTE: This assert does NOT call the function. | |||
16769 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnionUTF8StringWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
16770 | MOZ_KnownLive(self)(self)->PassOptionalUnionUTF8StringWithDefaultValue(Constify(arg0)); | |||
16771 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16771); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16771; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16772 | args.rval().setUndefined(); | |||
16773 | return true; | |||
16774 | } | |||
16775 | ||||
16776 | static const JSJitInfo passOptionalUnionUTF8StringWithDefaultValue_methodinfo = { | |||
16777 | { (JSJitGetterOp)passOptionalUnionUTF8StringWithDefaultValue }, | |||
16778 | { prototypes::id::TestExampleInterface }, | |||
16779 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16780 | JSJitInfo::Method, | |||
16781 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16782 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16783 | false, /* isInfallible. False in setters. */ | |||
16784 | false, /* isMovable. Not relevant for setters. */ | |||
16785 | false, /* isEliminatable. Not relevant for setters. */ | |||
16786 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16787 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16788 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16789 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16790 | }; | |||
16791 | ||||
16792 | MOZ_CAN_RUN_SCRIPT static bool | |||
16793 | passSVS(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16794 | { | |||
16795 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16798( cx, "TestExampleInterface" , "passSVS", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
16796 | "TestExampleInterface", "passSVS", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16798( cx, "TestExampleInterface" , "passSVS", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
16797 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16798( cx, "TestExampleInterface" , "passSVS", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
16798 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16798( cx, "TestExampleInterface" , "passSVS", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
16799 | ||||
16800 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16801 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSVS", 1)) { | |||
16802 | return false; | |||
16803 | } | |||
16804 | binding_detail::FakeString<char16_t> arg0; | |||
16805 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
16806 | return false; | |||
16807 | } | |||
16808 | if (!NormalizeUSVString(arg0)) { | |||
16809 | JS_ReportOutOfMemory(cx); | |||
16810 | return false; | |||
16811 | } | |||
16812 | // NOTE: This assert does NOT call the function. | |||
16813 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSVS(Constify(arg0)))>, "Should be returning void here"); | |||
16814 | MOZ_KnownLive(self)(self)->PassSVS(Constify(arg0)); | |||
16815 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16815); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16815; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16816 | args.rval().setUndefined(); | |||
16817 | return true; | |||
16818 | } | |||
16819 | ||||
16820 | static const JSJitInfo passSVS_methodinfo = { | |||
16821 | { (JSJitGetterOp)passSVS }, | |||
16822 | { prototypes::id::TestExampleInterface }, | |||
16823 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16824 | JSJitInfo::Method, | |||
16825 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16826 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16827 | false, /* isInfallible. False in setters. */ | |||
16828 | false, /* isMovable. Not relevant for setters. */ | |||
16829 | false, /* isEliminatable. Not relevant for setters. */ | |||
16830 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16831 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16832 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16833 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16834 | }; | |||
16835 | ||||
16836 | MOZ_CAN_RUN_SCRIPT static bool | |||
16837 | passNullableSVS(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16838 | { | |||
16839 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16842( cx, "TestExampleInterface" , "passNullableSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16840 | "TestExampleInterface", "passNullableSVS", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16842( cx, "TestExampleInterface" , "passNullableSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16841 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16842( cx, "TestExampleInterface" , "passNullableSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16842 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16842( cx, "TestExampleInterface" , "passNullableSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16843 | ||||
16844 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16845 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableSVS", 1)) { | |||
16846 | return false; | |||
16847 | } | |||
16848 | binding_detail::FakeString<char16_t> arg0; | |||
16849 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) { | |||
16850 | return false; | |||
16851 | } | |||
16852 | if (!NormalizeUSVString(arg0)) { | |||
16853 | JS_ReportOutOfMemory(cx); | |||
16854 | return false; | |||
16855 | } | |||
16856 | // NOTE: This assert does NOT call the function. | |||
16857 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableSVS(Constify(arg0)))>, "Should be returning void here"); | |||
16858 | MOZ_KnownLive(self)(self)->PassNullableSVS(Constify(arg0)); | |||
16859 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16859); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16859; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16860 | args.rval().setUndefined(); | |||
16861 | return true; | |||
16862 | } | |||
16863 | ||||
16864 | static const JSJitInfo passNullableSVS_methodinfo = { | |||
16865 | { (JSJitGetterOp)passNullableSVS }, | |||
16866 | { prototypes::id::TestExampleInterface }, | |||
16867 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16868 | JSJitInfo::Method, | |||
16869 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16870 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16871 | false, /* isInfallible. False in setters. */ | |||
16872 | false, /* isMovable. Not relevant for setters. */ | |||
16873 | false, /* isEliminatable. Not relevant for setters. */ | |||
16874 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16875 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16876 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16877 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16878 | }; | |||
16879 | ||||
16880 | MOZ_CAN_RUN_SCRIPT static bool | |||
16881 | passOptionalSVS(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16882 | { | |||
16883 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16886( cx, "TestExampleInterface" , "passOptionalSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16884 | "TestExampleInterface", "passOptionalSVS", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16886( cx, "TestExampleInterface" , "passOptionalSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16885 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16886( cx, "TestExampleInterface" , "passOptionalSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16886 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16886( cx, "TestExampleInterface" , "passOptionalSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16887 | ||||
16888 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16889 | Optional<nsAString> arg0; | |||
16890 | binding_detail::FakeString<char16_t> arg0_holder; | |||
16891 | if (args.hasDefined(0)) { | |||
16892 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0_holder)) { | |||
16893 | return false; | |||
16894 | } | |||
16895 | if (!NormalizeUSVString(arg0_holder)) { | |||
16896 | JS_ReportOutOfMemory(cx); | |||
16897 | return false; | |||
16898 | } | |||
16899 | arg0 = &arg0_holder; | |||
16900 | } | |||
16901 | // NOTE: This assert does NOT call the function. | |||
16902 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSVS(Constify(arg0)))>, "Should be returning void here"); | |||
16903 | MOZ_KnownLive(self)(self)->PassOptionalSVS(Constify(arg0)); | |||
16904 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16904); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16904; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16905 | args.rval().setUndefined(); | |||
16906 | return true; | |||
16907 | } | |||
16908 | ||||
16909 | static const JSJitInfo passOptionalSVS_methodinfo = { | |||
16910 | { (JSJitGetterOp)passOptionalSVS }, | |||
16911 | { prototypes::id::TestExampleInterface }, | |||
16912 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16913 | JSJitInfo::Method, | |||
16914 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16915 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16916 | false, /* isInfallible. False in setters. */ | |||
16917 | false, /* isMovable. Not relevant for setters. */ | |||
16918 | false, /* isEliminatable. Not relevant for setters. */ | |||
16919 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16920 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16921 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16922 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16923 | }; | |||
16924 | ||||
16925 | MOZ_CAN_RUN_SCRIPT static bool | |||
16926 | passOptionalSVSWithDefaultValue(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16927 | { | |||
16928 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16931( cx, "TestExampleInterface" , "passOptionalSVSWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16929 | "TestExampleInterface", "passOptionalSVSWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16931( cx, "TestExampleInterface" , "passOptionalSVSWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16930 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16931( cx, "TestExampleInterface" , "passOptionalSVSWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
16931 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16931( cx, "TestExampleInterface" , "passOptionalSVSWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
16932 | ||||
16933 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16934 | binding_detail::FakeString<char16_t> arg0; | |||
16935 | if (args.hasDefined(0)) { | |||
16936 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
16937 | return false; | |||
16938 | } | |||
16939 | if (!NormalizeUSVString(arg0)) { | |||
16940 | JS_ReportOutOfMemory(cx); | |||
16941 | return false; | |||
16942 | } | |||
16943 | } else { | |||
16944 | arg0.AssignLiteral(u"abc"); | |||
16945 | } | |||
16946 | // NOTE: This assert does NOT call the function. | |||
16947 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSVSWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
16948 | MOZ_KnownLive(self)(self)->PassOptionalSVSWithDefaultValue(Constify(arg0)); | |||
16949 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16949); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16949; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16950 | args.rval().setUndefined(); | |||
16951 | return true; | |||
16952 | } | |||
16953 | ||||
16954 | static const JSJitInfo passOptionalSVSWithDefaultValue_methodinfo = { | |||
16955 | { (JSJitGetterOp)passOptionalSVSWithDefaultValue }, | |||
16956 | { prototypes::id::TestExampleInterface }, | |||
16957 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
16958 | JSJitInfo::Method, | |||
16959 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
16960 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
16961 | false, /* isInfallible. False in setters. */ | |||
16962 | false, /* isMovable. Not relevant for setters. */ | |||
16963 | false, /* isEliminatable. Not relevant for setters. */ | |||
16964 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
16965 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
16966 | false, /* isTypedMethod. Only relevant for methods. */ | |||
16967 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
16968 | }; | |||
16969 | ||||
16970 | MOZ_CAN_RUN_SCRIPT static bool | |||
16971 | passOptionalNullableSVS(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
16972 | { | |||
16973 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject16976( cx, "TestExampleInterface" , "passOptionalNullableSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16974 | "TestExampleInterface", "passOptionalNullableSVS", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject16976( cx, "TestExampleInterface" , "passOptionalNullableSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16975 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject16976( cx, "TestExampleInterface" , "passOptionalNullableSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
16976 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject16976( cx, "TestExampleInterface" , "passOptionalNullableSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
16977 | ||||
16978 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
16979 | Optional<nsAString> arg0; | |||
16980 | binding_detail::FakeString<char16_t> arg0_holder; | |||
16981 | if (args.hasDefined(0)) { | |||
16982 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0_holder)) { | |||
16983 | return false; | |||
16984 | } | |||
16985 | if (!NormalizeUSVString(arg0_holder)) { | |||
16986 | JS_ReportOutOfMemory(cx); | |||
16987 | return false; | |||
16988 | } | |||
16989 | arg0 = &arg0_holder; | |||
16990 | } | |||
16991 | // NOTE: This assert does NOT call the function. | |||
16992 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSVS(Constify(arg0)))>, "Should be returning void here"); | |||
16993 | MOZ_KnownLive(self)(self)->PassOptionalNullableSVS(Constify(arg0)); | |||
16994 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 16994); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 16994; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
16995 | args.rval().setUndefined(); | |||
16996 | return true; | |||
16997 | } | |||
16998 | ||||
16999 | static const JSJitInfo passOptionalNullableSVS_methodinfo = { | |||
17000 | { (JSJitGetterOp)passOptionalNullableSVS }, | |||
17001 | { prototypes::id::TestExampleInterface }, | |||
17002 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17003 | JSJitInfo::Method, | |||
17004 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17005 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17006 | false, /* isInfallible. False in setters. */ | |||
17007 | false, /* isMovable. Not relevant for setters. */ | |||
17008 | false, /* isEliminatable. Not relevant for setters. */ | |||
17009 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17010 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17011 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17012 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17013 | }; | |||
17014 | ||||
17015 | MOZ_CAN_RUN_SCRIPT static bool | |||
17016 | passOptionalNullableSVSWithDefaultValue(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17017 | { | |||
17018 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17021( cx, "TestExampleInterface" , "passOptionalNullableSVSWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17019 | "TestExampleInterface", "passOptionalNullableSVSWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17021( cx, "TestExampleInterface" , "passOptionalNullableSVSWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17020 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17021( cx, "TestExampleInterface" , "passOptionalNullableSVSWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17021 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17021( cx, "TestExampleInterface" , "passOptionalNullableSVSWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
17022 | ||||
17023 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17024 | binding_detail::FakeString<char16_t> arg0; | |||
17025 | if (args.hasDefined(0)) { | |||
17026 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) { | |||
17027 | return false; | |||
17028 | } | |||
17029 | if (!NormalizeUSVString(arg0)) { | |||
17030 | JS_ReportOutOfMemory(cx); | |||
17031 | return false; | |||
17032 | } | |||
17033 | } else { | |||
17034 | arg0.SetIsVoid(true); | |||
17035 | } | |||
17036 | // NOTE: This assert does NOT call the function. | |||
17037 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSVSWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
17038 | MOZ_KnownLive(self)(self)->PassOptionalNullableSVSWithDefaultValue(Constify(arg0)); | |||
17039 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17039); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17039; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17040 | args.rval().setUndefined(); | |||
17041 | return true; | |||
17042 | } | |||
17043 | ||||
17044 | static const JSJitInfo passOptionalNullableSVSWithDefaultValue_methodinfo = { | |||
17045 | { (JSJitGetterOp)passOptionalNullableSVSWithDefaultValue }, | |||
17046 | { prototypes::id::TestExampleInterface }, | |||
17047 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17048 | JSJitInfo::Method, | |||
17049 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17050 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17051 | false, /* isInfallible. False in setters. */ | |||
17052 | false, /* isMovable. Not relevant for setters. */ | |||
17053 | false, /* isEliminatable. Not relevant for setters. */ | |||
17054 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17055 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17056 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17057 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17058 | }; | |||
17059 | ||||
17060 | MOZ_CAN_RUN_SCRIPT static bool | |||
17061 | passVariadicSVS(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17062 | { | |||
17063 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17066( cx, "TestExampleInterface" , "passVariadicSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17064 | "TestExampleInterface", "passVariadicSVS", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17066( cx, "TestExampleInterface" , "passVariadicSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17065 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17066( cx, "TestExampleInterface" , "passVariadicSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17066 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17066( cx, "TestExampleInterface" , "passVariadicSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17067 | ||||
17068 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17069 | AutoSequence<nsString> arg0; | |||
17070 | if (args.length() > 0) { | |||
17071 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
17072 | JS_ReportOutOfMemory(cx); | |||
17073 | return false; | |||
17074 | } | |||
17075 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
17076 | // OK to do infallible append here, since we ensured capacity already. | |||
17077 | nsString& slot = *arg0.AppendElement(); | |||
17078 | if (!ConvertJSValueToString(cx, args[variadicArg], eStringify, eStringify, slot)) { | |||
17079 | return false; | |||
17080 | } | |||
17081 | if (!NormalizeUSVString(slot)) { | |||
17082 | JS_ReportOutOfMemory(cx); | |||
17083 | return false; | |||
17084 | } | |||
17085 | } | |||
17086 | } | |||
17087 | // NOTE: This assert does NOT call the function. | |||
17088 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicSVS(Constify(arg0)))>, "Should be returning void here"); | |||
17089 | MOZ_KnownLive(self)(self)->PassVariadicSVS(Constify(arg0)); | |||
17090 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17090); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17090; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17091 | args.rval().setUndefined(); | |||
17092 | return true; | |||
17093 | } | |||
17094 | ||||
17095 | static const JSJitInfo passVariadicSVS_methodinfo = { | |||
17096 | { (JSJitGetterOp)passVariadicSVS }, | |||
17097 | { prototypes::id::TestExampleInterface }, | |||
17098 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17099 | JSJitInfo::Method, | |||
17100 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17101 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17102 | false, /* isInfallible. False in setters. */ | |||
17103 | false, /* isMovable. Not relevant for setters. */ | |||
17104 | false, /* isEliminatable. Not relevant for setters. */ | |||
17105 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17106 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17107 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17108 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17109 | }; | |||
17110 | ||||
17111 | MOZ_CAN_RUN_SCRIPT static bool | |||
17112 | receiveSVS(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17113 | { | |||
17114 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17117( cx, "TestExampleInterface" , "receiveSVS", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17115 | "TestExampleInterface", "receiveSVS", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17117( cx, "TestExampleInterface" , "receiveSVS", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17116 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17117( cx, "TestExampleInterface" , "receiveSVS", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17117 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17117( cx, "TestExampleInterface" , "receiveSVS", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17118 | ||||
17119 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17120 | DOMString result; | |||
17121 | // NOTE: This assert does NOT call the function. | |||
17122 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveSVS(result))>, "Should be returning void here"); | |||
17123 | MOZ_KnownLive(self)(self)->ReceiveSVS(result); | |||
17124 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17124); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17124; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17125 | if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) { | |||
17126 | return false; | |||
17127 | } | |||
17128 | return true; | |||
17129 | } | |||
17130 | ||||
17131 | static const JSJitInfo receiveSVS_methodinfo = { | |||
17132 | { (JSJitGetterOp)receiveSVS }, | |||
17133 | { prototypes::id::TestExampleInterface }, | |||
17134 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17135 | JSJitInfo::Method, | |||
17136 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17137 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
17138 | false, /* isInfallible. False in setters. */ | |||
17139 | false, /* isMovable. Not relevant for setters. */ | |||
17140 | false, /* isEliminatable. Not relevant for setters. */ | |||
17141 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17142 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17143 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17144 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17145 | }; | |||
17146 | ||||
17147 | MOZ_CAN_RUN_SCRIPT static bool | |||
17148 | passJSString(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17149 | { | |||
17150 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17153( cx, "TestExampleInterface" , "passJSString", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17151 | "TestExampleInterface", "passJSString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17153( cx, "TestExampleInterface" , "passJSString", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17152 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17153( cx, "TestExampleInterface" , "passJSString", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17153 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17153( cx, "TestExampleInterface" , "passJSString", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17154 | ||||
17155 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17156 | if (!args.requireAtLeast(cx, "TestExampleInterface.passJSString", 1)) { | |||
17157 | return false; | |||
17158 | } | |||
17159 | JS::Rooted<JSString*> arg0(cx); | |||
17160 | if (!(arg0 = ConvertJSValueToJSString(cx, args[0]))) { | |||
17161 | return false; | |||
17162 | } | |||
17163 | // NOTE: This assert does NOT call the function. | |||
17164 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassJSString(cx, Constify(arg0)))>, "Should be returning void here"); | |||
17165 | MOZ_KnownLive(self)(self)->PassJSString(cx, Constify(arg0)); | |||
17166 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17166); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17166; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17167 | args.rval().setUndefined(); | |||
17168 | return true; | |||
17169 | } | |||
17170 | ||||
17171 | static const JSJitInfo passJSString_methodinfo = { | |||
17172 | { (JSJitGetterOp)passJSString }, | |||
17173 | { prototypes::id::TestExampleInterface }, | |||
17174 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17175 | JSJitInfo::Method, | |||
17176 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17177 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17178 | false, /* isInfallible. False in setters. */ | |||
17179 | false, /* isMovable. Not relevant for setters. */ | |||
17180 | false, /* isEliminatable. Not relevant for setters. */ | |||
17181 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17182 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17183 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17184 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17185 | }; | |||
17186 | ||||
17187 | MOZ_CAN_RUN_SCRIPT static bool | |||
17188 | passOptionalJSStringWithDefaultValue(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17189 | { | |||
17190 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17193( cx, "TestExampleInterface" , "passOptionalJSStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17191 | "TestExampleInterface", "passOptionalJSStringWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17193( cx, "TestExampleInterface" , "passOptionalJSStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17192 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17193( cx, "TestExampleInterface" , "passOptionalJSStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17193 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17193( cx, "TestExampleInterface" , "passOptionalJSStringWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
17194 | ||||
17195 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17196 | JS::Rooted<JSString*> arg0(cx); | |||
17197 | if (args.hasDefined(0)) { | |||
17198 | if (!(arg0 = ConvertJSValueToJSString(cx, args[0]))) { | |||
17199 | return false; | |||
17200 | } | |||
17201 | } else { | |||
17202 | static const char data[] = { 'a', 'b', 'c', 0 }; | |||
17203 | arg0 = JS_NewStringCopyN(cx, data, ArrayLength(data) - 1); | |||
17204 | if (!arg0) { | |||
17205 | return false; | |||
17206 | } | |||
17207 | } | |||
17208 | // NOTE: This assert does NOT call the function. | |||
17209 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalJSStringWithDefaultValue(cx, Constify(arg0)))>, "Should be returning void here"); | |||
17210 | MOZ_KnownLive(self)(self)->PassOptionalJSStringWithDefaultValue(cx, Constify(arg0)); | |||
17211 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17211); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17211; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17212 | args.rval().setUndefined(); | |||
17213 | return true; | |||
17214 | } | |||
17215 | ||||
17216 | static const JSJitInfo passOptionalJSStringWithDefaultValue_methodinfo = { | |||
17217 | { (JSJitGetterOp)passOptionalJSStringWithDefaultValue }, | |||
17218 | { prototypes::id::TestExampleInterface }, | |||
17219 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17220 | JSJitInfo::Method, | |||
17221 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17222 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17223 | false, /* isInfallible. False in setters. */ | |||
17224 | false, /* isMovable. Not relevant for setters. */ | |||
17225 | false, /* isEliminatable. Not relevant for setters. */ | |||
17226 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17227 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17228 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17229 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17230 | }; | |||
17231 | ||||
17232 | MOZ_CAN_RUN_SCRIPT static bool | |||
17233 | receiveJSString(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17234 | { | |||
17235 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17238( cx, "TestExampleInterface" , "receiveJSString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17236 | "TestExampleInterface", "receiveJSString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17238( cx, "TestExampleInterface" , "receiveJSString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17237 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17238( cx, "TestExampleInterface" , "receiveJSString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17238 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17238( cx, "TestExampleInterface" , "receiveJSString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17239 | ||||
17240 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17241 | JS::Rooted<JSString*> result(cx); | |||
17242 | // NOTE: This assert does NOT call the function. | |||
17243 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveJSString(cx, &result))>, "Should be returning void here"); | |||
17244 | MOZ_KnownLive(self)(self)->ReceiveJSString(cx, &result); | |||
17245 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17245); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17245; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17246 | args.rval().setString(result); | |||
17247 | if (!MaybeWrapStringValue(cx, args.rval())) { | |||
17248 | return false; | |||
17249 | } | |||
17250 | return true; | |||
17251 | } | |||
17252 | ||||
17253 | static const JSJitInfo receiveJSString_methodinfo = { | |||
17254 | { (JSJitGetterOp)receiveJSString }, | |||
17255 | { prototypes::id::TestExampleInterface }, | |||
17256 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17257 | JSJitInfo::Method, | |||
17258 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17259 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
17260 | false, /* isInfallible. False in setters. */ | |||
17261 | false, /* isMovable. Not relevant for setters. */ | |||
17262 | false, /* isEliminatable. Not relevant for setters. */ | |||
17263 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17264 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17265 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17266 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17267 | }; | |||
17268 | ||||
17269 | MOZ_CAN_RUN_SCRIPT static bool | |||
17270 | get_readonlyJSStringAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
17271 | { | |||
17272 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17275( cx, "TestExampleInterface" , "readonlyJSStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17273 | "TestExampleInterface", "readonlyJSStringAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17275( cx, "TestExampleInterface" , "readonlyJSStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17274 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject17275( cx, "TestExampleInterface" , "readonlyJSStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17275 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17275( cx, "TestExampleInterface" , "readonlyJSStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17276 | ||||
17277 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17278 | JS::Rooted<JSString*> result(cx); | |||
17279 | // NOTE: This assert does NOT call the function. | |||
17280 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlyJSStringAttr(cx, &result))>, "Should be returning void here"); | |||
17281 | MOZ_KnownLive(self)(self)->GetReadonlyJSStringAttr(cx, &result); | |||
17282 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17282); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17282; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17283 | args.rval().setString(result); | |||
17284 | if (!MaybeWrapStringValue(cx, args.rval())) { | |||
17285 | return false; | |||
17286 | } | |||
17287 | return true; | |||
17288 | } | |||
17289 | ||||
17290 | static const JSJitInfo readonlyJSStringAttr_getterinfo = { | |||
17291 | { get_readonlyJSStringAttr }, | |||
17292 | { prototypes::id::TestExampleInterface }, | |||
17293 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17294 | JSJitInfo::Getter, | |||
17295 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17296 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
17297 | false, /* isInfallible. False in setters. */ | |||
17298 | false, /* isMovable. Not relevant for setters. */ | |||
17299 | false, /* isEliminatable. Not relevant for setters. */ | |||
17300 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17301 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17302 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17303 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17304 | }; | |||
17305 | ||||
17306 | MOZ_CAN_RUN_SCRIPT static bool | |||
17307 | get_jsStringAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
17308 | { | |||
17309 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17312( cx, "TestExampleInterface" , "jsStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17310 | "TestExampleInterface", "jsStringAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17312( cx, "TestExampleInterface" , "jsStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17311 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject17312( cx, "TestExampleInterface" , "jsStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17312 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17312( cx, "TestExampleInterface" , "jsStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17313 | ||||
17314 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17315 | JS::Rooted<JSString*> result(cx); | |||
17316 | // NOTE: This assert does NOT call the function. | |||
17317 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetJsStringAttr(cx, &result))>, "Should be returning void here"); | |||
17318 | MOZ_KnownLive(self)(self)->GetJsStringAttr(cx, &result); | |||
17319 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17319); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17319; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17320 | args.rval().setString(result); | |||
17321 | if (!MaybeWrapStringValue(cx, args.rval())) { | |||
17322 | return false; | |||
17323 | } | |||
17324 | return true; | |||
17325 | } | |||
17326 | ||||
17327 | MOZ_CAN_RUN_SCRIPT static bool | |||
17328 | set_jsStringAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
17329 | { | |||
17330 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17333( cx, "TestExampleInterface" , "jsStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17331 | "TestExampleInterface", "jsStringAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17333( cx, "TestExampleInterface" , "jsStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17332 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject17333( cx, "TestExampleInterface" , "jsStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17333 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17333( cx, "TestExampleInterface" , "jsStringAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17334 | ||||
17335 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17336 | JS::Rooted<JSString*> arg0(cx); | |||
17337 | if (!(arg0 = ConvertJSValueToJSString(cx, args[0]))) { | |||
17338 | return false; | |||
17339 | } | |||
17340 | // NOTE: This assert does NOT call the function. | |||
17341 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetJsStringAttr(cx, Constify(arg0)))>, "Should be returning void here"); | |||
17342 | MOZ_KnownLive(self)(self)->SetJsStringAttr(cx, Constify(arg0)); | |||
17343 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17343); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17343; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17344 | ||||
17345 | return true; | |||
17346 | } | |||
17347 | ||||
17348 | static const JSJitInfo jsStringAttr_getterinfo = { | |||
17349 | { get_jsStringAttr }, | |||
17350 | { prototypes::id::TestExampleInterface }, | |||
17351 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17352 | JSJitInfo::Getter, | |||
17353 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17354 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
17355 | false, /* isInfallible. False in setters. */ | |||
17356 | false, /* isMovable. Not relevant for setters. */ | |||
17357 | false, /* isEliminatable. Not relevant for setters. */ | |||
17358 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17359 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17360 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17361 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17362 | }; | |||
17363 | static const JSJitInfo jsStringAttr_setterinfo = { | |||
17364 | { (JSJitGetterOp)set_jsStringAttr }, | |||
17365 | { prototypes::id::TestExampleInterface }, | |||
17366 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17367 | JSJitInfo::Setter, | |||
17368 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17369 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17370 | false, /* isInfallible. False in setters. */ | |||
17371 | false, /* isMovable. Not relevant for setters. */ | |||
17372 | false, /* isEliminatable. Not relevant for setters. */ | |||
17373 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17374 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17375 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17376 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17377 | }; | |||
17378 | ||||
17379 | MOZ_CAN_RUN_SCRIPT static bool | |||
17380 | passEnum(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17381 | { | |||
17382 | BindingCallContext cx(cx_, "TestExampleInterface.passEnum"); | |||
17383 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17386( cx, "TestExampleInterface" , "passEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
17384 | "TestExampleInterface", "passEnum", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17386( cx, "TestExampleInterface" , "passEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
17385 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17386( cx, "TestExampleInterface" , "passEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
17386 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17386( cx, "TestExampleInterface" , "passEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
17387 | ||||
17388 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17389 | if (!args.requireAtLeast(cx, "TestExampleInterface.passEnum", 1)) { | |||
17390 | return false; | |||
17391 | } | |||
17392 | TestEnum arg0; | |||
17393 | { | |||
17394 | int index; | |||
17395 | if (!binding_detail::FindEnumStringIndex<true>(cx, args[0], | |||
17396 | binding_detail::EnumStrings<TestEnum>::Values, | |||
17397 | "TestEnum", "argument 1", | |||
17398 | &index)) { | |||
17399 | return false; | |||
17400 | } | |||
17401 | MOZ_ASSERT(index >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index >= 0", "../TestExampleGenBinding.cpp", 17401); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "index >= 0" ")"); do { *((volatile int* )__null) = 17401; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
17402 | arg0 = static_cast<TestEnum>(index); | |||
17403 | } | |||
17404 | // NOTE: This assert does NOT call the function. | |||
17405 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassEnum(arg0))>, "Should be returning void here"); | |||
17406 | MOZ_KnownLive(self)(self)->PassEnum(arg0); | |||
17407 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17407); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17407; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17408 | args.rval().setUndefined(); | |||
17409 | return true; | |||
17410 | } | |||
17411 | ||||
17412 | static const JSJitInfo passEnum_methodinfo = { | |||
17413 | { (JSJitGetterOp)passEnum }, | |||
17414 | { prototypes::id::TestExampleInterface }, | |||
17415 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17416 | JSJitInfo::Method, | |||
17417 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17418 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17419 | false, /* isInfallible. False in setters. */ | |||
17420 | false, /* isMovable. Not relevant for setters. */ | |||
17421 | false, /* isEliminatable. Not relevant for setters. */ | |||
17422 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17423 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17424 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17425 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17426 | }; | |||
17427 | ||||
17428 | MOZ_CAN_RUN_SCRIPT static bool | |||
17429 | passNullableEnum(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17430 | { | |||
17431 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableEnum"); | |||
17432 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17435( cx, "TestExampleInterface" , "passNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17433 | "TestExampleInterface", "passNullableEnum", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17435( cx, "TestExampleInterface" , "passNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17434 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17435( cx, "TestExampleInterface" , "passNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17435 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17435( cx, "TestExampleInterface" , "passNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17436 | ||||
17437 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17438 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableEnum", 1)) { | |||
17439 | return false; | |||
17440 | } | |||
17441 | Nullable<TestEnum> arg0; | |||
17442 | if (args[0].isNullOrUndefined()) { | |||
17443 | arg0.SetNull(); | |||
17444 | } else { | |||
17445 | { | |||
17446 | int index; | |||
17447 | if (!binding_detail::FindEnumStringIndex<true>(cx, args[0], | |||
17448 | binding_detail::EnumStrings<TestEnum>::Values, | |||
17449 | "TestEnum", "argument 1", | |||
17450 | &index)) { | |||
17451 | return false; | |||
17452 | } | |||
17453 | MOZ_ASSERT(index >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index >= 0", "../TestExampleGenBinding.cpp", 17453); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "index >= 0" ")"); do { *((volatile int* )__null) = 17453; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
17454 | arg0.SetValue() = static_cast<TestEnum>(index); | |||
17455 | } | |||
17456 | } | |||
17457 | // NOTE: This assert does NOT call the function. | |||
17458 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableEnum(Constify(arg0)))>, "Should be returning void here"); | |||
17459 | MOZ_KnownLive(self)(self)->PassNullableEnum(Constify(arg0)); | |||
17460 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17460); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17460; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17461 | args.rval().setUndefined(); | |||
17462 | return true; | |||
17463 | } | |||
17464 | ||||
17465 | static const JSJitInfo passNullableEnum_methodinfo = { | |||
17466 | { (JSJitGetterOp)passNullableEnum }, | |||
17467 | { prototypes::id::TestExampleInterface }, | |||
17468 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17469 | JSJitInfo::Method, | |||
17470 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17471 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17472 | false, /* isInfallible. False in setters. */ | |||
17473 | false, /* isMovable. Not relevant for setters. */ | |||
17474 | false, /* isEliminatable. Not relevant for setters. */ | |||
17475 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17476 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17477 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17478 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17479 | }; | |||
17480 | ||||
17481 | MOZ_CAN_RUN_SCRIPT static bool | |||
17482 | passOptionalEnum(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17483 | { | |||
17484 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalEnum"); | |||
17485 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17488( cx, "TestExampleInterface" , "passOptionalEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17486 | "TestExampleInterface", "passOptionalEnum", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17488( cx, "TestExampleInterface" , "passOptionalEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17487 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17488( cx, "TestExampleInterface" , "passOptionalEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17488 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17488( cx, "TestExampleInterface" , "passOptionalEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17489 | ||||
17490 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17491 | Optional<TestEnum> arg0; | |||
17492 | if (args.hasDefined(0)) { | |||
17493 | arg0.Construct(); | |||
17494 | { | |||
17495 | int index; | |||
17496 | if (!binding_detail::FindEnumStringIndex<true>(cx, args[0], | |||
17497 | binding_detail::EnumStrings<TestEnum>::Values, | |||
17498 | "TestEnum", "argument 1", | |||
17499 | &index)) { | |||
17500 | return false; | |||
17501 | } | |||
17502 | MOZ_ASSERT(index >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index >= 0", "../TestExampleGenBinding.cpp", 17502); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "index >= 0" ")"); do { *((volatile int* )__null) = 17502; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
17503 | arg0.Value() = static_cast<TestEnum>(index); | |||
17504 | } | |||
17505 | } | |||
17506 | // NOTE: This assert does NOT call the function. | |||
17507 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalEnum(Constify(arg0)))>, "Should be returning void here"); | |||
17508 | MOZ_KnownLive(self)(self)->PassOptionalEnum(Constify(arg0)); | |||
17509 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17509); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17509; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17510 | args.rval().setUndefined(); | |||
17511 | return true; | |||
17512 | } | |||
17513 | ||||
17514 | static const JSJitInfo passOptionalEnum_methodinfo = { | |||
17515 | { (JSJitGetterOp)passOptionalEnum }, | |||
17516 | { prototypes::id::TestExampleInterface }, | |||
17517 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17518 | JSJitInfo::Method, | |||
17519 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17520 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17521 | false, /* isInfallible. False in setters. */ | |||
17522 | false, /* isMovable. Not relevant for setters. */ | |||
17523 | false, /* isEliminatable. Not relevant for setters. */ | |||
17524 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17525 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17526 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17527 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17528 | }; | |||
17529 | ||||
17530 | MOZ_CAN_RUN_SCRIPT static bool | |||
17531 | passEnumWithDefault(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17532 | { | |||
17533 | BindingCallContext cx(cx_, "TestExampleInterface.passEnumWithDefault"); | |||
17534 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17537( cx, "TestExampleInterface" , "passEnumWithDefault", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17535 | "TestExampleInterface", "passEnumWithDefault", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17537( cx, "TestExampleInterface" , "passEnumWithDefault", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17536 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17537( cx, "TestExampleInterface" , "passEnumWithDefault", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17537 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17537( cx, "TestExampleInterface" , "passEnumWithDefault", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17538 | ||||
17539 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17540 | TestEnum arg0; | |||
17541 | if (args.hasDefined(0)) { | |||
17542 | { | |||
17543 | int index; | |||
17544 | if (!binding_detail::FindEnumStringIndex<true>(cx, args[0], | |||
17545 | binding_detail::EnumStrings<TestEnum>::Values, | |||
17546 | "TestEnum", "argument 1", | |||
17547 | &index)) { | |||
17548 | return false; | |||
17549 | } | |||
17550 | MOZ_ASSERT(index >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index >= 0", "../TestExampleGenBinding.cpp", 17550); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "index >= 0" ")"); do { *((volatile int* )__null) = 17550; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
17551 | arg0 = static_cast<TestEnum>(index); | |||
17552 | } | |||
17553 | } else { | |||
17554 | arg0 = TestEnum::A; | |||
17555 | } | |||
17556 | // NOTE: This assert does NOT call the function. | |||
17557 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassEnumWithDefault(arg0))>, "Should be returning void here"); | |||
17558 | MOZ_KnownLive(self)(self)->PassEnumWithDefault(arg0); | |||
17559 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17559); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17559; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17560 | args.rval().setUndefined(); | |||
17561 | return true; | |||
17562 | } | |||
17563 | ||||
17564 | static const JSJitInfo passEnumWithDefault_methodinfo = { | |||
17565 | { (JSJitGetterOp)passEnumWithDefault }, | |||
17566 | { prototypes::id::TestExampleInterface }, | |||
17567 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17568 | JSJitInfo::Method, | |||
17569 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17570 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17571 | false, /* isInfallible. False in setters. */ | |||
17572 | false, /* isMovable. Not relevant for setters. */ | |||
17573 | false, /* isEliminatable. Not relevant for setters. */ | |||
17574 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17575 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17576 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17577 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17578 | }; | |||
17579 | ||||
17580 | MOZ_CAN_RUN_SCRIPT static bool | |||
17581 | passOptionalNullableEnum(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17582 | { | |||
17583 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableEnum"); | |||
17584 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17587( cx, "TestExampleInterface" , "passOptionalNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17585 | "TestExampleInterface", "passOptionalNullableEnum", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17587( cx, "TestExampleInterface" , "passOptionalNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17586 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17587( cx, "TestExampleInterface" , "passOptionalNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17587 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17587( cx, "TestExampleInterface" , "passOptionalNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
17588 | ||||
17589 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17590 | Optional<Nullable<TestEnum>> arg0; | |||
17591 | if (args.hasDefined(0)) { | |||
17592 | arg0.Construct(); | |||
17593 | if (args[0].isNullOrUndefined()) { | |||
17594 | arg0.Value().SetNull(); | |||
17595 | } else { | |||
17596 | { | |||
17597 | int index; | |||
17598 | if (!binding_detail::FindEnumStringIndex<true>(cx, args[0], | |||
17599 | binding_detail::EnumStrings<TestEnum>::Values, | |||
17600 | "TestEnum", "argument 1", | |||
17601 | &index)) { | |||
17602 | return false; | |||
17603 | } | |||
17604 | MOZ_ASSERT(index >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index >= 0", "../TestExampleGenBinding.cpp", 17604); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "index >= 0" ")"); do { *((volatile int* )__null) = 17604; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
17605 | arg0.Value().SetValue() = static_cast<TestEnum>(index); | |||
17606 | } | |||
17607 | } | |||
17608 | } | |||
17609 | // NOTE: This assert does NOT call the function. | |||
17610 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableEnum(Constify(arg0)))>, "Should be returning void here"); | |||
17611 | MOZ_KnownLive(self)(self)->PassOptionalNullableEnum(Constify(arg0)); | |||
17612 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17612); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17612; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17613 | args.rval().setUndefined(); | |||
17614 | return true; | |||
17615 | } | |||
17616 | ||||
17617 | static const JSJitInfo passOptionalNullableEnum_methodinfo = { | |||
17618 | { (JSJitGetterOp)passOptionalNullableEnum }, | |||
17619 | { prototypes::id::TestExampleInterface }, | |||
17620 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17621 | JSJitInfo::Method, | |||
17622 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17623 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17624 | false, /* isInfallible. False in setters. */ | |||
17625 | false, /* isMovable. Not relevant for setters. */ | |||
17626 | false, /* isEliminatable. Not relevant for setters. */ | |||
17627 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17628 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17629 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17630 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17631 | }; | |||
17632 | ||||
17633 | MOZ_CAN_RUN_SCRIPT static bool | |||
17634 | passOptionalNullableEnumWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17635 | { | |||
17636 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableEnumWithDefaultValue"); | |||
17637 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17640( cx, "TestExampleInterface" , "passOptionalNullableEnumWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17638 | "TestExampleInterface", "passOptionalNullableEnumWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17640( cx, "TestExampleInterface" , "passOptionalNullableEnumWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17639 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17640( cx, "TestExampleInterface" , "passOptionalNullableEnumWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17640 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17640( cx, "TestExampleInterface" , "passOptionalNullableEnumWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
17641 | ||||
17642 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17643 | Nullable<TestEnum> arg0; | |||
17644 | if (args.hasDefined(0)) { | |||
17645 | if (args[0].isNullOrUndefined()) { | |||
17646 | arg0.SetNull(); | |||
17647 | } else { | |||
17648 | { | |||
17649 | int index; | |||
17650 | if (!binding_detail::FindEnumStringIndex<true>(cx, args[0], | |||
17651 | binding_detail::EnumStrings<TestEnum>::Values, | |||
17652 | "TestEnum", "argument 1", | |||
17653 | &index)) { | |||
17654 | return false; | |||
17655 | } | |||
17656 | MOZ_ASSERT(index >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index >= 0", "../TestExampleGenBinding.cpp", 17656); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "index >= 0" ")"); do { *((volatile int* )__null) = 17656; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
17657 | arg0.SetValue() = static_cast<TestEnum>(index); | |||
17658 | } | |||
17659 | } | |||
17660 | } else { | |||
17661 | arg0.SetNull(); | |||
17662 | } | |||
17663 | // NOTE: This assert does NOT call the function. | |||
17664 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableEnumWithDefaultValue(Constify(arg0)))>, "Should be returning void here"); | |||
17665 | MOZ_KnownLive(self)(self)->PassOptionalNullableEnumWithDefaultValue(Constify(arg0)); | |||
17666 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17666); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17666; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17667 | args.rval().setUndefined(); | |||
17668 | return true; | |||
17669 | } | |||
17670 | ||||
17671 | static const JSJitInfo passOptionalNullableEnumWithDefaultValue_methodinfo = { | |||
17672 | { (JSJitGetterOp)passOptionalNullableEnumWithDefaultValue }, | |||
17673 | { prototypes::id::TestExampleInterface }, | |||
17674 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17675 | JSJitInfo::Method, | |||
17676 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17677 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17678 | false, /* isInfallible. False in setters. */ | |||
17679 | false, /* isMovable. Not relevant for setters. */ | |||
17680 | false, /* isEliminatable. Not relevant for setters. */ | |||
17681 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17682 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17683 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17684 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17685 | }; | |||
17686 | ||||
17687 | MOZ_CAN_RUN_SCRIPT static bool | |||
17688 | passOptionalNullableEnumWithDefaultValue2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17689 | { | |||
17690 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableEnumWithDefaultValue2"); | |||
17691 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17694( cx, "TestExampleInterface" , "passOptionalNullableEnumWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17692 | "TestExampleInterface", "passOptionalNullableEnumWithDefaultValue2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17694( cx, "TestExampleInterface" , "passOptionalNullableEnumWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17693 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17694( cx, "TestExampleInterface" , "passOptionalNullableEnumWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
17694 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17694( cx, "TestExampleInterface" , "passOptionalNullableEnumWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
17695 | ||||
17696 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17697 | Nullable<TestEnum> arg0; | |||
17698 | if (args.hasDefined(0)) { | |||
17699 | if (args[0].isNullOrUndefined()) { | |||
17700 | arg0.SetNull(); | |||
17701 | } else { | |||
17702 | { | |||
17703 | int index; | |||
17704 | if (!binding_detail::FindEnumStringIndex<true>(cx, args[0], | |||
17705 | binding_detail::EnumStrings<TestEnum>::Values, | |||
17706 | "TestEnum", "argument 1", | |||
17707 | &index)) { | |||
17708 | return false; | |||
17709 | } | |||
17710 | MOZ_ASSERT(index >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index >= 0", "../TestExampleGenBinding.cpp", 17710); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "index >= 0" ")"); do { *((volatile int* )__null) = 17710; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
17711 | arg0.SetValue() = static_cast<TestEnum>(index); | |||
17712 | } | |||
17713 | } | |||
17714 | } else { | |||
17715 | arg0.SetValue() = TestEnum::A; | |||
17716 | } | |||
17717 | // NOTE: This assert does NOT call the function. | |||
17718 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableEnumWithDefaultValue2(Constify(arg0)))>, "Should be returning void here"); | |||
17719 | MOZ_KnownLive(self)(self)->PassOptionalNullableEnumWithDefaultValue2(Constify(arg0)); | |||
17720 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17720); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17720; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17721 | args.rval().setUndefined(); | |||
17722 | return true; | |||
17723 | } | |||
17724 | ||||
17725 | static const JSJitInfo passOptionalNullableEnumWithDefaultValue2_methodinfo = { | |||
17726 | { (JSJitGetterOp)passOptionalNullableEnumWithDefaultValue2 }, | |||
17727 | { prototypes::id::TestExampleInterface }, | |||
17728 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17729 | JSJitInfo::Method, | |||
17730 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17731 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17732 | false, /* isInfallible. False in setters. */ | |||
17733 | false, /* isMovable. Not relevant for setters. */ | |||
17734 | false, /* isEliminatable. Not relevant for setters. */ | |||
17735 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17736 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17737 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17738 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17739 | }; | |||
17740 | ||||
17741 | MOZ_CAN_RUN_SCRIPT static bool | |||
17742 | receiveEnum(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17743 | { | |||
17744 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17747( cx, "TestExampleInterface" , "receiveEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17745 | "TestExampleInterface", "receiveEnum", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17747( cx, "TestExampleInterface" , "receiveEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17746 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17747( cx, "TestExampleInterface" , "receiveEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17747 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17747( cx, "TestExampleInterface" , "receiveEnum", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17748 | ||||
17749 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17750 | TestEnum result(MOZ_KnownLive(self)(self)->ReceiveEnum()); | |||
17751 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17751); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17751; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17752 | if (!ToJSValue(cx, result, args.rval())) { | |||
17753 | return false; | |||
17754 | } | |||
17755 | return true; | |||
17756 | } | |||
17757 | ||||
17758 | static const JSJitInfo receiveEnum_methodinfo = { | |||
17759 | { (JSJitGetterOp)receiveEnum }, | |||
17760 | { prototypes::id::TestExampleInterface }, | |||
17761 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17762 | JSJitInfo::Method, | |||
17763 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17764 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
17765 | false, /* isInfallible. False in setters. */ | |||
17766 | false, /* isMovable. Not relevant for setters. */ | |||
17767 | false, /* isEliminatable. Not relevant for setters. */ | |||
17768 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17769 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17770 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17771 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17772 | }; | |||
17773 | ||||
17774 | MOZ_CAN_RUN_SCRIPT static bool | |||
17775 | receiveNullableEnum(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17776 | { | |||
17777 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17780( cx, "TestExampleInterface" , "receiveNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17778 | "TestExampleInterface", "receiveNullableEnum", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17780( cx, "TestExampleInterface" , "receiveNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17779 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17780( cx, "TestExampleInterface" , "receiveNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17780 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17780( cx, "TestExampleInterface" , "receiveNullableEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17781 | ||||
17782 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17783 | Nullable<TestEnum> result(MOZ_KnownLive(self)(self)->ReceiveNullableEnum()); | |||
17784 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17784); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17784; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17785 | if (result.IsNull()) { | |||
17786 | args.rval().setNull(); | |||
17787 | return true; | |||
17788 | } else { | |||
17789 | if (!ToJSValue(cx, result.Value(), args.rval())) { | |||
17790 | return false; | |||
17791 | } | |||
17792 | return true; | |||
17793 | } | |||
17794 | } | |||
17795 | ||||
17796 | static const JSJitInfo receiveNullableEnum_methodinfo = { | |||
17797 | { (JSJitGetterOp)receiveNullableEnum }, | |||
17798 | { prototypes::id::TestExampleInterface }, | |||
17799 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17800 | JSJitInfo::Method, | |||
17801 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17802 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
17803 | false, /* isInfallible. False in setters. */ | |||
17804 | false, /* isMovable. Not relevant for setters. */ | |||
17805 | false, /* isEliminatable. Not relevant for setters. */ | |||
17806 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17807 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17808 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17809 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17810 | }; | |||
17811 | ||||
17812 | MOZ_CAN_RUN_SCRIPT static bool | |||
17813 | get_enumAttribute(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
17814 | { | |||
17815 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17818( cx, "TestExampleInterface" , "enumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17816 | "TestExampleInterface", "enumAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17818( cx, "TestExampleInterface" , "enumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17817 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject17818( cx, "TestExampleInterface" , "enumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17818 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17818( cx, "TestExampleInterface" , "enumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17819 | ||||
17820 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17821 | TestEnum result(MOZ_KnownLive(self)(self)->EnumAttribute()); | |||
17822 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17822); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17822; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17823 | if (!ToJSValue(cx, result, args.rval())) { | |||
17824 | return false; | |||
17825 | } | |||
17826 | return true; | |||
17827 | } | |||
17828 | ||||
17829 | MOZ_CAN_RUN_SCRIPT static bool | |||
17830 | set_enumAttribute(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
17831 | { | |||
17832 | BindingCallContext cx(cx_, "TestExampleInterface.enumAttribute setter"); | |||
17833 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17836( cx, "TestExampleInterface" , "enumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17834 | "TestExampleInterface", "enumAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17836( cx, "TestExampleInterface" , "enumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17835 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject17836( cx, "TestExampleInterface" , "enumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17836 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17836( cx, "TestExampleInterface" , "enumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17837 | ||||
17838 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17839 | TestEnum arg0; | |||
17840 | { | |||
17841 | int index; | |||
17842 | if (!binding_detail::FindEnumStringIndex<false>(cx, args[0], | |||
17843 | binding_detail::EnumStrings<TestEnum>::Values, | |||
17844 | "TestEnum", "value being assigned", | |||
17845 | &index)) { | |||
17846 | return false; | |||
17847 | } | |||
17848 | if (index < 0) { | |||
17849 | return true; | |||
17850 | } | |||
17851 | arg0 = static_cast<TestEnum>(index); | |||
17852 | } | |||
17853 | // NOTE: This assert does NOT call the function. | |||
17854 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetEnumAttribute(arg0))>, "Should be returning void here"); | |||
17855 | MOZ_KnownLive(self)(self)->SetEnumAttribute(arg0); | |||
17856 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17856); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17856; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17857 | ||||
17858 | return true; | |||
17859 | } | |||
17860 | ||||
17861 | static const JSJitInfo enumAttribute_getterinfo = { | |||
17862 | { get_enumAttribute }, | |||
17863 | { prototypes::id::TestExampleInterface }, | |||
17864 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17865 | JSJitInfo::Getter, | |||
17866 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17867 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
17868 | false, /* isInfallible. False in setters. */ | |||
17869 | false, /* isMovable. Not relevant for setters. */ | |||
17870 | false, /* isEliminatable. Not relevant for setters. */ | |||
17871 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17872 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17873 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17874 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17875 | }; | |||
17876 | static const JSJitInfo enumAttribute_setterinfo = { | |||
17877 | { (JSJitGetterOp)set_enumAttribute }, | |||
17878 | { prototypes::id::TestExampleInterface }, | |||
17879 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17880 | JSJitInfo::Setter, | |||
17881 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17882 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17883 | false, /* isInfallible. False in setters. */ | |||
17884 | false, /* isMovable. Not relevant for setters. */ | |||
17885 | false, /* isEliminatable. Not relevant for setters. */ | |||
17886 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17887 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17888 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17889 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17890 | }; | |||
17891 | ||||
17892 | MOZ_CAN_RUN_SCRIPT static bool | |||
17893 | get_readonlyEnumAttribute(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
17894 | { | |||
17895 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17898( cx, "TestExampleInterface" , "readonlyEnumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17896 | "TestExampleInterface", "readonlyEnumAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17898( cx, "TestExampleInterface" , "readonlyEnumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17897 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject17898( cx, "TestExampleInterface" , "readonlyEnumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17898 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17898( cx, "TestExampleInterface" , "readonlyEnumAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17899 | ||||
17900 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17901 | TestEnum result(MOZ_KnownLive(self)(self)->ReadonlyEnumAttribute()); | |||
17902 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17902); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17902; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17903 | if (!ToJSValue(cx, result, args.rval())) { | |||
17904 | return false; | |||
17905 | } | |||
17906 | return true; | |||
17907 | } | |||
17908 | ||||
17909 | static const JSJitInfo readonlyEnumAttribute_getterinfo = { | |||
17910 | { get_readonlyEnumAttribute }, | |||
17911 | { prototypes::id::TestExampleInterface }, | |||
17912 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17913 | JSJitInfo::Getter, | |||
17914 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17915 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
17916 | false, /* isInfallible. False in setters. */ | |||
17917 | false, /* isMovable. Not relevant for setters. */ | |||
17918 | false, /* isEliminatable. Not relevant for setters. */ | |||
17919 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17920 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17921 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17922 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17923 | }; | |||
17924 | ||||
17925 | MOZ_CAN_RUN_SCRIPT static bool | |||
17926 | passCallback(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17927 | { | |||
17928 | BindingCallContext cx(cx_, "TestExampleInterface.passCallback"); | |||
17929 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17932( cx, "TestExampleInterface" , "passCallback", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17930 | "TestExampleInterface", "passCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17932( cx, "TestExampleInterface" , "passCallback", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17931 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17932( cx, "TestExampleInterface" , "passCallback", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17932 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17932( cx, "TestExampleInterface" , "passCallback", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17933 | ||||
17934 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17935 | if (!args.requireAtLeast(cx, "TestExampleInterface.passCallback", 1)) { | |||
17936 | return false; | |||
17937 | } | |||
17938 | RootedCallback<OwningNonNull<binding_detail::FastTestCallback>> arg0(cx); | |||
17939 | if (args[0].isObject()) { | |||
17940 | if (JS::IsCallable(&args[0].toObject())) { | |||
17941 | { // scope for tempRoot and tempGlobalRoot if needed | |||
17942 | arg0 = new binding_detail::FastTestCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
17943 | } | |||
17944 | } else { | |||
17945 | cx.ThrowErrorMessage<MSG_NOT_CALLABLE>("Argument 1"); | |||
17946 | return false; | |||
17947 | } | |||
17948 | } else { | |||
17949 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
17950 | return false; | |||
17951 | } | |||
17952 | // NOTE: This assert does NOT call the function. | |||
17953 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassCallback(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
17954 | MOZ_KnownLive(self)(self)->PassCallback(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
17955 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 17955); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 17955; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
17956 | args.rval().setUndefined(); | |||
17957 | return true; | |||
17958 | } | |||
17959 | ||||
17960 | static const JSJitInfo passCallback_methodinfo = { | |||
17961 | { (JSJitGetterOp)passCallback }, | |||
17962 | { prototypes::id::TestExampleInterface }, | |||
17963 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
17964 | JSJitInfo::Method, | |||
17965 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
17966 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
17967 | false, /* isInfallible. False in setters. */ | |||
17968 | false, /* isMovable. Not relevant for setters. */ | |||
17969 | false, /* isEliminatable. Not relevant for setters. */ | |||
17970 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
17971 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
17972 | false, /* isTypedMethod. Only relevant for methods. */ | |||
17973 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
17974 | }; | |||
17975 | ||||
17976 | MOZ_CAN_RUN_SCRIPT static bool | |||
17977 | passNullableCallback(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
17978 | { | |||
17979 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableCallback"); | |||
17980 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject17983( cx, "TestExampleInterface" , "passNullableCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17981 | "TestExampleInterface", "passNullableCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject17983( cx, "TestExampleInterface" , "passNullableCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17982 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject17983( cx, "TestExampleInterface" , "passNullableCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
17983 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject17983( cx, "TestExampleInterface" , "passNullableCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
17984 | ||||
17985 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
17986 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableCallback", 1)) { | |||
17987 | return false; | |||
17988 | } | |||
17989 | RootedCallback<RefPtr<binding_detail::FastTestCallback>> arg0(cx); | |||
17990 | if (args[0].isObject()) { | |||
17991 | if (JS::IsCallable(&args[0].toObject())) { | |||
17992 | { // scope for tempRoot and tempGlobalRoot if needed | |||
17993 | arg0 = new binding_detail::FastTestCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
17994 | } | |||
17995 | } else { | |||
17996 | cx.ThrowErrorMessage<MSG_NOT_CALLABLE>("Argument 1"); | |||
17997 | return false; | |||
17998 | } | |||
17999 | } else if (args[0].isNullOrUndefined()) { | |||
18000 | arg0 = nullptr; | |||
18001 | } else { | |||
18002 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
18003 | return false; | |||
18004 | } | |||
18005 | // NOTE: This assert does NOT call the function. | |||
18006 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableCallback(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
18007 | MOZ_KnownLive(self)(self)->PassNullableCallback(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
18008 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18008); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18008; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18009 | args.rval().setUndefined(); | |||
18010 | return true; | |||
18011 | } | |||
18012 | ||||
18013 | static const JSJitInfo passNullableCallback_methodinfo = { | |||
18014 | { (JSJitGetterOp)passNullableCallback }, | |||
18015 | { prototypes::id::TestExampleInterface }, | |||
18016 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18017 | JSJitInfo::Method, | |||
18018 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18019 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18020 | false, /* isInfallible. False in setters. */ | |||
18021 | false, /* isMovable. Not relevant for setters. */ | |||
18022 | false, /* isEliminatable. Not relevant for setters. */ | |||
18023 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18024 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18025 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18026 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18027 | }; | |||
18028 | ||||
18029 | MOZ_CAN_RUN_SCRIPT static bool | |||
18030 | passOptionalCallback(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18031 | { | |||
18032 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalCallback"); | |||
18033 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18036( cx, "TestExampleInterface" , "passOptionalCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18034 | "TestExampleInterface", "passOptionalCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18036( cx, "TestExampleInterface" , "passOptionalCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18035 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18036( cx, "TestExampleInterface" , "passOptionalCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18036 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18036( cx, "TestExampleInterface" , "passOptionalCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
18037 | ||||
18038 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18039 | Optional<OwningNonNull<TestCallback>> arg0; | |||
18040 | if (args.hasDefined(0)) { | |||
18041 | arg0.Construct(); | |||
18042 | if (args[0].isObject()) { | |||
18043 | if (JS::IsCallable(&args[0].toObject())) { | |||
18044 | { // scope for tempRoot and tempGlobalRoot if needed | |||
18045 | JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject()); | |||
18046 | JS::Rooted<JSObject*> tempGlobalRoot(cx, JS::CurrentGlobalOrNull(cx)); | |||
18047 | arg0.Value() = new TestCallback(cx, tempRoot, tempGlobalRoot, GetIncumbentGlobal()); | |||
18048 | } | |||
18049 | } else { | |||
18050 | cx.ThrowErrorMessage<MSG_NOT_CALLABLE>("Argument 1"); | |||
18051 | return false; | |||
18052 | } | |||
18053 | } else { | |||
18054 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
18055 | return false; | |||
18056 | } | |||
18057 | } | |||
18058 | // NOTE: This assert does NOT call the function. | |||
18059 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalCallback(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))))>, "Should be returning void here"); | |||
18060 | MOZ_KnownLive(self)(self)->PassOptionalCallback(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))); | |||
18061 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18061); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18061; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18062 | args.rval().setUndefined(); | |||
18063 | return true; | |||
18064 | } | |||
18065 | ||||
18066 | static const JSJitInfo passOptionalCallback_methodinfo = { | |||
18067 | { (JSJitGetterOp)passOptionalCallback }, | |||
18068 | { prototypes::id::TestExampleInterface }, | |||
18069 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18070 | JSJitInfo::Method, | |||
18071 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18072 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18073 | false, /* isInfallible. False in setters. */ | |||
18074 | false, /* isMovable. Not relevant for setters. */ | |||
18075 | false, /* isEliminatable. Not relevant for setters. */ | |||
18076 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18077 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18078 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18079 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18080 | }; | |||
18081 | ||||
18082 | MOZ_CAN_RUN_SCRIPT static bool | |||
18083 | passOptionalNullableCallback(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18084 | { | |||
18085 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableCallback"); | |||
18086 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18089( cx, "TestExampleInterface" , "passOptionalNullableCallback", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18087 | "TestExampleInterface", "passOptionalNullableCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18089( cx, "TestExampleInterface" , "passOptionalNullableCallback", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18088 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18089( cx, "TestExampleInterface" , "passOptionalNullableCallback", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18089 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18089( cx, "TestExampleInterface" , "passOptionalNullableCallback", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18090 | ||||
18091 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18092 | Optional<RefPtr<TestCallback>> arg0; | |||
18093 | if (args.hasDefined(0)) { | |||
18094 | arg0.Construct(); | |||
18095 | if (args[0].isObject()) { | |||
18096 | if (JS::IsCallable(&args[0].toObject())) { | |||
18097 | { // scope for tempRoot and tempGlobalRoot if needed | |||
18098 | JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject()); | |||
18099 | JS::Rooted<JSObject*> tempGlobalRoot(cx, JS::CurrentGlobalOrNull(cx)); | |||
18100 | arg0.Value() = new TestCallback(cx, tempRoot, tempGlobalRoot, GetIncumbentGlobal()); | |||
18101 | } | |||
18102 | } else { | |||
18103 | cx.ThrowErrorMessage<MSG_NOT_CALLABLE>("Argument 1"); | |||
18104 | return false; | |||
18105 | } | |||
18106 | } else if (args[0].isNullOrUndefined()) { | |||
18107 | arg0.Value() = nullptr; | |||
18108 | } else { | |||
18109 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
18110 | return false; | |||
18111 | } | |||
18112 | } | |||
18113 | // NOTE: This assert does NOT call the function. | |||
18114 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableCallback(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
18115 | MOZ_KnownLive(self)(self)->PassOptionalNullableCallback(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
18116 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18116); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18116; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18117 | args.rval().setUndefined(); | |||
18118 | return true; | |||
18119 | } | |||
18120 | ||||
18121 | static const JSJitInfo passOptionalNullableCallback_methodinfo = { | |||
18122 | { (JSJitGetterOp)passOptionalNullableCallback }, | |||
18123 | { prototypes::id::TestExampleInterface }, | |||
18124 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18125 | JSJitInfo::Method, | |||
18126 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18127 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18128 | false, /* isInfallible. False in setters. */ | |||
18129 | false, /* isMovable. Not relevant for setters. */ | |||
18130 | false, /* isEliminatable. Not relevant for setters. */ | |||
18131 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18132 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18133 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18134 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18135 | }; | |||
18136 | ||||
18137 | MOZ_CAN_RUN_SCRIPT static bool | |||
18138 | passOptionalNullableCallbackWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18139 | { | |||
18140 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableCallbackWithDefaultValue"); | |||
18141 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18144( cx, "TestExampleInterface" , "passOptionalNullableCallbackWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18142 | "TestExampleInterface", "passOptionalNullableCallbackWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18144( cx, "TestExampleInterface" , "passOptionalNullableCallbackWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18143 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18144( cx, "TestExampleInterface" , "passOptionalNullableCallbackWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18144 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18144( cx, "TestExampleInterface" , "passOptionalNullableCallbackWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18145 | ||||
18146 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18147 | RootedCallback<RefPtr<binding_detail::FastTestCallback>> arg0(cx); | |||
18148 | if (args.hasDefined(0)) { | |||
18149 | if (args[0].isObject()) { | |||
18150 | if (JS::IsCallable(&args[0].toObject())) { | |||
18151 | { // scope for tempRoot and tempGlobalRoot if needed | |||
18152 | arg0 = new binding_detail::FastTestCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
18153 | } | |||
18154 | } else { | |||
18155 | cx.ThrowErrorMessage<MSG_NOT_CALLABLE>("Argument 1"); | |||
18156 | return false; | |||
18157 | } | |||
18158 | } else if (args[0].isNullOrUndefined()) { | |||
18159 | arg0 = nullptr; | |||
18160 | } else { | |||
18161 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
18162 | return false; | |||
18163 | } | |||
18164 | } else { | |||
18165 | arg0 = nullptr; | |||
18166 | } | |||
18167 | // NOTE: This assert does NOT call the function. | |||
18168 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableCallbackWithDefaultValue(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
18169 | MOZ_KnownLive(self)(self)->PassOptionalNullableCallbackWithDefaultValue(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
18170 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18170); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18170; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18171 | args.rval().setUndefined(); | |||
18172 | return true; | |||
18173 | } | |||
18174 | ||||
18175 | static const JSJitInfo passOptionalNullableCallbackWithDefaultValue_methodinfo = { | |||
18176 | { (JSJitGetterOp)passOptionalNullableCallbackWithDefaultValue }, | |||
18177 | { prototypes::id::TestExampleInterface }, | |||
18178 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18179 | JSJitInfo::Method, | |||
18180 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18181 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18182 | false, /* isInfallible. False in setters. */ | |||
18183 | false, /* isMovable. Not relevant for setters. */ | |||
18184 | false, /* isEliminatable. Not relevant for setters. */ | |||
18185 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18186 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18187 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18188 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18189 | }; | |||
18190 | ||||
18191 | MOZ_CAN_RUN_SCRIPT static bool | |||
18192 | receiveCallback(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18193 | { | |||
18194 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18197( cx, "TestExampleInterface" , "receiveCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18195 | "TestExampleInterface", "receiveCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18197( cx, "TestExampleInterface" , "receiveCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18196 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18197( cx, "TestExampleInterface" , "receiveCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18197 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18197( cx, "TestExampleInterface" , "receiveCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
18198 | ||||
18199 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18200 | RefPtr<TestCallback> result(MOZ_KnownLive(self)(self)->ReceiveCallback()); | |||
18201 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18201); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18201; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18202 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
18203 | if (!MaybeWrapObjectValue(cx, args.rval())) { | |||
18204 | return false; | |||
18205 | } | |||
18206 | return true; | |||
18207 | } | |||
18208 | ||||
18209 | static const JSJitInfo receiveCallback_methodinfo = { | |||
18210 | { (JSJitGetterOp)receiveCallback }, | |||
18211 | { prototypes::id::TestExampleInterface }, | |||
18212 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18213 | JSJitInfo::Method, | |||
18214 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18215 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
18216 | false, /* isInfallible. False in setters. */ | |||
18217 | false, /* isMovable. Not relevant for setters. */ | |||
18218 | false, /* isEliminatable. Not relevant for setters. */ | |||
18219 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18220 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18221 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18222 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18223 | }; | |||
18224 | ||||
18225 | MOZ_CAN_RUN_SCRIPT static bool | |||
18226 | receiveNullableCallback(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18227 | { | |||
18228 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18231( cx, "TestExampleInterface" , "receiveNullableCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18229 | "TestExampleInterface", "receiveNullableCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18231( cx, "TestExampleInterface" , "receiveNullableCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18230 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18231( cx, "TestExampleInterface" , "receiveNullableCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18231 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18231( cx, "TestExampleInterface" , "receiveNullableCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
18232 | ||||
18233 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18234 | RefPtr<TestCallback> result(MOZ_KnownLive(self)(self)->ReceiveNullableCallback()); | |||
18235 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18235); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18235; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18236 | if (result) { | |||
18237 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
18238 | if (!MaybeWrapObjectOrNullValue(cx, args.rval())) { | |||
18239 | return false; | |||
18240 | } | |||
18241 | return true; | |||
18242 | } else { | |||
18243 | args.rval().setNull(); | |||
18244 | return true; | |||
18245 | } | |||
18246 | } | |||
18247 | ||||
18248 | static const JSJitInfo receiveNullableCallback_methodinfo = { | |||
18249 | { (JSJitGetterOp)receiveNullableCallback }, | |||
18250 | { prototypes::id::TestExampleInterface }, | |||
18251 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18252 | JSJitInfo::Method, | |||
18253 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18254 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
18255 | false, /* isInfallible. False in setters. */ | |||
18256 | false, /* isMovable. Not relevant for setters. */ | |||
18257 | false, /* isEliminatable. Not relevant for setters. */ | |||
18258 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18259 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18260 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18261 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18262 | }; | |||
18263 | ||||
18264 | MOZ_CAN_RUN_SCRIPT static bool | |||
18265 | passNullableTreatAsNullCallback(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18266 | { | |||
18267 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableTreatAsNullCallback"); | |||
18268 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18271( cx, "TestExampleInterface" , "passNullableTreatAsNullCallback", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18269 | "TestExampleInterface", "passNullableTreatAsNullCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18271( cx, "TestExampleInterface" , "passNullableTreatAsNullCallback", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18270 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18271( cx, "TestExampleInterface" , "passNullableTreatAsNullCallback", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18271 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18271( cx, "TestExampleInterface" , "passNullableTreatAsNullCallback", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18272 | ||||
18273 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18274 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableTreatAsNullCallback", 1)) { | |||
18275 | return false; | |||
18276 | } | |||
18277 | RootedCallback<RefPtr<binding_detail::FastTestTreatAsNullCallback>> arg0(cx); | |||
18278 | if (args[0].isObject()) { | |||
18279 | if (JS::IsCallable(&args[0].toObject())) { | |||
18280 | { // scope for tempRoot and tempGlobalRoot if needed | |||
18281 | arg0 = new binding_detail::FastTestTreatAsNullCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
18282 | } | |||
18283 | } else { | |||
18284 | cx.ThrowErrorMessage<MSG_NOT_CALLABLE>("Argument 1"); | |||
18285 | return false; | |||
18286 | } | |||
18287 | } else if (args[0].isNullOrUndefined()) { | |||
18288 | arg0 = nullptr; | |||
18289 | } else { | |||
18290 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
18291 | return false; | |||
18292 | } | |||
18293 | // NOTE: This assert does NOT call the function. | |||
18294 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableTreatAsNullCallback(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
18295 | MOZ_KnownLive(self)(self)->PassNullableTreatAsNullCallback(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
18296 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18296); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18296; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18297 | args.rval().setUndefined(); | |||
18298 | return true; | |||
18299 | } | |||
18300 | ||||
18301 | static const JSJitInfo passNullableTreatAsNullCallback_methodinfo = { | |||
18302 | { (JSJitGetterOp)passNullableTreatAsNullCallback }, | |||
18303 | { prototypes::id::TestExampleInterface }, | |||
18304 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18305 | JSJitInfo::Method, | |||
18306 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18307 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18308 | false, /* isInfallible. False in setters. */ | |||
18309 | false, /* isMovable. Not relevant for setters. */ | |||
18310 | false, /* isEliminatable. Not relevant for setters. */ | |||
18311 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18312 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18313 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18314 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18315 | }; | |||
18316 | ||||
18317 | MOZ_CAN_RUN_SCRIPT static bool | |||
18318 | passOptionalNullableTreatAsNullCallback(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18319 | { | |||
18320 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableTreatAsNullCallback"); | |||
18321 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18324( cx, "TestExampleInterface" , "passOptionalNullableTreatAsNullCallback", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18322 | "TestExampleInterface", "passOptionalNullableTreatAsNullCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18324( cx, "TestExampleInterface" , "passOptionalNullableTreatAsNullCallback", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18323 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18324( cx, "TestExampleInterface" , "passOptionalNullableTreatAsNullCallback", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18324 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18324( cx, "TestExampleInterface" , "passOptionalNullableTreatAsNullCallback", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18325 | ||||
18326 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18327 | Optional<RefPtr<TestTreatAsNullCallback>> arg0; | |||
18328 | if (args.hasDefined(0)) { | |||
18329 | arg0.Construct(); | |||
18330 | if (args[0].isObject()) { | |||
18331 | if (JS::IsCallable(&args[0].toObject())) { | |||
18332 | { // scope for tempRoot and tempGlobalRoot if needed | |||
18333 | JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject()); | |||
18334 | JS::Rooted<JSObject*> tempGlobalRoot(cx, JS::CurrentGlobalOrNull(cx)); | |||
18335 | arg0.Value() = new TestTreatAsNullCallback(cx, tempRoot, tempGlobalRoot, GetIncumbentGlobal()); | |||
18336 | } | |||
18337 | } else { | |||
18338 | cx.ThrowErrorMessage<MSG_NOT_CALLABLE>("Argument 1"); | |||
18339 | return false; | |||
18340 | } | |||
18341 | } else if (args[0].isNullOrUndefined()) { | |||
18342 | arg0.Value() = nullptr; | |||
18343 | } else { | |||
18344 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
18345 | return false; | |||
18346 | } | |||
18347 | } | |||
18348 | // NOTE: This assert does NOT call the function. | |||
18349 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableTreatAsNullCallback(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
18350 | MOZ_KnownLive(self)(self)->PassOptionalNullableTreatAsNullCallback(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
18351 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18351); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18351; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18352 | args.rval().setUndefined(); | |||
18353 | return true; | |||
18354 | } | |||
18355 | ||||
18356 | static const JSJitInfo passOptionalNullableTreatAsNullCallback_methodinfo = { | |||
18357 | { (JSJitGetterOp)passOptionalNullableTreatAsNullCallback }, | |||
18358 | { prototypes::id::TestExampleInterface }, | |||
18359 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18360 | JSJitInfo::Method, | |||
18361 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18362 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18363 | false, /* isInfallible. False in setters. */ | |||
18364 | false, /* isMovable. Not relevant for setters. */ | |||
18365 | false, /* isEliminatable. Not relevant for setters. */ | |||
18366 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18367 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18368 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18369 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18370 | }; | |||
18371 | ||||
18372 | MOZ_CAN_RUN_SCRIPT static bool | |||
18373 | passOptionalNullableTreatAsNullCallbackWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18374 | { | |||
18375 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableTreatAsNullCallbackWithDefaultValue"); | |||
18376 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18379( cx, "TestExampleInterface" , "passOptionalNullableTreatAsNullCallbackWithDefaultValue", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
18377 | "TestExampleInterface", "passOptionalNullableTreatAsNullCallbackWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18379( cx, "TestExampleInterface" , "passOptionalNullableTreatAsNullCallbackWithDefaultValue", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
18378 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18379( cx, "TestExampleInterface" , "passOptionalNullableTreatAsNullCallbackWithDefaultValue", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
18379 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18379( cx, "TestExampleInterface" , "passOptionalNullableTreatAsNullCallbackWithDefaultValue", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
18380 | ||||
18381 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18382 | RootedCallback<RefPtr<binding_detail::FastTestTreatAsNullCallback>> arg0(cx); | |||
18383 | if (args.hasDefined(0)) { | |||
18384 | if (args[0].isObject()) { | |||
18385 | if (JS::IsCallable(&args[0].toObject())) { | |||
18386 | { // scope for tempRoot and tempGlobalRoot if needed | |||
18387 | arg0 = new binding_detail::FastTestTreatAsNullCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
18388 | } | |||
18389 | } else { | |||
18390 | cx.ThrowErrorMessage<MSG_NOT_CALLABLE>("Argument 1"); | |||
18391 | return false; | |||
18392 | } | |||
18393 | } else if (args[0].isNullOrUndefined()) { | |||
18394 | arg0 = nullptr; | |||
18395 | } else { | |||
18396 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
18397 | return false; | |||
18398 | } | |||
18399 | } else { | |||
18400 | arg0 = nullptr; | |||
18401 | } | |||
18402 | // NOTE: This assert does NOT call the function. | |||
18403 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableTreatAsNullCallbackWithDefaultValue(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
18404 | MOZ_KnownLive(self)(self)->PassOptionalNullableTreatAsNullCallbackWithDefaultValue(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
18405 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18405); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18405; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18406 | args.rval().setUndefined(); | |||
18407 | return true; | |||
18408 | } | |||
18409 | ||||
18410 | static const JSJitInfo passOptionalNullableTreatAsNullCallbackWithDefaultValue_methodinfo = { | |||
18411 | { (JSJitGetterOp)passOptionalNullableTreatAsNullCallbackWithDefaultValue }, | |||
18412 | { prototypes::id::TestExampleInterface }, | |||
18413 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18414 | JSJitInfo::Method, | |||
18415 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18416 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18417 | false, /* isInfallible. False in setters. */ | |||
18418 | false, /* isMovable. Not relevant for setters. */ | |||
18419 | false, /* isEliminatable. Not relevant for setters. */ | |||
18420 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18421 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18422 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18423 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18424 | }; | |||
18425 | ||||
18426 | MOZ_CAN_RUN_SCRIPT static bool | |||
18427 | passAny(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18428 | { | |||
18429 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18432( cx, "TestExampleInterface" , "passAny", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
18430 | "TestExampleInterface", "passAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18432( cx, "TestExampleInterface" , "passAny", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
18431 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18432( cx, "TestExampleInterface" , "passAny", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
18432 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18432( cx, "TestExampleInterface" , "passAny", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
18433 | ||||
18434 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18435 | if (!args.requireAtLeast(cx, "TestExampleInterface.passAny", 1)) { | |||
18436 | return false; | |||
18437 | } | |||
18438 | JS::Rooted<JS::Value> arg0(cx); | |||
18439 | arg0 = args[0]; | |||
18440 | // NOTE: This assert does NOT call the function. | |||
18441 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassAny(cx, arg0))>, "Should be returning void here"); | |||
18442 | MOZ_KnownLive(self)(self)->PassAny(cx, arg0); | |||
18443 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18443); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18443; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18444 | args.rval().setUndefined(); | |||
18445 | return true; | |||
18446 | } | |||
18447 | ||||
18448 | static const JSJitInfo passAny_methodinfo = { | |||
18449 | { (JSJitGetterOp)passAny }, | |||
18450 | { prototypes::id::TestExampleInterface }, | |||
18451 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18452 | JSJitInfo::Method, | |||
18453 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18454 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18455 | false, /* isInfallible. False in setters. */ | |||
18456 | false, /* isMovable. Not relevant for setters. */ | |||
18457 | false, /* isEliminatable. Not relevant for setters. */ | |||
18458 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18459 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18460 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18461 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18462 | }; | |||
18463 | ||||
18464 | MOZ_CAN_RUN_SCRIPT static bool | |||
18465 | passVariadicAny(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18466 | { | |||
18467 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18470( cx, "TestExampleInterface" , "passVariadicAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18468 | "TestExampleInterface", "passVariadicAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18470( cx, "TestExampleInterface" , "passVariadicAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18469 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18470( cx, "TestExampleInterface" , "passVariadicAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18470 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18470( cx, "TestExampleInterface" , "passVariadicAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
18471 | ||||
18472 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18473 | AutoSequence<JS::Value> arg0; | |||
18474 | SequenceRooter<JS::Value> arg0_holder(cx, &arg0); | |||
18475 | if (args.length() > 0) { | |||
18476 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
18477 | JS_ReportOutOfMemory(cx); | |||
18478 | return false; | |||
18479 | } | |||
18480 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
18481 | // OK to do infallible append here, since we ensured capacity already. | |||
18482 | JS::Value& slot = *arg0.AppendElement(); | |||
18483 | slot = args[variadicArg]; | |||
18484 | } | |||
18485 | } | |||
18486 | // NOTE: This assert does NOT call the function. | |||
18487 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
18488 | MOZ_KnownLive(self)(self)->PassVariadicAny(cx, Constify(arg0)); | |||
18489 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18489); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18489; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18490 | args.rval().setUndefined(); | |||
18491 | return true; | |||
18492 | } | |||
18493 | ||||
18494 | static const JSJitInfo passVariadicAny_methodinfo = { | |||
18495 | { (JSJitGetterOp)passVariadicAny }, | |||
18496 | { prototypes::id::TestExampleInterface }, | |||
18497 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18498 | JSJitInfo::Method, | |||
18499 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18500 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18501 | false, /* isInfallible. False in setters. */ | |||
18502 | false, /* isMovable. Not relevant for setters. */ | |||
18503 | false, /* isEliminatable. Not relevant for setters. */ | |||
18504 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18505 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18506 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18507 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18508 | }; | |||
18509 | ||||
18510 | MOZ_CAN_RUN_SCRIPT static bool | |||
18511 | passOptionalAny(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18512 | { | |||
18513 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18516( cx, "TestExampleInterface" , "passOptionalAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18514 | "TestExampleInterface", "passOptionalAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18516( cx, "TestExampleInterface" , "passOptionalAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18515 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18516( cx, "TestExampleInterface" , "passOptionalAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18516 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18516( cx, "TestExampleInterface" , "passOptionalAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
18517 | ||||
18518 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18519 | JS::Rooted<JS::Value> arg0(cx); | |||
18520 | if (args.hasDefined(0)) { | |||
18521 | arg0 = args[0]; | |||
18522 | } else { | |||
18523 | arg0 = JS::UndefinedValue(); | |||
18524 | } | |||
18525 | // NOTE: This assert does NOT call the function. | |||
18526 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalAny(cx, arg0))>, "Should be returning void here"); | |||
18527 | MOZ_KnownLive(self)(self)->PassOptionalAny(cx, arg0); | |||
18528 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18528); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18528; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18529 | args.rval().setUndefined(); | |||
18530 | return true; | |||
18531 | } | |||
18532 | ||||
18533 | static const JSJitInfo passOptionalAny_methodinfo = { | |||
18534 | { (JSJitGetterOp)passOptionalAny }, | |||
18535 | { prototypes::id::TestExampleInterface }, | |||
18536 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18537 | JSJitInfo::Method, | |||
18538 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18539 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18540 | false, /* isInfallible. False in setters. */ | |||
18541 | false, /* isMovable. Not relevant for setters. */ | |||
18542 | false, /* isEliminatable. Not relevant for setters. */ | |||
18543 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18544 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18545 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18546 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18547 | }; | |||
18548 | ||||
18549 | MOZ_CAN_RUN_SCRIPT static bool | |||
18550 | passAnyDefaultNull(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18551 | { | |||
18552 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18555( cx, "TestExampleInterface" , "passAnyDefaultNull", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18553 | "TestExampleInterface", "passAnyDefaultNull", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18555( cx, "TestExampleInterface" , "passAnyDefaultNull", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18554 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18555( cx, "TestExampleInterface" , "passAnyDefaultNull", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18555 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18555( cx, "TestExampleInterface" , "passAnyDefaultNull", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
18556 | ||||
18557 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18558 | JS::Rooted<JS::Value> arg0(cx); | |||
18559 | if (args.hasDefined(0)) { | |||
18560 | arg0 = args[0]; | |||
18561 | } else { | |||
18562 | arg0 = JS::NullValue(); | |||
18563 | } | |||
18564 | // NOTE: This assert does NOT call the function. | |||
18565 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassAnyDefaultNull(cx, arg0))>, "Should be returning void here"); | |||
18566 | MOZ_KnownLive(self)(self)->PassAnyDefaultNull(cx, arg0); | |||
18567 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18567); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18567; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18568 | args.rval().setUndefined(); | |||
18569 | return true; | |||
18570 | } | |||
18571 | ||||
18572 | static const JSJitInfo passAnyDefaultNull_methodinfo = { | |||
18573 | { (JSJitGetterOp)passAnyDefaultNull }, | |||
18574 | { prototypes::id::TestExampleInterface }, | |||
18575 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18576 | JSJitInfo::Method, | |||
18577 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18578 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18579 | false, /* isInfallible. False in setters. */ | |||
18580 | false, /* isMovable. Not relevant for setters. */ | |||
18581 | false, /* isEliminatable. Not relevant for setters. */ | |||
18582 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18583 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18584 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18585 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18586 | }; | |||
18587 | ||||
18588 | MOZ_CAN_RUN_SCRIPT static bool | |||
18589 | passSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18590 | { | |||
18591 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfAny"); | |||
18592 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18595( cx, "TestExampleInterface" , "passSequenceOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18593 | "TestExampleInterface", "passSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18595( cx, "TestExampleInterface" , "passSequenceOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18594 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18595( cx, "TestExampleInterface" , "passSequenceOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
18595 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18595( cx, "TestExampleInterface" , "passSequenceOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
18596 | ||||
18597 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18598 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfAny", 1)) { | |||
18599 | return false; | |||
18600 | } | |||
18601 | binding_detail::AutoSequence<JS::Value> arg0; | |||
18602 | SequenceRooter<JS::Value> arg0_holder(cx, &arg0); | |||
18603 | if (args[0].isObject()) { | |||
18604 | JS::ForOfIterator iter(cx); | |||
18605 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
18606 | return false; | |||
18607 | } | |||
18608 | if (!iter.valueIsIterable()) { | |||
18609 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18610 | return false; | |||
18611 | } | |||
18612 | binding_detail::AutoSequence<JS::Value> &arr = arg0; | |||
18613 | JS::Rooted<JS::Value> temp(cx); | |||
18614 | while (true) { | |||
18615 | bool done; | |||
18616 | if (!iter.next(&temp, &done)) { | |||
18617 | return false; | |||
18618 | } | |||
18619 | if (done) { | |||
18620 | break; | |||
18621 | } | |||
18622 | JS::Value* slotPtr = arr.AppendElement(mozilla::fallible); | |||
18623 | if (!slotPtr) { | |||
18624 | JS_ReportOutOfMemory(cx); | |||
18625 | return false; | |||
18626 | } | |||
18627 | JS::Value& slot = *slotPtr; | |||
18628 | slot = temp; | |||
18629 | } | |||
18630 | } else { | |||
18631 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18632 | return false; | |||
18633 | } | |||
18634 | // NOTE: This assert does NOT call the function. | |||
18635 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
18636 | MOZ_KnownLive(self)(self)->PassSequenceOfAny(cx, Constify(arg0)); | |||
18637 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18637); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18637; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18638 | args.rval().setUndefined(); | |||
18639 | return true; | |||
18640 | } | |||
18641 | ||||
18642 | static const JSJitInfo passSequenceOfAny_methodinfo = { | |||
18643 | { (JSJitGetterOp)passSequenceOfAny }, | |||
18644 | { prototypes::id::TestExampleInterface }, | |||
18645 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18646 | JSJitInfo::Method, | |||
18647 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18648 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18649 | false, /* isInfallible. False in setters. */ | |||
18650 | false, /* isMovable. Not relevant for setters. */ | |||
18651 | false, /* isEliminatable. Not relevant for setters. */ | |||
18652 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18653 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18654 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18655 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18656 | }; | |||
18657 | ||||
18658 | MOZ_CAN_RUN_SCRIPT static bool | |||
18659 | passNullableSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18660 | { | |||
18661 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableSequenceOfAny"); | |||
18662 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18665( cx, "TestExampleInterface" , "passNullableSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18663 | "TestExampleInterface", "passNullableSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18665( cx, "TestExampleInterface" , "passNullableSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18664 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18665( cx, "TestExampleInterface" , "passNullableSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18665 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18665( cx, "TestExampleInterface" , "passNullableSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18666 | ||||
18667 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18668 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableSequenceOfAny", 1)) { | |||
18669 | return false; | |||
18670 | } | |||
18671 | Nullable<Sequence<JS::Value>> arg0; | |||
18672 | SequenceRooter<JS::Value> arg0_holder(cx, &arg0.SetValue()); | |||
18673 | if (args[0].isObject()) { | |||
18674 | JS::ForOfIterator iter(cx); | |||
18675 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
18676 | return false; | |||
18677 | } | |||
18678 | if (!iter.valueIsIterable()) { | |||
18679 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18680 | return false; | |||
18681 | } | |||
18682 | Sequence<JS::Value> &arr = arg0.SetValue(); | |||
18683 | JS::Rooted<JS::Value> temp(cx); | |||
18684 | while (true) { | |||
18685 | bool done; | |||
18686 | if (!iter.next(&temp, &done)) { | |||
18687 | return false; | |||
18688 | } | |||
18689 | if (done) { | |||
18690 | break; | |||
18691 | } | |||
18692 | JS::Value* slotPtr = arr.AppendElement(mozilla::fallible); | |||
18693 | if (!slotPtr) { | |||
18694 | JS_ReportOutOfMemory(cx); | |||
18695 | return false; | |||
18696 | } | |||
18697 | JS::Value& slot = *slotPtr; | |||
18698 | slot = temp; | |||
18699 | } | |||
18700 | } else if (args[0].isNullOrUndefined()) { | |||
18701 | arg0.SetNull(); | |||
18702 | } else { | |||
18703 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18704 | return false; | |||
18705 | } | |||
18706 | // NOTE: This assert does NOT call the function. | |||
18707 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
18708 | MOZ_KnownLive(self)(self)->PassNullableSequenceOfAny(cx, Constify(arg0)); | |||
18709 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18709); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18709; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18710 | args.rval().setUndefined(); | |||
18711 | return true; | |||
18712 | } | |||
18713 | ||||
18714 | static const JSJitInfo passNullableSequenceOfAny_methodinfo = { | |||
18715 | { (JSJitGetterOp)passNullableSequenceOfAny }, | |||
18716 | { prototypes::id::TestExampleInterface }, | |||
18717 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18718 | JSJitInfo::Method, | |||
18719 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18720 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18721 | false, /* isInfallible. False in setters. */ | |||
18722 | false, /* isMovable. Not relevant for setters. */ | |||
18723 | false, /* isEliminatable. Not relevant for setters. */ | |||
18724 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18725 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18726 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18727 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18728 | }; | |||
18729 | ||||
18730 | MOZ_CAN_RUN_SCRIPT static bool | |||
18731 | passOptionalSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18732 | { | |||
18733 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalSequenceOfAny"); | |||
18734 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18737( cx, "TestExampleInterface" , "passOptionalSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18735 | "TestExampleInterface", "passOptionalSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18737( cx, "TestExampleInterface" , "passOptionalSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18736 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18737( cx, "TestExampleInterface" , "passOptionalSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18737 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18737( cx, "TestExampleInterface" , "passOptionalSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18738 | ||||
18739 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18740 | Optional<Sequence<JS::Value>> arg0; | |||
18741 | Maybe<SequenceRooter<JS::Value>> arg0_holder; | |||
18742 | if (args.hasDefined(0)) { | |||
18743 | arg0.Construct(); | |||
18744 | arg0_holder.emplace(cx, &arg0.Value()); | |||
18745 | if (args[0].isObject()) { | |||
18746 | JS::ForOfIterator iter(cx); | |||
18747 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
18748 | return false; | |||
18749 | } | |||
18750 | if (!iter.valueIsIterable()) { | |||
18751 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18752 | return false; | |||
18753 | } | |||
18754 | Sequence<JS::Value> &arr = arg0.Value(); | |||
18755 | JS::Rooted<JS::Value> temp(cx); | |||
18756 | while (true) { | |||
18757 | bool done; | |||
18758 | if (!iter.next(&temp, &done)) { | |||
18759 | return false; | |||
18760 | } | |||
18761 | if (done) { | |||
18762 | break; | |||
18763 | } | |||
18764 | JS::Value* slotPtr = arr.AppendElement(mozilla::fallible); | |||
18765 | if (!slotPtr) { | |||
18766 | JS_ReportOutOfMemory(cx); | |||
18767 | return false; | |||
18768 | } | |||
18769 | JS::Value& slot = *slotPtr; | |||
18770 | slot = temp; | |||
18771 | } | |||
18772 | } else { | |||
18773 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18774 | return false; | |||
18775 | } | |||
18776 | } | |||
18777 | // NOTE: This assert does NOT call the function. | |||
18778 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
18779 | MOZ_KnownLive(self)(self)->PassOptionalSequenceOfAny(cx, Constify(arg0)); | |||
18780 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18780); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18780; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18781 | args.rval().setUndefined(); | |||
18782 | return true; | |||
18783 | } | |||
18784 | ||||
18785 | static const JSJitInfo passOptionalSequenceOfAny_methodinfo = { | |||
18786 | { (JSJitGetterOp)passOptionalSequenceOfAny }, | |||
18787 | { prototypes::id::TestExampleInterface }, | |||
18788 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18789 | JSJitInfo::Method, | |||
18790 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18791 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18792 | false, /* isInfallible. False in setters. */ | |||
18793 | false, /* isMovable. Not relevant for setters. */ | |||
18794 | false, /* isEliminatable. Not relevant for setters. */ | |||
18795 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18796 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18797 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18798 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18799 | }; | |||
18800 | ||||
18801 | MOZ_CAN_RUN_SCRIPT static bool | |||
18802 | passOptionalNullableSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18803 | { | |||
18804 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequenceOfAny"); | |||
18805 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18808( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18806 | "TestExampleInterface", "passOptionalNullableSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18808( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18807 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18808( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18808 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18808( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18809 | ||||
18810 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18811 | Optional<Nullable<Sequence<JS::Value>>> arg0; | |||
18812 | Maybe<SequenceRooter<JS::Value>> arg0_holder; | |||
18813 | if (args.hasDefined(0)) { | |||
18814 | arg0.Construct(); | |||
18815 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
18816 | if (args[0].isObject()) { | |||
18817 | JS::ForOfIterator iter(cx); | |||
18818 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
18819 | return false; | |||
18820 | } | |||
18821 | if (!iter.valueIsIterable()) { | |||
18822 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18823 | return false; | |||
18824 | } | |||
18825 | Sequence<JS::Value> &arr = arg0.Value().SetValue(); | |||
18826 | JS::Rooted<JS::Value> temp(cx); | |||
18827 | while (true) { | |||
18828 | bool done; | |||
18829 | if (!iter.next(&temp, &done)) { | |||
18830 | return false; | |||
18831 | } | |||
18832 | if (done) { | |||
18833 | break; | |||
18834 | } | |||
18835 | JS::Value* slotPtr = arr.AppendElement(mozilla::fallible); | |||
18836 | if (!slotPtr) { | |||
18837 | JS_ReportOutOfMemory(cx); | |||
18838 | return false; | |||
18839 | } | |||
18840 | JS::Value& slot = *slotPtr; | |||
18841 | slot = temp; | |||
18842 | } | |||
18843 | } else if (args[0].isNullOrUndefined()) { | |||
18844 | arg0.Value().SetNull(); | |||
18845 | } else { | |||
18846 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18847 | return false; | |||
18848 | } | |||
18849 | } | |||
18850 | // NOTE: This assert does NOT call the function. | |||
18851 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
18852 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfAny(cx, Constify(arg0)); | |||
18853 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18853); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18853; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18854 | args.rval().setUndefined(); | |||
18855 | return true; | |||
18856 | } | |||
18857 | ||||
18858 | static const JSJitInfo passOptionalNullableSequenceOfAny_methodinfo = { | |||
18859 | { (JSJitGetterOp)passOptionalNullableSequenceOfAny }, | |||
18860 | { prototypes::id::TestExampleInterface }, | |||
18861 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18862 | JSJitInfo::Method, | |||
18863 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18864 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18865 | false, /* isInfallible. False in setters. */ | |||
18866 | false, /* isMovable. Not relevant for setters. */ | |||
18867 | false, /* isEliminatable. Not relevant for setters. */ | |||
18868 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18869 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18870 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18871 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18872 | }; | |||
18873 | ||||
18874 | MOZ_CAN_RUN_SCRIPT static bool | |||
18875 | passOptionalSequenceOfAnyWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18876 | { | |||
18877 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalSequenceOfAnyWithDefaultValue"); | |||
18878 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18881( cx, "TestExampleInterface" , "passOptionalSequenceOfAnyWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18879 | "TestExampleInterface", "passOptionalSequenceOfAnyWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18881( cx, "TestExampleInterface" , "passOptionalSequenceOfAnyWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18880 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18881( cx, "TestExampleInterface" , "passOptionalSequenceOfAnyWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18881 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18881( cx, "TestExampleInterface" , "passOptionalSequenceOfAnyWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18882 | ||||
18883 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18884 | Nullable<Sequence<JS::Value>> arg0; | |||
18885 | SequenceRooter<JS::Value> arg0_holder(cx, &arg0.SetValue()); | |||
18886 | if (args.hasDefined(0)) { | |||
18887 | if (args[0].isObject()) { | |||
18888 | JS::ForOfIterator iter(cx); | |||
18889 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
18890 | return false; | |||
18891 | } | |||
18892 | if (!iter.valueIsIterable()) { | |||
18893 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18894 | return false; | |||
18895 | } | |||
18896 | Sequence<JS::Value> &arr = arg0.SetValue(); | |||
18897 | JS::Rooted<JS::Value> temp(cx); | |||
18898 | while (true) { | |||
18899 | bool done; | |||
18900 | if (!iter.next(&temp, &done)) { | |||
18901 | return false; | |||
18902 | } | |||
18903 | if (done) { | |||
18904 | break; | |||
18905 | } | |||
18906 | JS::Value* slotPtr = arr.AppendElement(mozilla::fallible); | |||
18907 | if (!slotPtr) { | |||
18908 | JS_ReportOutOfMemory(cx); | |||
18909 | return false; | |||
18910 | } | |||
18911 | JS::Value& slot = *slotPtr; | |||
18912 | slot = temp; | |||
18913 | } | |||
18914 | } else if (args[0].isNullOrUndefined()) { | |||
18915 | arg0.SetNull(); | |||
18916 | } else { | |||
18917 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18918 | return false; | |||
18919 | } | |||
18920 | } else { | |||
18921 | arg0.SetNull(); | |||
18922 | } | |||
18923 | // NOTE: This assert does NOT call the function. | |||
18924 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalSequenceOfAnyWithDefaultValue(cx, Constify(arg0)))>, "Should be returning void here"); | |||
18925 | MOZ_KnownLive(self)(self)->PassOptionalSequenceOfAnyWithDefaultValue(cx, Constify(arg0)); | |||
18926 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 18926); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 18926; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
18927 | args.rval().setUndefined(); | |||
18928 | return true; | |||
18929 | } | |||
18930 | ||||
18931 | static const JSJitInfo passOptionalSequenceOfAnyWithDefaultValue_methodinfo = { | |||
18932 | { (JSJitGetterOp)passOptionalSequenceOfAnyWithDefaultValue }, | |||
18933 | { prototypes::id::TestExampleInterface }, | |||
18934 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
18935 | JSJitInfo::Method, | |||
18936 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
18937 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
18938 | false, /* isInfallible. False in setters. */ | |||
18939 | false, /* isMovable. Not relevant for setters. */ | |||
18940 | false, /* isEliminatable. Not relevant for setters. */ | |||
18941 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
18942 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
18943 | false, /* isTypedMethod. Only relevant for methods. */ | |||
18944 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
18945 | }; | |||
18946 | ||||
18947 | MOZ_CAN_RUN_SCRIPT static bool | |||
18948 | passSequenceOfSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
18949 | { | |||
18950 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfSequenceOfAny"); | |||
18951 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject18954( cx, "TestExampleInterface" , "passSequenceOfSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18952 | "TestExampleInterface", "passSequenceOfSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject18954( cx, "TestExampleInterface" , "passSequenceOfSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18953 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject18954( cx, "TestExampleInterface" , "passSequenceOfSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
18954 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject18954( cx, "TestExampleInterface" , "passSequenceOfSequenceOfAny", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
18955 | ||||
18956 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
18957 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfSequenceOfAny", 1)) { | |||
18958 | return false; | |||
18959 | } | |||
18960 | binding_detail::AutoSequence<Sequence<JS::Value>> arg0; | |||
18961 | SequenceRooter<Sequence<JS::Value>> arg0_holder(cx, &arg0); | |||
18962 | if (args[0].isObject()) { | |||
18963 | JS::ForOfIterator iter(cx); | |||
18964 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
18965 | return false; | |||
18966 | } | |||
18967 | if (!iter.valueIsIterable()) { | |||
18968 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
18969 | return false; | |||
18970 | } | |||
18971 | binding_detail::AutoSequence<Sequence<JS::Value>> &arr = arg0; | |||
18972 | JS::Rooted<JS::Value> temp(cx); | |||
18973 | while (true) { | |||
18974 | bool done; | |||
18975 | if (!iter.next(&temp, &done)) { | |||
18976 | return false; | |||
18977 | } | |||
18978 | if (done) { | |||
18979 | break; | |||
18980 | } | |||
18981 | Sequence<JS::Value>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
18982 | if (!slotPtr) { | |||
18983 | JS_ReportOutOfMemory(cx); | |||
18984 | return false; | |||
18985 | } | |||
18986 | Sequence<JS::Value>& slot = *slotPtr; | |||
18987 | if (temp.isObject()) { | |||
18988 | JS::ForOfIterator iter1(cx); | |||
18989 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
18990 | return false; | |||
18991 | } | |||
18992 | if (!iter1.valueIsIterable()) { | |||
18993 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
18994 | return false; | |||
18995 | } | |||
18996 | Sequence<JS::Value> &arr1 = slot; | |||
18997 | JS::Rooted<JS::Value> temp1(cx); | |||
18998 | while (true) { | |||
18999 | bool done1; | |||
19000 | if (!iter1.next(&temp1, &done1)) { | |||
19001 | return false; | |||
19002 | } | |||
19003 | if (done1) { | |||
19004 | break; | |||
19005 | } | |||
19006 | JS::Value* slotPtr1 = arr1.AppendElement(mozilla::fallible); | |||
19007 | if (!slotPtr1) { | |||
19008 | JS_ReportOutOfMemory(cx); | |||
19009 | return false; | |||
19010 | } | |||
19011 | JS::Value& slot1 = *slotPtr1; | |||
19012 | slot1 = temp1; | |||
19013 | } | |||
19014 | } else { | |||
19015 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
19016 | return false; | |||
19017 | } | |||
19018 | } | |||
19019 | } else { | |||
19020 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
19021 | return false; | |||
19022 | } | |||
19023 | // NOTE: This assert does NOT call the function. | |||
19024 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19025 | MOZ_KnownLive(self)(self)->PassSequenceOfSequenceOfAny(cx, Constify(arg0)); | |||
19026 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19026); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19026; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19027 | args.rval().setUndefined(); | |||
19028 | return true; | |||
19029 | } | |||
19030 | ||||
19031 | static const JSJitInfo passSequenceOfSequenceOfAny_methodinfo = { | |||
19032 | { (JSJitGetterOp)passSequenceOfSequenceOfAny }, | |||
19033 | { prototypes::id::TestExampleInterface }, | |||
19034 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19035 | JSJitInfo::Method, | |||
19036 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19037 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19038 | false, /* isInfallible. False in setters. */ | |||
19039 | false, /* isMovable. Not relevant for setters. */ | |||
19040 | false, /* isEliminatable. Not relevant for setters. */ | |||
19041 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19042 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19043 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19044 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19045 | }; | |||
19046 | ||||
19047 | MOZ_CAN_RUN_SCRIPT static bool | |||
19048 | passSequenceOfNullableSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19049 | { | |||
19050 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfNullableSequenceOfAny"); | |||
19051 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19054( cx, "TestExampleInterface" , "passSequenceOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19052 | "TestExampleInterface", "passSequenceOfNullableSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19054( cx, "TestExampleInterface" , "passSequenceOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19053 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19054( cx, "TestExampleInterface" , "passSequenceOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19054 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19054( cx, "TestExampleInterface" , "passSequenceOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
19055 | ||||
19056 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19057 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfNullableSequenceOfAny", 1)) { | |||
19058 | return false; | |||
19059 | } | |||
19060 | binding_detail::AutoSequence<Nullable<Sequence<JS::Value>>> arg0; | |||
19061 | SequenceRooter<Nullable<Sequence<JS::Value>>> arg0_holder(cx, &arg0); | |||
19062 | if (args[0].isObject()) { | |||
19063 | JS::ForOfIterator iter(cx); | |||
19064 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
19065 | return false; | |||
19066 | } | |||
19067 | if (!iter.valueIsIterable()) { | |||
19068 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
19069 | return false; | |||
19070 | } | |||
19071 | binding_detail::AutoSequence<Nullable<Sequence<JS::Value>>> &arr = arg0; | |||
19072 | JS::Rooted<JS::Value> temp(cx); | |||
19073 | while (true) { | |||
19074 | bool done; | |||
19075 | if (!iter.next(&temp, &done)) { | |||
19076 | return false; | |||
19077 | } | |||
19078 | if (done) { | |||
19079 | break; | |||
19080 | } | |||
19081 | Nullable<Sequence<JS::Value>>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
19082 | if (!slotPtr) { | |||
19083 | JS_ReportOutOfMemory(cx); | |||
19084 | return false; | |||
19085 | } | |||
19086 | Nullable<Sequence<JS::Value>>& slot = *slotPtr; | |||
19087 | if (temp.isObject()) { | |||
19088 | JS::ForOfIterator iter1(cx); | |||
19089 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
19090 | return false; | |||
19091 | } | |||
19092 | if (!iter1.valueIsIterable()) { | |||
19093 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
19094 | return false; | |||
19095 | } | |||
19096 | Sequence<JS::Value> &arr1 = slot.SetValue(); | |||
19097 | JS::Rooted<JS::Value> temp1(cx); | |||
19098 | while (true) { | |||
19099 | bool done1; | |||
19100 | if (!iter1.next(&temp1, &done1)) { | |||
19101 | return false; | |||
19102 | } | |||
19103 | if (done1) { | |||
19104 | break; | |||
19105 | } | |||
19106 | JS::Value* slotPtr1 = arr1.AppendElement(mozilla::fallible); | |||
19107 | if (!slotPtr1) { | |||
19108 | JS_ReportOutOfMemory(cx); | |||
19109 | return false; | |||
19110 | } | |||
19111 | JS::Value& slot1 = *slotPtr1; | |||
19112 | slot1 = temp1; | |||
19113 | } | |||
19114 | } else if (temp.isNullOrUndefined()) { | |||
19115 | slot.SetNull(); | |||
19116 | } else { | |||
19117 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
19118 | return false; | |||
19119 | } | |||
19120 | } | |||
19121 | } else { | |||
19122 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
19123 | return false; | |||
19124 | } | |||
19125 | // NOTE: This assert does NOT call the function. | |||
19126 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfNullableSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19127 | MOZ_KnownLive(self)(self)->PassSequenceOfNullableSequenceOfAny(cx, Constify(arg0)); | |||
19128 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19128); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19128; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19129 | args.rval().setUndefined(); | |||
19130 | return true; | |||
19131 | } | |||
19132 | ||||
19133 | static const JSJitInfo passSequenceOfNullableSequenceOfAny_methodinfo = { | |||
19134 | { (JSJitGetterOp)passSequenceOfNullableSequenceOfAny }, | |||
19135 | { prototypes::id::TestExampleInterface }, | |||
19136 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19137 | JSJitInfo::Method, | |||
19138 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19139 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19140 | false, /* isInfallible. False in setters. */ | |||
19141 | false, /* isMovable. Not relevant for setters. */ | |||
19142 | false, /* isEliminatable. Not relevant for setters. */ | |||
19143 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19144 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19145 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19146 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19147 | }; | |||
19148 | ||||
19149 | MOZ_CAN_RUN_SCRIPT static bool | |||
19150 | passNullableSequenceOfNullableSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19151 | { | |||
19152 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableSequenceOfNullableSequenceOfAny"); | |||
19153 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19156( cx, "TestExampleInterface" , "passNullableSequenceOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19154 | "TestExampleInterface", "passNullableSequenceOfNullableSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19156( cx, "TestExampleInterface" , "passNullableSequenceOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19155 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19156( cx, "TestExampleInterface" , "passNullableSequenceOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19156 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19156( cx, "TestExampleInterface" , "passNullableSequenceOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
19157 | ||||
19158 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19159 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableSequenceOfNullableSequenceOfAny", 1)) { | |||
19160 | return false; | |||
19161 | } | |||
19162 | Nullable<Sequence<Nullable<Sequence<JS::Value>>>> arg0; | |||
19163 | SequenceRooter<Nullable<Sequence<JS::Value>>> arg0_holder(cx, &arg0.SetValue()); | |||
19164 | if (args[0].isObject()) { | |||
19165 | JS::ForOfIterator iter(cx); | |||
19166 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
19167 | return false; | |||
19168 | } | |||
19169 | if (!iter.valueIsIterable()) { | |||
19170 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
19171 | return false; | |||
19172 | } | |||
19173 | Sequence<Nullable<Sequence<JS::Value>>> &arr = arg0.SetValue(); | |||
19174 | JS::Rooted<JS::Value> temp(cx); | |||
19175 | while (true) { | |||
19176 | bool done; | |||
19177 | if (!iter.next(&temp, &done)) { | |||
19178 | return false; | |||
19179 | } | |||
19180 | if (done) { | |||
19181 | break; | |||
19182 | } | |||
19183 | Nullable<Sequence<JS::Value>>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
19184 | if (!slotPtr) { | |||
19185 | JS_ReportOutOfMemory(cx); | |||
19186 | return false; | |||
19187 | } | |||
19188 | Nullable<Sequence<JS::Value>>& slot = *slotPtr; | |||
19189 | if (temp.isObject()) { | |||
19190 | JS::ForOfIterator iter1(cx); | |||
19191 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
19192 | return false; | |||
19193 | } | |||
19194 | if (!iter1.valueIsIterable()) { | |||
19195 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
19196 | return false; | |||
19197 | } | |||
19198 | Sequence<JS::Value> &arr1 = slot.SetValue(); | |||
19199 | JS::Rooted<JS::Value> temp1(cx); | |||
19200 | while (true) { | |||
19201 | bool done1; | |||
19202 | if (!iter1.next(&temp1, &done1)) { | |||
19203 | return false; | |||
19204 | } | |||
19205 | if (done1) { | |||
19206 | break; | |||
19207 | } | |||
19208 | JS::Value* slotPtr1 = arr1.AppendElement(mozilla::fallible); | |||
19209 | if (!slotPtr1) { | |||
19210 | JS_ReportOutOfMemory(cx); | |||
19211 | return false; | |||
19212 | } | |||
19213 | JS::Value& slot1 = *slotPtr1; | |||
19214 | slot1 = temp1; | |||
19215 | } | |||
19216 | } else if (temp.isNullOrUndefined()) { | |||
19217 | slot.SetNull(); | |||
19218 | } else { | |||
19219 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
19220 | return false; | |||
19221 | } | |||
19222 | } | |||
19223 | } else if (args[0].isNullOrUndefined()) { | |||
19224 | arg0.SetNull(); | |||
19225 | } else { | |||
19226 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
19227 | return false; | |||
19228 | } | |||
19229 | // NOTE: This assert does NOT call the function. | |||
19230 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableSequenceOfNullableSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19231 | MOZ_KnownLive(self)(self)->PassNullableSequenceOfNullableSequenceOfAny(cx, Constify(arg0)); | |||
19232 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19232); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19232; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19233 | args.rval().setUndefined(); | |||
19234 | return true; | |||
19235 | } | |||
19236 | ||||
19237 | static const JSJitInfo passNullableSequenceOfNullableSequenceOfAny_methodinfo = { | |||
19238 | { (JSJitGetterOp)passNullableSequenceOfNullableSequenceOfAny }, | |||
19239 | { prototypes::id::TestExampleInterface }, | |||
19240 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19241 | JSJitInfo::Method, | |||
19242 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19243 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19244 | false, /* isInfallible. False in setters. */ | |||
19245 | false, /* isMovable. Not relevant for setters. */ | |||
19246 | false, /* isEliminatable. Not relevant for setters. */ | |||
19247 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19248 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19249 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19250 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19251 | }; | |||
19252 | ||||
19253 | MOZ_CAN_RUN_SCRIPT static bool | |||
19254 | passOptionalNullableSequenceOfNullableSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19255 | { | |||
19256 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequenceOfNullableSequenceOfAny"); | |||
19257 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19260( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfAny", JS:: ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame:: Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
19258 | "TestExampleInterface", "passOptionalNullableSequenceOfNullableSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19260( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfAny", JS:: ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame:: Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
19259 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19260( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfAny", JS:: ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame:: Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
19260 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19260( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfAny", JS:: ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame:: Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
19261 | ||||
19262 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19263 | Optional<Nullable<Sequence<Nullable<Sequence<JS::Value>>>>> arg0; | |||
19264 | Maybe<SequenceRooter<Nullable<Sequence<JS::Value>>>> arg0_holder; | |||
19265 | if (args.hasDefined(0)) { | |||
19266 | arg0.Construct(); | |||
19267 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
19268 | if (args[0].isObject()) { | |||
19269 | JS::ForOfIterator iter(cx); | |||
19270 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
19271 | return false; | |||
19272 | } | |||
19273 | if (!iter.valueIsIterable()) { | |||
19274 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
19275 | return false; | |||
19276 | } | |||
19277 | Sequence<Nullable<Sequence<JS::Value>>> &arr = arg0.Value().SetValue(); | |||
19278 | JS::Rooted<JS::Value> temp(cx); | |||
19279 | while (true) { | |||
19280 | bool done; | |||
19281 | if (!iter.next(&temp, &done)) { | |||
19282 | return false; | |||
19283 | } | |||
19284 | if (done) { | |||
19285 | break; | |||
19286 | } | |||
19287 | Nullable<Sequence<JS::Value>>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
19288 | if (!slotPtr) { | |||
19289 | JS_ReportOutOfMemory(cx); | |||
19290 | return false; | |||
19291 | } | |||
19292 | Nullable<Sequence<JS::Value>>& slot = *slotPtr; | |||
19293 | if (temp.isObject()) { | |||
19294 | JS::ForOfIterator iter1(cx); | |||
19295 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
19296 | return false; | |||
19297 | } | |||
19298 | if (!iter1.valueIsIterable()) { | |||
19299 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
19300 | return false; | |||
19301 | } | |||
19302 | Sequence<JS::Value> &arr1 = slot.SetValue(); | |||
19303 | JS::Rooted<JS::Value> temp1(cx); | |||
19304 | while (true) { | |||
19305 | bool done1; | |||
19306 | if (!iter1.next(&temp1, &done1)) { | |||
19307 | return false; | |||
19308 | } | |||
19309 | if (done1) { | |||
19310 | break; | |||
19311 | } | |||
19312 | JS::Value* slotPtr1 = arr1.AppendElement(mozilla::fallible); | |||
19313 | if (!slotPtr1) { | |||
19314 | JS_ReportOutOfMemory(cx); | |||
19315 | return false; | |||
19316 | } | |||
19317 | JS::Value& slot1 = *slotPtr1; | |||
19318 | slot1 = temp1; | |||
19319 | } | |||
19320 | } else if (temp.isNullOrUndefined()) { | |||
19321 | slot.SetNull(); | |||
19322 | } else { | |||
19323 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
19324 | return false; | |||
19325 | } | |||
19326 | } | |||
19327 | } else if (args[0].isNullOrUndefined()) { | |||
19328 | arg0.Value().SetNull(); | |||
19329 | } else { | |||
19330 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
19331 | return false; | |||
19332 | } | |||
19333 | } | |||
19334 | // NOTE: This assert does NOT call the function. | |||
19335 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19336 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableSequenceOfAny(cx, Constify(arg0)); | |||
19337 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19337); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19337; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19338 | args.rval().setUndefined(); | |||
19339 | return true; | |||
19340 | } | |||
19341 | ||||
19342 | static const JSJitInfo passOptionalNullableSequenceOfNullableSequenceOfAny_methodinfo = { | |||
19343 | { (JSJitGetterOp)passOptionalNullableSequenceOfNullableSequenceOfAny }, | |||
19344 | { prototypes::id::TestExampleInterface }, | |||
19345 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19346 | JSJitInfo::Method, | |||
19347 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19348 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19349 | false, /* isInfallible. False in setters. */ | |||
19350 | false, /* isMovable. Not relevant for setters. */ | |||
19351 | false, /* isEliminatable. Not relevant for setters. */ | |||
19352 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19353 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19354 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19355 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19356 | }; | |||
19357 | ||||
19358 | MOZ_CAN_RUN_SCRIPT static bool | |||
19359 | passRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19360 | { | |||
19361 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfAny"); | |||
19362 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19365( cx, "TestExampleInterface" , "passRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19363 | "TestExampleInterface", "passRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19365( cx, "TestExampleInterface" , "passRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19364 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19365( cx, "TestExampleInterface" , "passRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19365 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19365( cx, "TestExampleInterface" , "passRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
19366 | ||||
19367 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19368 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfAny", 1)) { | |||
19369 | return false; | |||
19370 | } | |||
19371 | Record<nsString, JS::Value> arg0; | |||
19372 | RecordRooter<nsString, JS::Value> arg0_holder(cx, &arg0); | |||
19373 | if (args[0].isObject()) { | |||
19374 | auto& recordEntries = arg0.Entries(); | |||
19375 | ||||
19376 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
19377 | JS::RootedVector<jsid> ids(cx); | |||
19378 | if (!js::GetPropertyKeys(cx, recordObj, | |||
19379 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
19380 | return false; | |||
19381 | } | |||
19382 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
19383 | JS_ReportOutOfMemory(cx); | |||
19384 | return false; | |||
19385 | } | |||
19386 | JS::Rooted<JS::Value> propNameValue(cx); | |||
19387 | JS::Rooted<JS::Value> temp(cx); | |||
19388 | JS::Rooted<jsid> curId(cx); | |||
19389 | JS::Rooted<JS::Value> idVal(cx); | |||
19390 | // Use a hashset to keep track of ids seen, to avoid | |||
19391 | // introducing nasty O(N^2) behavior scanning for them all the | |||
19392 | // time. Ideally we'd use a data structure with O(1) lookup | |||
19393 | // _and_ ordering for the MozMap, but we don't have one lying | |||
19394 | // around. | |||
19395 | nsTHashtable<nsStringHashKey> idsSeen; | |||
19396 | for (size_t i = 0; i < ids.length(); ++i) { | |||
19397 | curId = ids[i]; | |||
19398 | ||||
19399 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
19400 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
19401 | &desc)) { | |||
19402 | return false; | |||
19403 | } | |||
19404 | ||||
19405 | if (desc.isNothing() || !desc->enumerable()) { | |||
19406 | continue; | |||
19407 | } | |||
19408 | ||||
19409 | idVal = js::IdToValue(curId); | |||
19410 | nsString propName; | |||
19411 | // This will just throw if idVal is a Symbol, like the spec says | |||
19412 | // to do. | |||
19413 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
19414 | return false; | |||
19415 | } | |||
19416 | ||||
19417 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
19418 | return false; | |||
19419 | } | |||
19420 | ||||
19421 | Record<nsString, JS::Value>::EntryType* entry; | |||
19422 | if (!idsSeen.EnsureInserted(propName)) { | |||
19423 | // Find the existing entry. | |||
19424 | auto idx = recordEntries.IndexOf(propName); | |||
19425 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19426); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19426; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
19426 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19426); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19426; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
19427 | // Now blow it away to make it look like it was just added | |||
19428 | // to the array, because it's not obvious that it's | |||
19429 | // safe to write to its already-initialized mValue via our | |||
19430 | // normal codegen conversions. For example, the value | |||
19431 | // could be a union and this would change its type, but | |||
19432 | // codegen assumes we won't do that. | |||
19433 | entry = recordEntries.ReconstructElementAt(idx); | |||
19434 | } else { | |||
19435 | // Safe to do an infallible append here, because we did a | |||
19436 | // SetCapacity above to the right capacity. | |||
19437 | entry = recordEntries.AppendElement(); | |||
19438 | } | |||
19439 | entry->mKey = propName; | |||
19440 | JS::Value& slot = entry->mValue; | |||
19441 | slot = temp; | |||
19442 | } | |||
19443 | } else { | |||
19444 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
19445 | return false; | |||
19446 | } | |||
19447 | // NOTE: This assert does NOT call the function. | |||
19448 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19449 | MOZ_KnownLive(self)(self)->PassRecordOfAny(cx, Constify(arg0)); | |||
19450 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19450); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19450; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19451 | args.rval().setUndefined(); | |||
19452 | return true; | |||
19453 | } | |||
19454 | ||||
19455 | static const JSJitInfo passRecordOfAny_methodinfo = { | |||
19456 | { (JSJitGetterOp)passRecordOfAny }, | |||
19457 | { prototypes::id::TestExampleInterface }, | |||
19458 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19459 | JSJitInfo::Method, | |||
19460 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19461 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19462 | false, /* isInfallible. False in setters. */ | |||
19463 | false, /* isMovable. Not relevant for setters. */ | |||
19464 | false, /* isEliminatable. Not relevant for setters. */ | |||
19465 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19466 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19467 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19468 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19469 | }; | |||
19470 | ||||
19471 | MOZ_CAN_RUN_SCRIPT static bool | |||
19472 | passNullableRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19473 | { | |||
19474 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableRecordOfAny"); | |||
19475 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19478( cx, "TestExampleInterface" , "passNullableRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19476 | "TestExampleInterface", "passNullableRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19478( cx, "TestExampleInterface" , "passNullableRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19477 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19478( cx, "TestExampleInterface" , "passNullableRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19478 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19478( cx, "TestExampleInterface" , "passNullableRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
19479 | ||||
19480 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19481 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableRecordOfAny", 1)) { | |||
19482 | return false; | |||
19483 | } | |||
19484 | Nullable<Record<nsString, JS::Value>> arg0; | |||
19485 | RecordRooter<nsString, JS::Value> arg0_holder(cx, &arg0.SetValue()); | |||
19486 | if (args[0].isObject()) { | |||
19487 | auto& recordEntries = arg0.SetValue().Entries(); | |||
19488 | ||||
19489 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
19490 | JS::RootedVector<jsid> ids(cx); | |||
19491 | if (!js::GetPropertyKeys(cx, recordObj, | |||
19492 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
19493 | return false; | |||
19494 | } | |||
19495 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
19496 | JS_ReportOutOfMemory(cx); | |||
19497 | return false; | |||
19498 | } | |||
19499 | JS::Rooted<JS::Value> propNameValue(cx); | |||
19500 | JS::Rooted<JS::Value> temp(cx); | |||
19501 | JS::Rooted<jsid> curId(cx); | |||
19502 | JS::Rooted<JS::Value> idVal(cx); | |||
19503 | // Use a hashset to keep track of ids seen, to avoid | |||
19504 | // introducing nasty O(N^2) behavior scanning for them all the | |||
19505 | // time. Ideally we'd use a data structure with O(1) lookup | |||
19506 | // _and_ ordering for the MozMap, but we don't have one lying | |||
19507 | // around. | |||
19508 | nsTHashtable<nsStringHashKey> idsSeen; | |||
19509 | for (size_t i = 0; i < ids.length(); ++i) { | |||
19510 | curId = ids[i]; | |||
19511 | ||||
19512 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
19513 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
19514 | &desc)) { | |||
19515 | return false; | |||
19516 | } | |||
19517 | ||||
19518 | if (desc.isNothing() || !desc->enumerable()) { | |||
19519 | continue; | |||
19520 | } | |||
19521 | ||||
19522 | idVal = js::IdToValue(curId); | |||
19523 | nsString propName; | |||
19524 | // This will just throw if idVal is a Symbol, like the spec says | |||
19525 | // to do. | |||
19526 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
19527 | return false; | |||
19528 | } | |||
19529 | ||||
19530 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
19531 | return false; | |||
19532 | } | |||
19533 | ||||
19534 | Record<nsString, JS::Value>::EntryType* entry; | |||
19535 | if (!idsSeen.EnsureInserted(propName)) { | |||
19536 | // Find the existing entry. | |||
19537 | auto idx = recordEntries.IndexOf(propName); | |||
19538 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19539); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19539; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
19539 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19539); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19539; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
19540 | // Now blow it away to make it look like it was just added | |||
19541 | // to the array, because it's not obvious that it's | |||
19542 | // safe to write to its already-initialized mValue via our | |||
19543 | // normal codegen conversions. For example, the value | |||
19544 | // could be a union and this would change its type, but | |||
19545 | // codegen assumes we won't do that. | |||
19546 | entry = recordEntries.ReconstructElementAt(idx); | |||
19547 | } else { | |||
19548 | // Safe to do an infallible append here, because we did a | |||
19549 | // SetCapacity above to the right capacity. | |||
19550 | entry = recordEntries.AppendElement(); | |||
19551 | } | |||
19552 | entry->mKey = propName; | |||
19553 | JS::Value& slot = entry->mValue; | |||
19554 | slot = temp; | |||
19555 | } | |||
19556 | } else if (args[0].isNullOrUndefined()) { | |||
19557 | arg0.SetNull(); | |||
19558 | } else { | |||
19559 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
19560 | return false; | |||
19561 | } | |||
19562 | // NOTE: This assert does NOT call the function. | |||
19563 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19564 | MOZ_KnownLive(self)(self)->PassNullableRecordOfAny(cx, Constify(arg0)); | |||
19565 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19565); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19565; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19566 | args.rval().setUndefined(); | |||
19567 | return true; | |||
19568 | } | |||
19569 | ||||
19570 | static const JSJitInfo passNullableRecordOfAny_methodinfo = { | |||
19571 | { (JSJitGetterOp)passNullableRecordOfAny }, | |||
19572 | { prototypes::id::TestExampleInterface }, | |||
19573 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19574 | JSJitInfo::Method, | |||
19575 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19576 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19577 | false, /* isInfallible. False in setters. */ | |||
19578 | false, /* isMovable. Not relevant for setters. */ | |||
19579 | false, /* isEliminatable. Not relevant for setters. */ | |||
19580 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19581 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19582 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19583 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19584 | }; | |||
19585 | ||||
19586 | MOZ_CAN_RUN_SCRIPT static bool | |||
19587 | passOptionalRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19588 | { | |||
19589 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalRecordOfAny"); | |||
19590 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19593( cx, "TestExampleInterface" , "passOptionalRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19591 | "TestExampleInterface", "passOptionalRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19593( cx, "TestExampleInterface" , "passOptionalRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19592 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19593( cx, "TestExampleInterface" , "passOptionalRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19593 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19593( cx, "TestExampleInterface" , "passOptionalRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
19594 | ||||
19595 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19596 | Optional<Record<nsString, JS::Value>> arg0; | |||
19597 | Maybe<RecordRooter<nsString, JS::Value>> arg0_holder; | |||
19598 | if (args.hasDefined(0)) { | |||
19599 | arg0.Construct(); | |||
19600 | arg0_holder.emplace(cx, &arg0.Value()); | |||
19601 | if (args[0].isObject()) { | |||
19602 | auto& recordEntries = arg0.Value().Entries(); | |||
19603 | ||||
19604 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
19605 | JS::RootedVector<jsid> ids(cx); | |||
19606 | if (!js::GetPropertyKeys(cx, recordObj, | |||
19607 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
19608 | return false; | |||
19609 | } | |||
19610 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
19611 | JS_ReportOutOfMemory(cx); | |||
19612 | return false; | |||
19613 | } | |||
19614 | JS::Rooted<JS::Value> propNameValue(cx); | |||
19615 | JS::Rooted<JS::Value> temp(cx); | |||
19616 | JS::Rooted<jsid> curId(cx); | |||
19617 | JS::Rooted<JS::Value> idVal(cx); | |||
19618 | // Use a hashset to keep track of ids seen, to avoid | |||
19619 | // introducing nasty O(N^2) behavior scanning for them all the | |||
19620 | // time. Ideally we'd use a data structure with O(1) lookup | |||
19621 | // _and_ ordering for the MozMap, but we don't have one lying | |||
19622 | // around. | |||
19623 | nsTHashtable<nsStringHashKey> idsSeen; | |||
19624 | for (size_t i = 0; i < ids.length(); ++i) { | |||
19625 | curId = ids[i]; | |||
19626 | ||||
19627 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
19628 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
19629 | &desc)) { | |||
19630 | return false; | |||
19631 | } | |||
19632 | ||||
19633 | if (desc.isNothing() || !desc->enumerable()) { | |||
19634 | continue; | |||
19635 | } | |||
19636 | ||||
19637 | idVal = js::IdToValue(curId); | |||
19638 | nsString propName; | |||
19639 | // This will just throw if idVal is a Symbol, like the spec says | |||
19640 | // to do. | |||
19641 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
19642 | return false; | |||
19643 | } | |||
19644 | ||||
19645 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
19646 | return false; | |||
19647 | } | |||
19648 | ||||
19649 | Record<nsString, JS::Value>::EntryType* entry; | |||
19650 | if (!idsSeen.EnsureInserted(propName)) { | |||
19651 | // Find the existing entry. | |||
19652 | auto idx = recordEntries.IndexOf(propName); | |||
19653 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19654); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19654; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
19654 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19654); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19654; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
19655 | // Now blow it away to make it look like it was just added | |||
19656 | // to the array, because it's not obvious that it's | |||
19657 | // safe to write to its already-initialized mValue via our | |||
19658 | // normal codegen conversions. For example, the value | |||
19659 | // could be a union and this would change its type, but | |||
19660 | // codegen assumes we won't do that. | |||
19661 | entry = recordEntries.ReconstructElementAt(idx); | |||
19662 | } else { | |||
19663 | // Safe to do an infallible append here, because we did a | |||
19664 | // SetCapacity above to the right capacity. | |||
19665 | entry = recordEntries.AppendElement(); | |||
19666 | } | |||
19667 | entry->mKey = propName; | |||
19668 | JS::Value& slot = entry->mValue; | |||
19669 | slot = temp; | |||
19670 | } | |||
19671 | } else { | |||
19672 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
19673 | return false; | |||
19674 | } | |||
19675 | } | |||
19676 | // NOTE: This assert does NOT call the function. | |||
19677 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19678 | MOZ_KnownLive(self)(self)->PassOptionalRecordOfAny(cx, Constify(arg0)); | |||
19679 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19679); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19679; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19680 | args.rval().setUndefined(); | |||
19681 | return true; | |||
19682 | } | |||
19683 | ||||
19684 | static const JSJitInfo passOptionalRecordOfAny_methodinfo = { | |||
19685 | { (JSJitGetterOp)passOptionalRecordOfAny }, | |||
19686 | { prototypes::id::TestExampleInterface }, | |||
19687 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19688 | JSJitInfo::Method, | |||
19689 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19690 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19691 | false, /* isInfallible. False in setters. */ | |||
19692 | false, /* isMovable. Not relevant for setters. */ | |||
19693 | false, /* isEliminatable. Not relevant for setters. */ | |||
19694 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19695 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19696 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19697 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19698 | }; | |||
19699 | ||||
19700 | MOZ_CAN_RUN_SCRIPT static bool | |||
19701 | passOptionalNullableRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19702 | { | |||
19703 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableRecordOfAny"); | |||
19704 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19707( cx, "TestExampleInterface" , "passOptionalNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19705 | "TestExampleInterface", "passOptionalNullableRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19707( cx, "TestExampleInterface" , "passOptionalNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19706 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19707( cx, "TestExampleInterface" , "passOptionalNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19707 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19707( cx, "TestExampleInterface" , "passOptionalNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
19708 | ||||
19709 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19710 | Optional<Nullable<Record<nsString, JS::Value>>> arg0; | |||
19711 | Maybe<RecordRooter<nsString, JS::Value>> arg0_holder; | |||
19712 | if (args.hasDefined(0)) { | |||
19713 | arg0.Construct(); | |||
19714 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
19715 | if (args[0].isObject()) { | |||
19716 | auto& recordEntries = arg0.Value().SetValue().Entries(); | |||
19717 | ||||
19718 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
19719 | JS::RootedVector<jsid> ids(cx); | |||
19720 | if (!js::GetPropertyKeys(cx, recordObj, | |||
19721 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
19722 | return false; | |||
19723 | } | |||
19724 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
19725 | JS_ReportOutOfMemory(cx); | |||
19726 | return false; | |||
19727 | } | |||
19728 | JS::Rooted<JS::Value> propNameValue(cx); | |||
19729 | JS::Rooted<JS::Value> temp(cx); | |||
19730 | JS::Rooted<jsid> curId(cx); | |||
19731 | JS::Rooted<JS::Value> idVal(cx); | |||
19732 | // Use a hashset to keep track of ids seen, to avoid | |||
19733 | // introducing nasty O(N^2) behavior scanning for them all the | |||
19734 | // time. Ideally we'd use a data structure with O(1) lookup | |||
19735 | // _and_ ordering for the MozMap, but we don't have one lying | |||
19736 | // around. | |||
19737 | nsTHashtable<nsStringHashKey> idsSeen; | |||
19738 | for (size_t i = 0; i < ids.length(); ++i) { | |||
19739 | curId = ids[i]; | |||
19740 | ||||
19741 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
19742 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
19743 | &desc)) { | |||
19744 | return false; | |||
19745 | } | |||
19746 | ||||
19747 | if (desc.isNothing() || !desc->enumerable()) { | |||
19748 | continue; | |||
19749 | } | |||
19750 | ||||
19751 | idVal = js::IdToValue(curId); | |||
19752 | nsString propName; | |||
19753 | // This will just throw if idVal is a Symbol, like the spec says | |||
19754 | // to do. | |||
19755 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
19756 | return false; | |||
19757 | } | |||
19758 | ||||
19759 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
19760 | return false; | |||
19761 | } | |||
19762 | ||||
19763 | Record<nsString, JS::Value>::EntryType* entry; | |||
19764 | if (!idsSeen.EnsureInserted(propName)) { | |||
19765 | // Find the existing entry. | |||
19766 | auto idx = recordEntries.IndexOf(propName); | |||
19767 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19768); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19768; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
19768 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19768); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19768; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
19769 | // Now blow it away to make it look like it was just added | |||
19770 | // to the array, because it's not obvious that it's | |||
19771 | // safe to write to its already-initialized mValue via our | |||
19772 | // normal codegen conversions. For example, the value | |||
19773 | // could be a union and this would change its type, but | |||
19774 | // codegen assumes we won't do that. | |||
19775 | entry = recordEntries.ReconstructElementAt(idx); | |||
19776 | } else { | |||
19777 | // Safe to do an infallible append here, because we did a | |||
19778 | // SetCapacity above to the right capacity. | |||
19779 | entry = recordEntries.AppendElement(); | |||
19780 | } | |||
19781 | entry->mKey = propName; | |||
19782 | JS::Value& slot = entry->mValue; | |||
19783 | slot = temp; | |||
19784 | } | |||
19785 | } else if (args[0].isNullOrUndefined()) { | |||
19786 | arg0.Value().SetNull(); | |||
19787 | } else { | |||
19788 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
19789 | return false; | |||
19790 | } | |||
19791 | } | |||
19792 | // NOTE: This assert does NOT call the function. | |||
19793 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19794 | MOZ_KnownLive(self)(self)->PassOptionalNullableRecordOfAny(cx, Constify(arg0)); | |||
19795 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19795); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19795; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19796 | args.rval().setUndefined(); | |||
19797 | return true; | |||
19798 | } | |||
19799 | ||||
19800 | static const JSJitInfo passOptionalNullableRecordOfAny_methodinfo = { | |||
19801 | { (JSJitGetterOp)passOptionalNullableRecordOfAny }, | |||
19802 | { prototypes::id::TestExampleInterface }, | |||
19803 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19804 | JSJitInfo::Method, | |||
19805 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19806 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19807 | false, /* isInfallible. False in setters. */ | |||
19808 | false, /* isMovable. Not relevant for setters. */ | |||
19809 | false, /* isEliminatable. Not relevant for setters. */ | |||
19810 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19811 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19812 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19813 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19814 | }; | |||
19815 | ||||
19816 | MOZ_CAN_RUN_SCRIPT static bool | |||
19817 | passOptionalRecordOfAnyWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19818 | { | |||
19819 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalRecordOfAnyWithDefaultValue"); | |||
19820 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19823( cx, "TestExampleInterface" , "passOptionalRecordOfAnyWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19821 | "TestExampleInterface", "passOptionalRecordOfAnyWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19823( cx, "TestExampleInterface" , "passOptionalRecordOfAnyWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19822 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19823( cx, "TestExampleInterface" , "passOptionalRecordOfAnyWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
19823 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19823( cx, "TestExampleInterface" , "passOptionalRecordOfAnyWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
19824 | ||||
19825 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19826 | Nullable<Record<nsString, JS::Value>> arg0; | |||
19827 | RecordRooter<nsString, JS::Value> arg0_holder(cx, &arg0.SetValue()); | |||
19828 | if (args.hasDefined(0)) { | |||
19829 | if (args[0].isObject()) { | |||
19830 | auto& recordEntries = arg0.SetValue().Entries(); | |||
19831 | ||||
19832 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
19833 | JS::RootedVector<jsid> ids(cx); | |||
19834 | if (!js::GetPropertyKeys(cx, recordObj, | |||
19835 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
19836 | return false; | |||
19837 | } | |||
19838 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
19839 | JS_ReportOutOfMemory(cx); | |||
19840 | return false; | |||
19841 | } | |||
19842 | JS::Rooted<JS::Value> propNameValue(cx); | |||
19843 | JS::Rooted<JS::Value> temp(cx); | |||
19844 | JS::Rooted<jsid> curId(cx); | |||
19845 | JS::Rooted<JS::Value> idVal(cx); | |||
19846 | // Use a hashset to keep track of ids seen, to avoid | |||
19847 | // introducing nasty O(N^2) behavior scanning for them all the | |||
19848 | // time. Ideally we'd use a data structure with O(1) lookup | |||
19849 | // _and_ ordering for the MozMap, but we don't have one lying | |||
19850 | // around. | |||
19851 | nsTHashtable<nsStringHashKey> idsSeen; | |||
19852 | for (size_t i = 0; i < ids.length(); ++i) { | |||
19853 | curId = ids[i]; | |||
19854 | ||||
19855 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
19856 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
19857 | &desc)) { | |||
19858 | return false; | |||
19859 | } | |||
19860 | ||||
19861 | if (desc.isNothing() || !desc->enumerable()) { | |||
19862 | continue; | |||
19863 | } | |||
19864 | ||||
19865 | idVal = js::IdToValue(curId); | |||
19866 | nsString propName; | |||
19867 | // This will just throw if idVal is a Symbol, like the spec says | |||
19868 | // to do. | |||
19869 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
19870 | return false; | |||
19871 | } | |||
19872 | ||||
19873 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
19874 | return false; | |||
19875 | } | |||
19876 | ||||
19877 | Record<nsString, JS::Value>::EntryType* entry; | |||
19878 | if (!idsSeen.EnsureInserted(propName)) { | |||
19879 | // Find the existing entry. | |||
19880 | auto idx = recordEntries.IndexOf(propName); | |||
19881 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19882); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19882; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
19882 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 19882); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 19882; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
19883 | // Now blow it away to make it look like it was just added | |||
19884 | // to the array, because it's not obvious that it's | |||
19885 | // safe to write to its already-initialized mValue via our | |||
19886 | // normal codegen conversions. For example, the value | |||
19887 | // could be a union and this would change its type, but | |||
19888 | // codegen assumes we won't do that. | |||
19889 | entry = recordEntries.ReconstructElementAt(idx); | |||
19890 | } else { | |||
19891 | // Safe to do an infallible append here, because we did a | |||
19892 | // SetCapacity above to the right capacity. | |||
19893 | entry = recordEntries.AppendElement(); | |||
19894 | } | |||
19895 | entry->mKey = propName; | |||
19896 | JS::Value& slot = entry->mValue; | |||
19897 | slot = temp; | |||
19898 | } | |||
19899 | } else if (args[0].isNullOrUndefined()) { | |||
19900 | arg0.SetNull(); | |||
19901 | } else { | |||
19902 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
19903 | return false; | |||
19904 | } | |||
19905 | } else { | |||
19906 | arg0.SetNull(); | |||
19907 | } | |||
19908 | // NOTE: This assert does NOT call the function. | |||
19909 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalRecordOfAnyWithDefaultValue(cx, Constify(arg0)))>, "Should be returning void here"); | |||
19910 | MOZ_KnownLive(self)(self)->PassOptionalRecordOfAnyWithDefaultValue(cx, Constify(arg0)); | |||
19911 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 19911); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 19911; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
19912 | args.rval().setUndefined(); | |||
19913 | return true; | |||
19914 | } | |||
19915 | ||||
19916 | static const JSJitInfo passOptionalRecordOfAnyWithDefaultValue_methodinfo = { | |||
19917 | { (JSJitGetterOp)passOptionalRecordOfAnyWithDefaultValue }, | |||
19918 | { prototypes::id::TestExampleInterface }, | |||
19919 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
19920 | JSJitInfo::Method, | |||
19921 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
19922 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
19923 | false, /* isInfallible. False in setters. */ | |||
19924 | false, /* isMovable. Not relevant for setters. */ | |||
19925 | false, /* isEliminatable. Not relevant for setters. */ | |||
19926 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
19927 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
19928 | false, /* isTypedMethod. Only relevant for methods. */ | |||
19929 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
19930 | }; | |||
19931 | ||||
19932 | MOZ_CAN_RUN_SCRIPT static bool | |||
19933 | passRecordOfRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
19934 | { | |||
19935 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfRecordOfAny"); | |||
19936 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject19939( cx, "TestExampleInterface" , "passRecordOfRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19937 | "TestExampleInterface", "passRecordOfRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject19939( cx, "TestExampleInterface" , "passRecordOfRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19938 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject19939( cx, "TestExampleInterface" , "passRecordOfRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
19939 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject19939( cx, "TestExampleInterface" , "passRecordOfRecordOfAny", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
19940 | ||||
19941 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
19942 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfRecordOfAny", 1)) { | |||
19943 | return false; | |||
19944 | } | |||
19945 | Record<nsString, Record<nsString, JS::Value>> arg0; | |||
19946 | RecordRooter<nsString, Record<nsString, JS::Value>> arg0_holder(cx, &arg0); | |||
19947 | if (args[0].isObject()) { | |||
19948 | auto& recordEntries = arg0.Entries(); | |||
19949 | ||||
19950 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
19951 | JS::RootedVector<jsid> ids(cx); | |||
19952 | if (!js::GetPropertyKeys(cx, recordObj, | |||
19953 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
19954 | return false; | |||
19955 | } | |||
19956 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
19957 | JS_ReportOutOfMemory(cx); | |||
19958 | return false; | |||
19959 | } | |||
19960 | JS::Rooted<JS::Value> propNameValue(cx); | |||
19961 | JS::Rooted<JS::Value> temp(cx); | |||
19962 | JS::Rooted<jsid> curId(cx); | |||
19963 | JS::Rooted<JS::Value> idVal(cx); | |||
19964 | // Use a hashset to keep track of ids seen, to avoid | |||
19965 | // introducing nasty O(N^2) behavior scanning for them all the | |||
19966 | // time. Ideally we'd use a data structure with O(1) lookup | |||
19967 | // _and_ ordering for the MozMap, but we don't have one lying | |||
19968 | // around. | |||
19969 | nsTHashtable<nsStringHashKey> idsSeen; | |||
19970 | for (size_t i = 0; i < ids.length(); ++i) { | |||
19971 | curId = ids[i]; | |||
19972 | ||||
19973 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
19974 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
19975 | &desc)) { | |||
19976 | return false; | |||
19977 | } | |||
19978 | ||||
19979 | if (desc.isNothing() || !desc->enumerable()) { | |||
19980 | continue; | |||
19981 | } | |||
19982 | ||||
19983 | idVal = js::IdToValue(curId); | |||
19984 | nsString propName; | |||
19985 | // This will just throw if idVal is a Symbol, like the spec says | |||
19986 | // to do. | |||
19987 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
19988 | return false; | |||
19989 | } | |||
19990 | ||||
19991 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
19992 | return false; | |||
19993 | } | |||
19994 | ||||
19995 | Record<nsString, Record<nsString, JS::Value>>::EntryType* entry; | |||
19996 | if (!idsSeen.EnsureInserted(propName)) { | |||
19997 | // Find the existing entry. | |||
19998 | auto idx = recordEntries.IndexOf(propName); | |||
19999 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20000); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20000; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20000 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20000); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20000; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20001 | // Now blow it away to make it look like it was just added | |||
20002 | // to the array, because it's not obvious that it's | |||
20003 | // safe to write to its already-initialized mValue via our | |||
20004 | // normal codegen conversions. For example, the value | |||
20005 | // could be a union and this would change its type, but | |||
20006 | // codegen assumes we won't do that. | |||
20007 | entry = recordEntries.ReconstructElementAt(idx); | |||
20008 | } else { | |||
20009 | // Safe to do an infallible append here, because we did a | |||
20010 | // SetCapacity above to the right capacity. | |||
20011 | entry = recordEntries.AppendElement(); | |||
20012 | } | |||
20013 | entry->mKey = propName; | |||
20014 | Record<nsString, JS::Value>& slot = entry->mValue; | |||
20015 | if (temp.isObject()) { | |||
20016 | auto& recordEntries = slot.Entries(); | |||
20017 | ||||
20018 | JS::Rooted<JSObject*> recordObj(cx, &temp.toObject()); | |||
20019 | JS::RootedVector<jsid> ids(cx); | |||
20020 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20021 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20022 | return false; | |||
20023 | } | |||
20024 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20025 | JS_ReportOutOfMemory(cx); | |||
20026 | return false; | |||
20027 | } | |||
20028 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20029 | JS::Rooted<JS::Value> temp(cx); | |||
20030 | JS::Rooted<jsid> curId(cx); | |||
20031 | JS::Rooted<JS::Value> idVal(cx); | |||
20032 | // Use a hashset to keep track of ids seen, to avoid | |||
20033 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20034 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20035 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20036 | // around. | |||
20037 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20038 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20039 | curId = ids[i]; | |||
20040 | ||||
20041 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20042 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20043 | &desc)) { | |||
20044 | return false; | |||
20045 | } | |||
20046 | ||||
20047 | if (desc.isNothing() || !desc->enumerable()) { | |||
20048 | continue; | |||
20049 | } | |||
20050 | ||||
20051 | idVal = js::IdToValue(curId); | |||
20052 | nsString propName; | |||
20053 | // This will just throw if idVal is a Symbol, like the spec says | |||
20054 | // to do. | |||
20055 | if (!ConvertJSValueToString(cx, idVal, "key of value in argument 1", propName)) { | |||
20056 | return false; | |||
20057 | } | |||
20058 | ||||
20059 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20060 | return false; | |||
20061 | } | |||
20062 | ||||
20063 | Record<nsString, JS::Value>::EntryType* entry; | |||
20064 | if (!idsSeen.EnsureInserted(propName)) { | |||
20065 | // Find the existing entry. | |||
20066 | auto idx = recordEntries.IndexOf(propName); | |||
20067 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20068); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20068; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20068 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20068); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20068; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20069 | // Now blow it away to make it look like it was just added | |||
20070 | // to the array, because it's not obvious that it's | |||
20071 | // safe to write to its already-initialized mValue via our | |||
20072 | // normal codegen conversions. For example, the value | |||
20073 | // could be a union and this would change its type, but | |||
20074 | // codegen assumes we won't do that. | |||
20075 | entry = recordEntries.ReconstructElementAt(idx); | |||
20076 | } else { | |||
20077 | // Safe to do an infallible append here, because we did a | |||
20078 | // SetCapacity above to the right capacity. | |||
20079 | entry = recordEntries.AppendElement(); | |||
20080 | } | |||
20081 | entry->mKey = propName; | |||
20082 | JS::Value& slot = entry->mValue; | |||
20083 | slot = temp; | |||
20084 | } | |||
20085 | } else { | |||
20086 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
20087 | return false; | |||
20088 | } | |||
20089 | } | |||
20090 | } else { | |||
20091 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
20092 | return false; | |||
20093 | } | |||
20094 | // NOTE: This assert does NOT call the function. | |||
20095 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
20096 | MOZ_KnownLive(self)(self)->PassRecordOfRecordOfAny(cx, Constify(arg0)); | |||
20097 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 20097); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 20097; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
20098 | args.rval().setUndefined(); | |||
20099 | return true; | |||
20100 | } | |||
20101 | ||||
20102 | static const JSJitInfo passRecordOfRecordOfAny_methodinfo = { | |||
20103 | { (JSJitGetterOp)passRecordOfRecordOfAny }, | |||
20104 | { prototypes::id::TestExampleInterface }, | |||
20105 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
20106 | JSJitInfo::Method, | |||
20107 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
20108 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
20109 | false, /* isInfallible. False in setters. */ | |||
20110 | false, /* isMovable. Not relevant for setters. */ | |||
20111 | false, /* isEliminatable. Not relevant for setters. */ | |||
20112 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
20113 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
20114 | false, /* isTypedMethod. Only relevant for methods. */ | |||
20115 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
20116 | }; | |||
20117 | ||||
20118 | MOZ_CAN_RUN_SCRIPT static bool | |||
20119 | passRecordOfNullableRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
20120 | { | |||
20121 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfNullableRecordOfAny"); | |||
20122 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject20125( cx, "TestExampleInterface" , "passRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20123 | "TestExampleInterface", "passRecordOfNullableRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject20125( cx, "TestExampleInterface" , "passRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20124 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject20125( cx, "TestExampleInterface" , "passRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20125 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject20125( cx, "TestExampleInterface" , "passRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
20126 | ||||
20127 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
20128 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfNullableRecordOfAny", 1)) { | |||
20129 | return false; | |||
20130 | } | |||
20131 | Record<nsString, Nullable<Record<nsString, JS::Value>>> arg0; | |||
20132 | RecordRooter<nsString, Nullable<Record<nsString, JS::Value>>> arg0_holder(cx, &arg0); | |||
20133 | if (args[0].isObject()) { | |||
20134 | auto& recordEntries = arg0.Entries(); | |||
20135 | ||||
20136 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
20137 | JS::RootedVector<jsid> ids(cx); | |||
20138 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20139 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20140 | return false; | |||
20141 | } | |||
20142 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20143 | JS_ReportOutOfMemory(cx); | |||
20144 | return false; | |||
20145 | } | |||
20146 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20147 | JS::Rooted<JS::Value> temp(cx); | |||
20148 | JS::Rooted<jsid> curId(cx); | |||
20149 | JS::Rooted<JS::Value> idVal(cx); | |||
20150 | // Use a hashset to keep track of ids seen, to avoid | |||
20151 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20152 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20153 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20154 | // around. | |||
20155 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20156 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20157 | curId = ids[i]; | |||
20158 | ||||
20159 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20160 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20161 | &desc)) { | |||
20162 | return false; | |||
20163 | } | |||
20164 | ||||
20165 | if (desc.isNothing() || !desc->enumerable()) { | |||
20166 | continue; | |||
20167 | } | |||
20168 | ||||
20169 | idVal = js::IdToValue(curId); | |||
20170 | nsString propName; | |||
20171 | // This will just throw if idVal is a Symbol, like the spec says | |||
20172 | // to do. | |||
20173 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
20174 | return false; | |||
20175 | } | |||
20176 | ||||
20177 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20178 | return false; | |||
20179 | } | |||
20180 | ||||
20181 | Record<nsString, Nullable<Record<nsString, JS::Value>>>::EntryType* entry; | |||
20182 | if (!idsSeen.EnsureInserted(propName)) { | |||
20183 | // Find the existing entry. | |||
20184 | auto idx = recordEntries.IndexOf(propName); | |||
20185 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20186); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20186; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20186 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20186); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20186; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20187 | // Now blow it away to make it look like it was just added | |||
20188 | // to the array, because it's not obvious that it's | |||
20189 | // safe to write to its already-initialized mValue via our | |||
20190 | // normal codegen conversions. For example, the value | |||
20191 | // could be a union and this would change its type, but | |||
20192 | // codegen assumes we won't do that. | |||
20193 | entry = recordEntries.ReconstructElementAt(idx); | |||
20194 | } else { | |||
20195 | // Safe to do an infallible append here, because we did a | |||
20196 | // SetCapacity above to the right capacity. | |||
20197 | entry = recordEntries.AppendElement(); | |||
20198 | } | |||
20199 | entry->mKey = propName; | |||
20200 | Nullable<Record<nsString, JS::Value>>& slot = entry->mValue; | |||
20201 | if (temp.isObject()) { | |||
20202 | auto& recordEntries = slot.SetValue().Entries(); | |||
20203 | ||||
20204 | JS::Rooted<JSObject*> recordObj(cx, &temp.toObject()); | |||
20205 | JS::RootedVector<jsid> ids(cx); | |||
20206 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20207 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20208 | return false; | |||
20209 | } | |||
20210 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20211 | JS_ReportOutOfMemory(cx); | |||
20212 | return false; | |||
20213 | } | |||
20214 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20215 | JS::Rooted<JS::Value> temp(cx); | |||
20216 | JS::Rooted<jsid> curId(cx); | |||
20217 | JS::Rooted<JS::Value> idVal(cx); | |||
20218 | // Use a hashset to keep track of ids seen, to avoid | |||
20219 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20220 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20221 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20222 | // around. | |||
20223 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20224 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20225 | curId = ids[i]; | |||
20226 | ||||
20227 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20228 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20229 | &desc)) { | |||
20230 | return false; | |||
20231 | } | |||
20232 | ||||
20233 | if (desc.isNothing() || !desc->enumerable()) { | |||
20234 | continue; | |||
20235 | } | |||
20236 | ||||
20237 | idVal = js::IdToValue(curId); | |||
20238 | nsString propName; | |||
20239 | // This will just throw if idVal is a Symbol, like the spec says | |||
20240 | // to do. | |||
20241 | if (!ConvertJSValueToString(cx, idVal, "key of value in argument 1", propName)) { | |||
20242 | return false; | |||
20243 | } | |||
20244 | ||||
20245 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20246 | return false; | |||
20247 | } | |||
20248 | ||||
20249 | Record<nsString, JS::Value>::EntryType* entry; | |||
20250 | if (!idsSeen.EnsureInserted(propName)) { | |||
20251 | // Find the existing entry. | |||
20252 | auto idx = recordEntries.IndexOf(propName); | |||
20253 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20254); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20254; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20254 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20254); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20254; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20255 | // Now blow it away to make it look like it was just added | |||
20256 | // to the array, because it's not obvious that it's | |||
20257 | // safe to write to its already-initialized mValue via our | |||
20258 | // normal codegen conversions. For example, the value | |||
20259 | // could be a union and this would change its type, but | |||
20260 | // codegen assumes we won't do that. | |||
20261 | entry = recordEntries.ReconstructElementAt(idx); | |||
20262 | } else { | |||
20263 | // Safe to do an infallible append here, because we did a | |||
20264 | // SetCapacity above to the right capacity. | |||
20265 | entry = recordEntries.AppendElement(); | |||
20266 | } | |||
20267 | entry->mKey = propName; | |||
20268 | JS::Value& slot = entry->mValue; | |||
20269 | slot = temp; | |||
20270 | } | |||
20271 | } else if (temp.isNullOrUndefined()) { | |||
20272 | slot.SetNull(); | |||
20273 | } else { | |||
20274 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
20275 | return false; | |||
20276 | } | |||
20277 | } | |||
20278 | } else { | |||
20279 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
20280 | return false; | |||
20281 | } | |||
20282 | // NOTE: This assert does NOT call the function. | |||
20283 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfNullableRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
20284 | MOZ_KnownLive(self)(self)->PassRecordOfNullableRecordOfAny(cx, Constify(arg0)); | |||
20285 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 20285); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 20285; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
20286 | args.rval().setUndefined(); | |||
20287 | return true; | |||
20288 | } | |||
20289 | ||||
20290 | static const JSJitInfo passRecordOfNullableRecordOfAny_methodinfo = { | |||
20291 | { (JSJitGetterOp)passRecordOfNullableRecordOfAny }, | |||
20292 | { prototypes::id::TestExampleInterface }, | |||
20293 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
20294 | JSJitInfo::Method, | |||
20295 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
20296 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
20297 | false, /* isInfallible. False in setters. */ | |||
20298 | false, /* isMovable. Not relevant for setters. */ | |||
20299 | false, /* isEliminatable. Not relevant for setters. */ | |||
20300 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
20301 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
20302 | false, /* isTypedMethod. Only relevant for methods. */ | |||
20303 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
20304 | }; | |||
20305 | ||||
20306 | MOZ_CAN_RUN_SCRIPT static bool | |||
20307 | passNullableRecordOfNullableRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
20308 | { | |||
20309 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableRecordOfNullableRecordOfAny"); | |||
20310 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject20313( cx, "TestExampleInterface" , "passNullableRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20311 | "TestExampleInterface", "passNullableRecordOfNullableRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject20313( cx, "TestExampleInterface" , "passNullableRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20312 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject20313( cx, "TestExampleInterface" , "passNullableRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20313 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject20313( cx, "TestExampleInterface" , "passNullableRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
20314 | ||||
20315 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
20316 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableRecordOfNullableRecordOfAny", 1)) { | |||
20317 | return false; | |||
20318 | } | |||
20319 | Nullable<Record<nsString, Nullable<Record<nsString, JS::Value>>>> arg0; | |||
20320 | RecordRooter<nsString, Nullable<Record<nsString, JS::Value>>> arg0_holder(cx, &arg0.SetValue()); | |||
20321 | if (args[0].isObject()) { | |||
20322 | auto& recordEntries = arg0.SetValue().Entries(); | |||
20323 | ||||
20324 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
20325 | JS::RootedVector<jsid> ids(cx); | |||
20326 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20327 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20328 | return false; | |||
20329 | } | |||
20330 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20331 | JS_ReportOutOfMemory(cx); | |||
20332 | return false; | |||
20333 | } | |||
20334 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20335 | JS::Rooted<JS::Value> temp(cx); | |||
20336 | JS::Rooted<jsid> curId(cx); | |||
20337 | JS::Rooted<JS::Value> idVal(cx); | |||
20338 | // Use a hashset to keep track of ids seen, to avoid | |||
20339 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20340 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20341 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20342 | // around. | |||
20343 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20344 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20345 | curId = ids[i]; | |||
20346 | ||||
20347 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20348 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20349 | &desc)) { | |||
20350 | return false; | |||
20351 | } | |||
20352 | ||||
20353 | if (desc.isNothing() || !desc->enumerable()) { | |||
20354 | continue; | |||
20355 | } | |||
20356 | ||||
20357 | idVal = js::IdToValue(curId); | |||
20358 | nsString propName; | |||
20359 | // This will just throw if idVal is a Symbol, like the spec says | |||
20360 | // to do. | |||
20361 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
20362 | return false; | |||
20363 | } | |||
20364 | ||||
20365 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20366 | return false; | |||
20367 | } | |||
20368 | ||||
20369 | Record<nsString, Nullable<Record<nsString, JS::Value>>>::EntryType* entry; | |||
20370 | if (!idsSeen.EnsureInserted(propName)) { | |||
20371 | // Find the existing entry. | |||
20372 | auto idx = recordEntries.IndexOf(propName); | |||
20373 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20374); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20374; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20374 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20374); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20374; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20375 | // Now blow it away to make it look like it was just added | |||
20376 | // to the array, because it's not obvious that it's | |||
20377 | // safe to write to its already-initialized mValue via our | |||
20378 | // normal codegen conversions. For example, the value | |||
20379 | // could be a union and this would change its type, but | |||
20380 | // codegen assumes we won't do that. | |||
20381 | entry = recordEntries.ReconstructElementAt(idx); | |||
20382 | } else { | |||
20383 | // Safe to do an infallible append here, because we did a | |||
20384 | // SetCapacity above to the right capacity. | |||
20385 | entry = recordEntries.AppendElement(); | |||
20386 | } | |||
20387 | entry->mKey = propName; | |||
20388 | Nullable<Record<nsString, JS::Value>>& slot = entry->mValue; | |||
20389 | if (temp.isObject()) { | |||
20390 | auto& recordEntries = slot.SetValue().Entries(); | |||
20391 | ||||
20392 | JS::Rooted<JSObject*> recordObj(cx, &temp.toObject()); | |||
20393 | JS::RootedVector<jsid> ids(cx); | |||
20394 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20395 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20396 | return false; | |||
20397 | } | |||
20398 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20399 | JS_ReportOutOfMemory(cx); | |||
20400 | return false; | |||
20401 | } | |||
20402 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20403 | JS::Rooted<JS::Value> temp(cx); | |||
20404 | JS::Rooted<jsid> curId(cx); | |||
20405 | JS::Rooted<JS::Value> idVal(cx); | |||
20406 | // Use a hashset to keep track of ids seen, to avoid | |||
20407 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20408 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20409 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20410 | // around. | |||
20411 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20412 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20413 | curId = ids[i]; | |||
20414 | ||||
20415 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20416 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20417 | &desc)) { | |||
20418 | return false; | |||
20419 | } | |||
20420 | ||||
20421 | if (desc.isNothing() || !desc->enumerable()) { | |||
20422 | continue; | |||
20423 | } | |||
20424 | ||||
20425 | idVal = js::IdToValue(curId); | |||
20426 | nsString propName; | |||
20427 | // This will just throw if idVal is a Symbol, like the spec says | |||
20428 | // to do. | |||
20429 | if (!ConvertJSValueToString(cx, idVal, "key of value in argument 1", propName)) { | |||
20430 | return false; | |||
20431 | } | |||
20432 | ||||
20433 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20434 | return false; | |||
20435 | } | |||
20436 | ||||
20437 | Record<nsString, JS::Value>::EntryType* entry; | |||
20438 | if (!idsSeen.EnsureInserted(propName)) { | |||
20439 | // Find the existing entry. | |||
20440 | auto idx = recordEntries.IndexOf(propName); | |||
20441 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20442); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20442; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20442 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20442); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20442; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20443 | // Now blow it away to make it look like it was just added | |||
20444 | // to the array, because it's not obvious that it's | |||
20445 | // safe to write to its already-initialized mValue via our | |||
20446 | // normal codegen conversions. For example, the value | |||
20447 | // could be a union and this would change its type, but | |||
20448 | // codegen assumes we won't do that. | |||
20449 | entry = recordEntries.ReconstructElementAt(idx); | |||
20450 | } else { | |||
20451 | // Safe to do an infallible append here, because we did a | |||
20452 | // SetCapacity above to the right capacity. | |||
20453 | entry = recordEntries.AppendElement(); | |||
20454 | } | |||
20455 | entry->mKey = propName; | |||
20456 | JS::Value& slot = entry->mValue; | |||
20457 | slot = temp; | |||
20458 | } | |||
20459 | } else if (temp.isNullOrUndefined()) { | |||
20460 | slot.SetNull(); | |||
20461 | } else { | |||
20462 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
20463 | return false; | |||
20464 | } | |||
20465 | } | |||
20466 | } else if (args[0].isNullOrUndefined()) { | |||
20467 | arg0.SetNull(); | |||
20468 | } else { | |||
20469 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
20470 | return false; | |||
20471 | } | |||
20472 | // NOTE: This assert does NOT call the function. | |||
20473 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableRecordOfNullableRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
20474 | MOZ_KnownLive(self)(self)->PassNullableRecordOfNullableRecordOfAny(cx, Constify(arg0)); | |||
20475 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 20475); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 20475; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
20476 | args.rval().setUndefined(); | |||
20477 | return true; | |||
20478 | } | |||
20479 | ||||
20480 | static const JSJitInfo passNullableRecordOfNullableRecordOfAny_methodinfo = { | |||
20481 | { (JSJitGetterOp)passNullableRecordOfNullableRecordOfAny }, | |||
20482 | { prototypes::id::TestExampleInterface }, | |||
20483 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
20484 | JSJitInfo::Method, | |||
20485 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
20486 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
20487 | false, /* isInfallible. False in setters. */ | |||
20488 | false, /* isMovable. Not relevant for setters. */ | |||
20489 | false, /* isEliminatable. Not relevant for setters. */ | |||
20490 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
20491 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
20492 | false, /* isTypedMethod. Only relevant for methods. */ | |||
20493 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
20494 | }; | |||
20495 | ||||
20496 | MOZ_CAN_RUN_SCRIPT static bool | |||
20497 | passOptionalNullableRecordOfNullableRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
20498 | { | |||
20499 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableRecordOfNullableRecordOfAny"); | |||
20500 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject20503( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20501 | "TestExampleInterface", "passOptionalNullableRecordOfNullableRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject20503( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20502 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject20503( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20503 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject20503( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
20504 | ||||
20505 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
20506 | Optional<Nullable<Record<nsString, Nullable<Record<nsString, JS::Value>>>>> arg0; | |||
20507 | Maybe<RecordRooter<nsString, Nullable<Record<nsString, JS::Value>>>> arg0_holder; | |||
20508 | if (args.hasDefined(0)) { | |||
20509 | arg0.Construct(); | |||
20510 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
20511 | if (args[0].isObject()) { | |||
20512 | auto& recordEntries = arg0.Value().SetValue().Entries(); | |||
20513 | ||||
20514 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
20515 | JS::RootedVector<jsid> ids(cx); | |||
20516 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20517 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20518 | return false; | |||
20519 | } | |||
20520 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20521 | JS_ReportOutOfMemory(cx); | |||
20522 | return false; | |||
20523 | } | |||
20524 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20525 | JS::Rooted<JS::Value> temp(cx); | |||
20526 | JS::Rooted<jsid> curId(cx); | |||
20527 | JS::Rooted<JS::Value> idVal(cx); | |||
20528 | // Use a hashset to keep track of ids seen, to avoid | |||
20529 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20530 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20531 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20532 | // around. | |||
20533 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20534 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20535 | curId = ids[i]; | |||
20536 | ||||
20537 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20538 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20539 | &desc)) { | |||
20540 | return false; | |||
20541 | } | |||
20542 | ||||
20543 | if (desc.isNothing() || !desc->enumerable()) { | |||
20544 | continue; | |||
20545 | } | |||
20546 | ||||
20547 | idVal = js::IdToValue(curId); | |||
20548 | nsString propName; | |||
20549 | // This will just throw if idVal is a Symbol, like the spec says | |||
20550 | // to do. | |||
20551 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
20552 | return false; | |||
20553 | } | |||
20554 | ||||
20555 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20556 | return false; | |||
20557 | } | |||
20558 | ||||
20559 | Record<nsString, Nullable<Record<nsString, JS::Value>>>::EntryType* entry; | |||
20560 | if (!idsSeen.EnsureInserted(propName)) { | |||
20561 | // Find the existing entry. | |||
20562 | auto idx = recordEntries.IndexOf(propName); | |||
20563 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20564); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20564; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20564 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20564); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20564; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20565 | // Now blow it away to make it look like it was just added | |||
20566 | // to the array, because it's not obvious that it's | |||
20567 | // safe to write to its already-initialized mValue via our | |||
20568 | // normal codegen conversions. For example, the value | |||
20569 | // could be a union and this would change its type, but | |||
20570 | // codegen assumes we won't do that. | |||
20571 | entry = recordEntries.ReconstructElementAt(idx); | |||
20572 | } else { | |||
20573 | // Safe to do an infallible append here, because we did a | |||
20574 | // SetCapacity above to the right capacity. | |||
20575 | entry = recordEntries.AppendElement(); | |||
20576 | } | |||
20577 | entry->mKey = propName; | |||
20578 | Nullable<Record<nsString, JS::Value>>& slot = entry->mValue; | |||
20579 | if (temp.isObject()) { | |||
20580 | auto& recordEntries = slot.SetValue().Entries(); | |||
20581 | ||||
20582 | JS::Rooted<JSObject*> recordObj(cx, &temp.toObject()); | |||
20583 | JS::RootedVector<jsid> ids(cx); | |||
20584 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20585 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20586 | return false; | |||
20587 | } | |||
20588 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20589 | JS_ReportOutOfMemory(cx); | |||
20590 | return false; | |||
20591 | } | |||
20592 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20593 | JS::Rooted<JS::Value> temp(cx); | |||
20594 | JS::Rooted<jsid> curId(cx); | |||
20595 | JS::Rooted<JS::Value> idVal(cx); | |||
20596 | // Use a hashset to keep track of ids seen, to avoid | |||
20597 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20598 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20599 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20600 | // around. | |||
20601 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20602 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20603 | curId = ids[i]; | |||
20604 | ||||
20605 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20606 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20607 | &desc)) { | |||
20608 | return false; | |||
20609 | } | |||
20610 | ||||
20611 | if (desc.isNothing() || !desc->enumerable()) { | |||
20612 | continue; | |||
20613 | } | |||
20614 | ||||
20615 | idVal = js::IdToValue(curId); | |||
20616 | nsString propName; | |||
20617 | // This will just throw if idVal is a Symbol, like the spec says | |||
20618 | // to do. | |||
20619 | if (!ConvertJSValueToString(cx, idVal, "key of value in argument 1", propName)) { | |||
20620 | return false; | |||
20621 | } | |||
20622 | ||||
20623 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20624 | return false; | |||
20625 | } | |||
20626 | ||||
20627 | Record<nsString, JS::Value>::EntryType* entry; | |||
20628 | if (!idsSeen.EnsureInserted(propName)) { | |||
20629 | // Find the existing entry. | |||
20630 | auto idx = recordEntries.IndexOf(propName); | |||
20631 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20632); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20632; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20632 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20632); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20632; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20633 | // Now blow it away to make it look like it was just added | |||
20634 | // to the array, because it's not obvious that it's | |||
20635 | // safe to write to its already-initialized mValue via our | |||
20636 | // normal codegen conversions. For example, the value | |||
20637 | // could be a union and this would change its type, but | |||
20638 | // codegen assumes we won't do that. | |||
20639 | entry = recordEntries.ReconstructElementAt(idx); | |||
20640 | } else { | |||
20641 | // Safe to do an infallible append here, because we did a | |||
20642 | // SetCapacity above to the right capacity. | |||
20643 | entry = recordEntries.AppendElement(); | |||
20644 | } | |||
20645 | entry->mKey = propName; | |||
20646 | JS::Value& slot = entry->mValue; | |||
20647 | slot = temp; | |||
20648 | } | |||
20649 | } else if (temp.isNullOrUndefined()) { | |||
20650 | slot.SetNull(); | |||
20651 | } else { | |||
20652 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
20653 | return false; | |||
20654 | } | |||
20655 | } | |||
20656 | } else if (args[0].isNullOrUndefined()) { | |||
20657 | arg0.Value().SetNull(); | |||
20658 | } else { | |||
20659 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
20660 | return false; | |||
20661 | } | |||
20662 | } | |||
20663 | // NOTE: This assert does NOT call the function. | |||
20664 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableRecordOfNullableRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
20665 | MOZ_KnownLive(self)(self)->PassOptionalNullableRecordOfNullableRecordOfAny(cx, Constify(arg0)); | |||
20666 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 20666); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 20666; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
20667 | args.rval().setUndefined(); | |||
20668 | return true; | |||
20669 | } | |||
20670 | ||||
20671 | static const JSJitInfo passOptionalNullableRecordOfNullableRecordOfAny_methodinfo = { | |||
20672 | { (JSJitGetterOp)passOptionalNullableRecordOfNullableRecordOfAny }, | |||
20673 | { prototypes::id::TestExampleInterface }, | |||
20674 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
20675 | JSJitInfo::Method, | |||
20676 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
20677 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
20678 | false, /* isInfallible. False in setters. */ | |||
20679 | false, /* isMovable. Not relevant for setters. */ | |||
20680 | false, /* isEliminatable. Not relevant for setters. */ | |||
20681 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
20682 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
20683 | false, /* isTypedMethod. Only relevant for methods. */ | |||
20684 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
20685 | }; | |||
20686 | ||||
20687 | MOZ_CAN_RUN_SCRIPT static bool | |||
20688 | passOptionalNullableRecordOfNullableSequenceOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
20689 | { | |||
20690 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableRecordOfNullableSequenceOfAny"); | |||
20691 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject20694( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20692 | "TestExampleInterface", "passOptionalNullableRecordOfNullableSequenceOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject20694( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20693 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject20694( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20694 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject20694( cx, "TestExampleInterface" , "passOptionalNullableRecordOfNullableSequenceOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
20695 | ||||
20696 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
20697 | Optional<Nullable<Record<nsString, Nullable<Sequence<JS::Value>>>>> arg0; | |||
20698 | Maybe<RecordRooter<nsString, Nullable<Sequence<JS::Value>>>> arg0_holder; | |||
20699 | if (args.hasDefined(0)) { | |||
20700 | arg0.Construct(); | |||
20701 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
20702 | if (args[0].isObject()) { | |||
20703 | auto& recordEntries = arg0.Value().SetValue().Entries(); | |||
20704 | ||||
20705 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
20706 | JS::RootedVector<jsid> ids(cx); | |||
20707 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20708 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20709 | return false; | |||
20710 | } | |||
20711 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20712 | JS_ReportOutOfMemory(cx); | |||
20713 | return false; | |||
20714 | } | |||
20715 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20716 | JS::Rooted<JS::Value> temp(cx); | |||
20717 | JS::Rooted<jsid> curId(cx); | |||
20718 | JS::Rooted<JS::Value> idVal(cx); | |||
20719 | // Use a hashset to keep track of ids seen, to avoid | |||
20720 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20721 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20722 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20723 | // around. | |||
20724 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20725 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20726 | curId = ids[i]; | |||
20727 | ||||
20728 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20729 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20730 | &desc)) { | |||
20731 | return false; | |||
20732 | } | |||
20733 | ||||
20734 | if (desc.isNothing() || !desc->enumerable()) { | |||
20735 | continue; | |||
20736 | } | |||
20737 | ||||
20738 | idVal = js::IdToValue(curId); | |||
20739 | nsString propName; | |||
20740 | // This will just throw if idVal is a Symbol, like the spec says | |||
20741 | // to do. | |||
20742 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
20743 | return false; | |||
20744 | } | |||
20745 | ||||
20746 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20747 | return false; | |||
20748 | } | |||
20749 | ||||
20750 | Record<nsString, Nullable<Sequence<JS::Value>>>::EntryType* entry; | |||
20751 | if (!idsSeen.EnsureInserted(propName)) { | |||
20752 | // Find the existing entry. | |||
20753 | auto idx = recordEntries.IndexOf(propName); | |||
20754 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20755); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20755; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20755 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20755); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20755; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20756 | // Now blow it away to make it look like it was just added | |||
20757 | // to the array, because it's not obvious that it's | |||
20758 | // safe to write to its already-initialized mValue via our | |||
20759 | // normal codegen conversions. For example, the value | |||
20760 | // could be a union and this would change its type, but | |||
20761 | // codegen assumes we won't do that. | |||
20762 | entry = recordEntries.ReconstructElementAt(idx); | |||
20763 | } else { | |||
20764 | // Safe to do an infallible append here, because we did a | |||
20765 | // SetCapacity above to the right capacity. | |||
20766 | entry = recordEntries.AppendElement(); | |||
20767 | } | |||
20768 | entry->mKey = propName; | |||
20769 | Nullable<Sequence<JS::Value>>& slot = entry->mValue; | |||
20770 | if (temp.isObject()) { | |||
20771 | JS::ForOfIterator iter1(cx); | |||
20772 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
20773 | return false; | |||
20774 | } | |||
20775 | if (!iter1.valueIsIterable()) { | |||
20776 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value in argument 1", "sequence"); | |||
20777 | return false; | |||
20778 | } | |||
20779 | Sequence<JS::Value> &arr1 = slot.SetValue(); | |||
20780 | JS::Rooted<JS::Value> temp1(cx); | |||
20781 | while (true) { | |||
20782 | bool done1; | |||
20783 | if (!iter1.next(&temp1, &done1)) { | |||
20784 | return false; | |||
20785 | } | |||
20786 | if (done1) { | |||
20787 | break; | |||
20788 | } | |||
20789 | JS::Value* slotPtr1 = arr1.AppendElement(mozilla::fallible); | |||
20790 | if (!slotPtr1) { | |||
20791 | JS_ReportOutOfMemory(cx); | |||
20792 | return false; | |||
20793 | } | |||
20794 | JS::Value& slot1 = *slotPtr1; | |||
20795 | slot1 = temp1; | |||
20796 | } | |||
20797 | } else if (temp.isNullOrUndefined()) { | |||
20798 | slot.SetNull(); | |||
20799 | } else { | |||
20800 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value in argument 1", "sequence"); | |||
20801 | return false; | |||
20802 | } | |||
20803 | } | |||
20804 | } else if (args[0].isNullOrUndefined()) { | |||
20805 | arg0.Value().SetNull(); | |||
20806 | } else { | |||
20807 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
20808 | return false; | |||
20809 | } | |||
20810 | } | |||
20811 | // NOTE: This assert does NOT call the function. | |||
20812 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableRecordOfNullableSequenceOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
20813 | MOZ_KnownLive(self)(self)->PassOptionalNullableRecordOfNullableSequenceOfAny(cx, Constify(arg0)); | |||
20814 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 20814); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 20814; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
20815 | args.rval().setUndefined(); | |||
20816 | return true; | |||
20817 | } | |||
20818 | ||||
20819 | static const JSJitInfo passOptionalNullableRecordOfNullableSequenceOfAny_methodinfo = { | |||
20820 | { (JSJitGetterOp)passOptionalNullableRecordOfNullableSequenceOfAny }, | |||
20821 | { prototypes::id::TestExampleInterface }, | |||
20822 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
20823 | JSJitInfo::Method, | |||
20824 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
20825 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
20826 | false, /* isInfallible. False in setters. */ | |||
20827 | false, /* isMovable. Not relevant for setters. */ | |||
20828 | false, /* isEliminatable. Not relevant for setters. */ | |||
20829 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
20830 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
20831 | false, /* isTypedMethod. Only relevant for methods. */ | |||
20832 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
20833 | }; | |||
20834 | ||||
20835 | MOZ_CAN_RUN_SCRIPT static bool | |||
20836 | passOptionalNullableSequenceOfNullableRecordOfAny(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
20837 | { | |||
20838 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequenceOfNullableRecordOfAny"); | |||
20839 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject20842( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20840 | "TestExampleInterface", "passOptionalNullableSequenceOfNullableRecordOfAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject20842( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20841 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject20842( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
20842 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject20842( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableRecordOfAny", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
20843 | ||||
20844 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
20845 | Optional<Nullable<Sequence<Nullable<Record<nsString, JS::Value>>>>> arg0; | |||
20846 | Maybe<SequenceRooter<Nullable<Record<nsString, JS::Value>>>> arg0_holder; | |||
20847 | if (args.hasDefined(0)) { | |||
20848 | arg0.Construct(); | |||
20849 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
20850 | if (args[0].isObject()) { | |||
20851 | JS::ForOfIterator iter(cx); | |||
20852 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
20853 | return false; | |||
20854 | } | |||
20855 | if (!iter.valueIsIterable()) { | |||
20856 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
20857 | return false; | |||
20858 | } | |||
20859 | Sequence<Nullable<Record<nsString, JS::Value>>> &arr = arg0.Value().SetValue(); | |||
20860 | JS::Rooted<JS::Value> temp(cx); | |||
20861 | while (true) { | |||
20862 | bool done; | |||
20863 | if (!iter.next(&temp, &done)) { | |||
20864 | return false; | |||
20865 | } | |||
20866 | if (done) { | |||
20867 | break; | |||
20868 | } | |||
20869 | Nullable<Record<nsString, JS::Value>>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
20870 | if (!slotPtr) { | |||
20871 | JS_ReportOutOfMemory(cx); | |||
20872 | return false; | |||
20873 | } | |||
20874 | Nullable<Record<nsString, JS::Value>>& slot = *slotPtr; | |||
20875 | if (temp.isObject()) { | |||
20876 | auto& recordEntries = slot.SetValue().Entries(); | |||
20877 | ||||
20878 | JS::Rooted<JSObject*> recordObj(cx, &temp.toObject()); | |||
20879 | JS::RootedVector<jsid> ids(cx); | |||
20880 | if (!js::GetPropertyKeys(cx, recordObj, | |||
20881 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
20882 | return false; | |||
20883 | } | |||
20884 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
20885 | JS_ReportOutOfMemory(cx); | |||
20886 | return false; | |||
20887 | } | |||
20888 | JS::Rooted<JS::Value> propNameValue(cx); | |||
20889 | JS::Rooted<JS::Value> temp(cx); | |||
20890 | JS::Rooted<jsid> curId(cx); | |||
20891 | JS::Rooted<JS::Value> idVal(cx); | |||
20892 | // Use a hashset to keep track of ids seen, to avoid | |||
20893 | // introducing nasty O(N^2) behavior scanning for them all the | |||
20894 | // time. Ideally we'd use a data structure with O(1) lookup | |||
20895 | // _and_ ordering for the MozMap, but we don't have one lying | |||
20896 | // around. | |||
20897 | nsTHashtable<nsStringHashKey> idsSeen; | |||
20898 | for (size_t i = 0; i < ids.length(); ++i) { | |||
20899 | curId = ids[i]; | |||
20900 | ||||
20901 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
20902 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
20903 | &desc)) { | |||
20904 | return false; | |||
20905 | } | |||
20906 | ||||
20907 | if (desc.isNothing() || !desc->enumerable()) { | |||
20908 | continue; | |||
20909 | } | |||
20910 | ||||
20911 | idVal = js::IdToValue(curId); | |||
20912 | nsString propName; | |||
20913 | // This will just throw if idVal is a Symbol, like the spec says | |||
20914 | // to do. | |||
20915 | if (!ConvertJSValueToString(cx, idVal, "key of element of argument 1", propName)) { | |||
20916 | return false; | |||
20917 | } | |||
20918 | ||||
20919 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
20920 | return false; | |||
20921 | } | |||
20922 | ||||
20923 | Record<nsString, JS::Value>::EntryType* entry; | |||
20924 | if (!idsSeen.EnsureInserted(propName)) { | |||
20925 | // Find the existing entry. | |||
20926 | auto idx = recordEntries.IndexOf(propName); | |||
20927 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20928); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20928; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
20928 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 20928); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 20928; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
20929 | // Now blow it away to make it look like it was just added | |||
20930 | // to the array, because it's not obvious that it's | |||
20931 | // safe to write to its already-initialized mValue via our | |||
20932 | // normal codegen conversions. For example, the value | |||
20933 | // could be a union and this would change its type, but | |||
20934 | // codegen assumes we won't do that. | |||
20935 | entry = recordEntries.ReconstructElementAt(idx); | |||
20936 | } else { | |||
20937 | // Safe to do an infallible append here, because we did a | |||
20938 | // SetCapacity above to the right capacity. | |||
20939 | entry = recordEntries.AppendElement(); | |||
20940 | } | |||
20941 | entry->mKey = propName; | |||
20942 | JS::Value& slot = entry->mValue; | |||
20943 | slot = temp; | |||
20944 | } | |||
20945 | } else if (temp.isNullOrUndefined()) { | |||
20946 | slot.SetNull(); | |||
20947 | } else { | |||
20948 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
20949 | return false; | |||
20950 | } | |||
20951 | } | |||
20952 | } else if (args[0].isNullOrUndefined()) { | |||
20953 | arg0.Value().SetNull(); | |||
20954 | } else { | |||
20955 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
20956 | return false; | |||
20957 | } | |||
20958 | } | |||
20959 | // NOTE: This assert does NOT call the function. | |||
20960 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableRecordOfAny(cx, Constify(arg0)))>, "Should be returning void here"); | |||
20961 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableRecordOfAny(cx, Constify(arg0)); | |||
20962 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 20962); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 20962; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
20963 | args.rval().setUndefined(); | |||
20964 | return true; | |||
20965 | } | |||
20966 | ||||
20967 | static const JSJitInfo passOptionalNullableSequenceOfNullableRecordOfAny_methodinfo = { | |||
20968 | { (JSJitGetterOp)passOptionalNullableSequenceOfNullableRecordOfAny }, | |||
20969 | { prototypes::id::TestExampleInterface }, | |||
20970 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
20971 | JSJitInfo::Method, | |||
20972 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
20973 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
20974 | false, /* isInfallible. False in setters. */ | |||
20975 | false, /* isMovable. Not relevant for setters. */ | |||
20976 | false, /* isEliminatable. Not relevant for setters. */ | |||
20977 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
20978 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
20979 | false, /* isTypedMethod. Only relevant for methods. */ | |||
20980 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
20981 | }; | |||
20982 | ||||
20983 | MOZ_CAN_RUN_SCRIPT static bool | |||
20984 | receiveAny(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
20985 | { | |||
20986 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject20989( cx, "TestExampleInterface" , "receiveAny", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
20987 | "TestExampleInterface", "receiveAny", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject20989( cx, "TestExampleInterface" , "receiveAny", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
20988 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject20989( cx, "TestExampleInterface" , "receiveAny", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
20989 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject20989( cx, "TestExampleInterface" , "receiveAny", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
20990 | ||||
20991 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
20992 | JS::Rooted<JS::Value> result(cx); | |||
20993 | // NOTE: This assert does NOT call the function. | |||
20994 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveAny(cx, &result))>, "Should be returning void here"); | |||
20995 | MOZ_KnownLive(self)(self)->ReceiveAny(cx, &result); | |||
20996 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 20996); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 20996; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
20997 | JS::ExposeValueToActiveJS(result); | |||
20998 | args.rval().set(result); | |||
20999 | if (!MaybeWrapValue(cx, args.rval())) { | |||
21000 | return false; | |||
21001 | } | |||
21002 | return true; | |||
21003 | } | |||
21004 | ||||
21005 | static const JSJitInfo receiveAny_methodinfo = { | |||
21006 | { (JSJitGetterOp)receiveAny }, | |||
21007 | { prototypes::id::TestExampleInterface }, | |||
21008 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21009 | JSJitInfo::Method, | |||
21010 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21011 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
21012 | false, /* isInfallible. False in setters. */ | |||
21013 | false, /* isMovable. Not relevant for setters. */ | |||
21014 | false, /* isEliminatable. Not relevant for setters. */ | |||
21015 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21016 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21017 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21018 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21019 | }; | |||
21020 | ||||
21021 | MOZ_CAN_RUN_SCRIPT static bool | |||
21022 | passObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21023 | { | |||
21024 | BindingCallContext cx(cx_, "TestExampleInterface.passObject"); | |||
21025 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21028( cx, "TestExampleInterface" , "passObject", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21026 | "TestExampleInterface", "passObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21028( cx, "TestExampleInterface" , "passObject", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21027 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21028( cx, "TestExampleInterface" , "passObject", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21028 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21028( cx, "TestExampleInterface" , "passObject", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
21029 | ||||
21030 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21031 | if (!args.requireAtLeast(cx, "TestExampleInterface.passObject", 1)) { | |||
21032 | return false; | |||
21033 | } | |||
21034 | JS::Rooted<JSObject*> arg0(cx); | |||
21035 | if (args[0].isObject()) { | |||
21036 | arg0 = &args[0].toObject(); | |||
21037 | } else { | |||
21038 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
21039 | return false; | |||
21040 | } | |||
21041 | // NOTE: This assert does NOT call the function. | |||
21042 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassObject(cx, arg0))>, "Should be returning void here"); | |||
21043 | MOZ_KnownLive(self)(self)->PassObject(cx, arg0); | |||
21044 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21044); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21044; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21045 | args.rval().setUndefined(); | |||
21046 | return true; | |||
21047 | } | |||
21048 | ||||
21049 | static const JSJitInfo passObject_methodinfo = { | |||
21050 | { (JSJitGetterOp)passObject }, | |||
21051 | { prototypes::id::TestExampleInterface }, | |||
21052 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21053 | JSJitInfo::Method, | |||
21054 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21055 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21056 | false, /* isInfallible. False in setters. */ | |||
21057 | false, /* isMovable. Not relevant for setters. */ | |||
21058 | false, /* isEliminatable. Not relevant for setters. */ | |||
21059 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21060 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21061 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21062 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21063 | }; | |||
21064 | ||||
21065 | MOZ_CAN_RUN_SCRIPT static bool | |||
21066 | passVariadicObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21067 | { | |||
21068 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicObject"); | |||
21069 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21072( cx, "TestExampleInterface" , "passVariadicObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21070 | "TestExampleInterface", "passVariadicObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21072( cx, "TestExampleInterface" , "passVariadicObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21071 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21072( cx, "TestExampleInterface" , "passVariadicObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21072 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21072( cx, "TestExampleInterface" , "passVariadicObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
21073 | ||||
21074 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21075 | AutoSequence<JSObject*> arg0; | |||
21076 | SequenceRooter<JSObject*> arg0_holder(cx, &arg0); | |||
21077 | if (args.length() > 0) { | |||
21078 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
21079 | JS_ReportOutOfMemory(cx); | |||
21080 | return false; | |||
21081 | } | |||
21082 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
21083 | // OK to do infallible append here, since we ensured capacity already. | |||
21084 | JSObject*& slot = *arg0.AppendElement(nullptr); | |||
21085 | if (args[variadicArg].isObject()) { | |||
21086 | slot = &args[variadicArg].toObject(); | |||
21087 | } else { | |||
21088 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
21089 | return false; | |||
21090 | } | |||
21091 | } | |||
21092 | } | |||
21093 | // NOTE: This assert does NOT call the function. | |||
21094 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21095 | MOZ_KnownLive(self)(self)->PassVariadicObject(cx, Constify(arg0)); | |||
21096 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21096); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21096; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21097 | args.rval().setUndefined(); | |||
21098 | return true; | |||
21099 | } | |||
21100 | ||||
21101 | static const JSJitInfo passVariadicObject_methodinfo = { | |||
21102 | { (JSJitGetterOp)passVariadicObject }, | |||
21103 | { prototypes::id::TestExampleInterface }, | |||
21104 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21105 | JSJitInfo::Method, | |||
21106 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21107 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21108 | false, /* isInfallible. False in setters. */ | |||
21109 | false, /* isMovable. Not relevant for setters. */ | |||
21110 | false, /* isEliminatable. Not relevant for setters. */ | |||
21111 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21112 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21113 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21114 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21115 | }; | |||
21116 | ||||
21117 | MOZ_CAN_RUN_SCRIPT static bool | |||
21118 | passNullableObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21119 | { | |||
21120 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableObject"); | |||
21121 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21124( cx, "TestExampleInterface" , "passNullableObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21122 | "TestExampleInterface", "passNullableObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21124( cx, "TestExampleInterface" , "passNullableObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21123 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21124( cx, "TestExampleInterface" , "passNullableObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21124 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21124( cx, "TestExampleInterface" , "passNullableObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
21125 | ||||
21126 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21127 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableObject", 1)) { | |||
21128 | return false; | |||
21129 | } | |||
21130 | JS::Rooted<JSObject*> arg0(cx); | |||
21131 | if (args[0].isObject()) { | |||
21132 | arg0 = &args[0].toObject(); | |||
21133 | } else if (args[0].isNullOrUndefined()) { | |||
21134 | arg0 = nullptr; | |||
21135 | } else { | |||
21136 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
21137 | return false; | |||
21138 | } | |||
21139 | // NOTE: This assert does NOT call the function. | |||
21140 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableObject(cx, arg0))>, "Should be returning void here"); | |||
21141 | MOZ_KnownLive(self)(self)->PassNullableObject(cx, arg0); | |||
21142 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21142); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21142; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21143 | args.rval().setUndefined(); | |||
21144 | return true; | |||
21145 | } | |||
21146 | ||||
21147 | static const JSJitInfo passNullableObject_methodinfo = { | |||
21148 | { (JSJitGetterOp)passNullableObject }, | |||
21149 | { prototypes::id::TestExampleInterface }, | |||
21150 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21151 | JSJitInfo::Method, | |||
21152 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21153 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21154 | false, /* isInfallible. False in setters. */ | |||
21155 | false, /* isMovable. Not relevant for setters. */ | |||
21156 | false, /* isEliminatable. Not relevant for setters. */ | |||
21157 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21158 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21159 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21160 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21161 | }; | |||
21162 | ||||
21163 | MOZ_CAN_RUN_SCRIPT static bool | |||
21164 | passVariadicNullableObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21165 | { | |||
21166 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicNullableObject"); | |||
21167 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21170( cx, "TestExampleInterface" , "passVariadicNullableObject", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21168 | "TestExampleInterface", "passVariadicNullableObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21170( cx, "TestExampleInterface" , "passVariadicNullableObject", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21169 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21170( cx, "TestExampleInterface" , "passVariadicNullableObject", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21170 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21170( cx, "TestExampleInterface" , "passVariadicNullableObject", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
21171 | ||||
21172 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21173 | AutoSequence<JSObject*> arg0; | |||
21174 | SequenceRooter<JSObject*> arg0_holder(cx, &arg0); | |||
21175 | if (args.length() > 0) { | |||
21176 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
21177 | JS_ReportOutOfMemory(cx); | |||
21178 | return false; | |||
21179 | } | |||
21180 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
21181 | // OK to do infallible append here, since we ensured capacity already. | |||
21182 | JSObject*& slot = *arg0.AppendElement(nullptr); | |||
21183 | if (args[variadicArg].isObject()) { | |||
21184 | slot = &args[variadicArg].toObject(); | |||
21185 | } else { | |||
21186 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
21187 | return false; | |||
21188 | } | |||
21189 | } | |||
21190 | } | |||
21191 | // NOTE: This assert does NOT call the function. | |||
21192 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicNullableObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21193 | MOZ_KnownLive(self)(self)->PassVariadicNullableObject(cx, Constify(arg0)); | |||
21194 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21194); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21194; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21195 | args.rval().setUndefined(); | |||
21196 | return true; | |||
21197 | } | |||
21198 | ||||
21199 | static const JSJitInfo passVariadicNullableObject_methodinfo = { | |||
21200 | { (JSJitGetterOp)passVariadicNullableObject }, | |||
21201 | { prototypes::id::TestExampleInterface }, | |||
21202 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21203 | JSJitInfo::Method, | |||
21204 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21205 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21206 | false, /* isInfallible. False in setters. */ | |||
21207 | false, /* isMovable. Not relevant for setters. */ | |||
21208 | false, /* isEliminatable. Not relevant for setters. */ | |||
21209 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21210 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21211 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21212 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21213 | }; | |||
21214 | ||||
21215 | MOZ_CAN_RUN_SCRIPT static bool | |||
21216 | passOptionalObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21217 | { | |||
21218 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalObject"); | |||
21219 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21222( cx, "TestExampleInterface" , "passOptionalObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21220 | "TestExampleInterface", "passOptionalObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21222( cx, "TestExampleInterface" , "passOptionalObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21221 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21222( cx, "TestExampleInterface" , "passOptionalObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21222 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21222( cx, "TestExampleInterface" , "passOptionalObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
21223 | ||||
21224 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21225 | Optional<JS::Handle<JSObject*>> arg0; | |||
21226 | if (args.hasDefined(0)) { | |||
21227 | arg0.Construct(cx); | |||
21228 | if (args[0].isObject()) { | |||
21229 | arg0.Value() = &args[0].toObject(); | |||
21230 | } else { | |||
21231 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
21232 | return false; | |||
21233 | } | |||
21234 | } | |||
21235 | // NOTE: This assert does NOT call the function. | |||
21236 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21237 | MOZ_KnownLive(self)(self)->PassOptionalObject(cx, Constify(arg0)); | |||
21238 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21238); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21238; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21239 | args.rval().setUndefined(); | |||
21240 | return true; | |||
21241 | } | |||
21242 | ||||
21243 | static const JSJitInfo passOptionalObject_methodinfo = { | |||
21244 | { (JSJitGetterOp)passOptionalObject }, | |||
21245 | { prototypes::id::TestExampleInterface }, | |||
21246 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21247 | JSJitInfo::Method, | |||
21248 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21249 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21250 | false, /* isInfallible. False in setters. */ | |||
21251 | false, /* isMovable. Not relevant for setters. */ | |||
21252 | false, /* isEliminatable. Not relevant for setters. */ | |||
21253 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21254 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21255 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21256 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21257 | }; | |||
21258 | ||||
21259 | MOZ_CAN_RUN_SCRIPT static bool | |||
21260 | passOptionalNullableObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21261 | { | |||
21262 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableObject"); | |||
21263 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21266( cx, "TestExampleInterface" , "passOptionalNullableObject", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21264 | "TestExampleInterface", "passOptionalNullableObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21266( cx, "TestExampleInterface" , "passOptionalNullableObject", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21265 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21266( cx, "TestExampleInterface" , "passOptionalNullableObject", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21266 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21266( cx, "TestExampleInterface" , "passOptionalNullableObject", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
21267 | ||||
21268 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21269 | Optional<JS::Handle<JSObject*>> arg0; | |||
21270 | if (args.hasDefined(0)) { | |||
21271 | arg0.Construct(cx); | |||
21272 | if (args[0].isObject()) { | |||
21273 | arg0.Value() = &args[0].toObject(); | |||
21274 | } else if (args[0].isNullOrUndefined()) { | |||
21275 | arg0.Value() = nullptr; | |||
21276 | } else { | |||
21277 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
21278 | return false; | |||
21279 | } | |||
21280 | } | |||
21281 | // NOTE: This assert does NOT call the function. | |||
21282 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21283 | MOZ_KnownLive(self)(self)->PassOptionalNullableObject(cx, Constify(arg0)); | |||
21284 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21284); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21284; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21285 | args.rval().setUndefined(); | |||
21286 | return true; | |||
21287 | } | |||
21288 | ||||
21289 | static const JSJitInfo passOptionalNullableObject_methodinfo = { | |||
21290 | { (JSJitGetterOp)passOptionalNullableObject }, | |||
21291 | { prototypes::id::TestExampleInterface }, | |||
21292 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21293 | JSJitInfo::Method, | |||
21294 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21295 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21296 | false, /* isInfallible. False in setters. */ | |||
21297 | false, /* isMovable. Not relevant for setters. */ | |||
21298 | false, /* isEliminatable. Not relevant for setters. */ | |||
21299 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21300 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21301 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21302 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21303 | }; | |||
21304 | ||||
21305 | MOZ_CAN_RUN_SCRIPT static bool | |||
21306 | passOptionalNullableObjectWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21307 | { | |||
21308 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableObjectWithDefaultValue"); | |||
21309 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21312( cx, "TestExampleInterface" , "passOptionalNullableObjectWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21310 | "TestExampleInterface", "passOptionalNullableObjectWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21312( cx, "TestExampleInterface" , "passOptionalNullableObjectWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21311 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21312( cx, "TestExampleInterface" , "passOptionalNullableObjectWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21312 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21312( cx, "TestExampleInterface" , "passOptionalNullableObjectWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
21313 | ||||
21314 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21315 | JS::Rooted<JSObject*> arg0(cx); | |||
21316 | if (args.hasDefined(0)) { | |||
21317 | if (args[0].isObject()) { | |||
21318 | arg0 = &args[0].toObject(); | |||
21319 | } else if (args[0].isNullOrUndefined()) { | |||
21320 | arg0 = nullptr; | |||
21321 | } else { | |||
21322 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
21323 | return false; | |||
21324 | } | |||
21325 | } else { | |||
21326 | arg0 = nullptr; | |||
21327 | } | |||
21328 | // NOTE: This assert does NOT call the function. | |||
21329 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableObjectWithDefaultValue(cx, arg0))>, "Should be returning void here"); | |||
21330 | MOZ_KnownLive(self)(self)->PassOptionalNullableObjectWithDefaultValue(cx, arg0); | |||
21331 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21331); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21331; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21332 | args.rval().setUndefined(); | |||
21333 | return true; | |||
21334 | } | |||
21335 | ||||
21336 | static const JSJitInfo passOptionalNullableObjectWithDefaultValue_methodinfo = { | |||
21337 | { (JSJitGetterOp)passOptionalNullableObjectWithDefaultValue }, | |||
21338 | { prototypes::id::TestExampleInterface }, | |||
21339 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21340 | JSJitInfo::Method, | |||
21341 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21342 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21343 | false, /* isInfallible. False in setters. */ | |||
21344 | false, /* isMovable. Not relevant for setters. */ | |||
21345 | false, /* isEliminatable. Not relevant for setters. */ | |||
21346 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21347 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21348 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21349 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21350 | }; | |||
21351 | ||||
21352 | MOZ_CAN_RUN_SCRIPT static bool | |||
21353 | passSequenceOfObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21354 | { | |||
21355 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfObject"); | |||
21356 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21359( cx, "TestExampleInterface" , "passSequenceOfObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21357 | "TestExampleInterface", "passSequenceOfObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21359( cx, "TestExampleInterface" , "passSequenceOfObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21358 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21359( cx, "TestExampleInterface" , "passSequenceOfObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21359 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21359( cx, "TestExampleInterface" , "passSequenceOfObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
21360 | ||||
21361 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21362 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfObject", 1)) { | |||
21363 | return false; | |||
21364 | } | |||
21365 | binding_detail::AutoSequence<JSObject*> arg0; | |||
21366 | SequenceRooter<JSObject*> arg0_holder(cx, &arg0); | |||
21367 | if (args[0].isObject()) { | |||
21368 | JS::ForOfIterator iter(cx); | |||
21369 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
21370 | return false; | |||
21371 | } | |||
21372 | if (!iter.valueIsIterable()) { | |||
21373 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21374 | return false; | |||
21375 | } | |||
21376 | binding_detail::AutoSequence<JSObject*> &arr = arg0; | |||
21377 | JS::Rooted<JS::Value> temp(cx); | |||
21378 | while (true) { | |||
21379 | bool done; | |||
21380 | if (!iter.next(&temp, &done)) { | |||
21381 | return false; | |||
21382 | } | |||
21383 | if (done) { | |||
21384 | break; | |||
21385 | } | |||
21386 | JSObject** slotPtr = arr.AppendElement(nullptr, mozilla::fallible); | |||
21387 | if (!slotPtr) { | |||
21388 | JS_ReportOutOfMemory(cx); | |||
21389 | return false; | |||
21390 | } | |||
21391 | JSObject*& slot = *slotPtr; | |||
21392 | if (temp.isObject()) { | |||
21393 | slot = &temp.toObject(); | |||
21394 | } else { | |||
21395 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
21396 | return false; | |||
21397 | } | |||
21398 | } | |||
21399 | } else { | |||
21400 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21401 | return false; | |||
21402 | } | |||
21403 | // NOTE: This assert does NOT call the function. | |||
21404 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21405 | MOZ_KnownLive(self)(self)->PassSequenceOfObject(cx, Constify(arg0)); | |||
21406 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21406); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21406; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21407 | args.rval().setUndefined(); | |||
21408 | return true; | |||
21409 | } | |||
21410 | ||||
21411 | static const JSJitInfo passSequenceOfObject_methodinfo = { | |||
21412 | { (JSJitGetterOp)passSequenceOfObject }, | |||
21413 | { prototypes::id::TestExampleInterface }, | |||
21414 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21415 | JSJitInfo::Method, | |||
21416 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21417 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21418 | false, /* isInfallible. False in setters. */ | |||
21419 | false, /* isMovable. Not relevant for setters. */ | |||
21420 | false, /* isEliminatable. Not relevant for setters. */ | |||
21421 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21422 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21423 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21424 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21425 | }; | |||
21426 | ||||
21427 | MOZ_CAN_RUN_SCRIPT static bool | |||
21428 | passSequenceOfNullableObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21429 | { | |||
21430 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfNullableObject"); | |||
21431 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21434( cx, "TestExampleInterface" , "passSequenceOfNullableObject", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21432 | "TestExampleInterface", "passSequenceOfNullableObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21434( cx, "TestExampleInterface" , "passSequenceOfNullableObject", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21433 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21434( cx, "TestExampleInterface" , "passSequenceOfNullableObject", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21434 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21434( cx, "TestExampleInterface" , "passSequenceOfNullableObject", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
21435 | ||||
21436 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21437 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfNullableObject", 1)) { | |||
21438 | return false; | |||
21439 | } | |||
21440 | binding_detail::AutoSequence<JSObject*> arg0; | |||
21441 | SequenceRooter<JSObject*> arg0_holder(cx, &arg0); | |||
21442 | if (args[0].isObject()) { | |||
21443 | JS::ForOfIterator iter(cx); | |||
21444 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
21445 | return false; | |||
21446 | } | |||
21447 | if (!iter.valueIsIterable()) { | |||
21448 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21449 | return false; | |||
21450 | } | |||
21451 | binding_detail::AutoSequence<JSObject*> &arr = arg0; | |||
21452 | JS::Rooted<JS::Value> temp(cx); | |||
21453 | while (true) { | |||
21454 | bool done; | |||
21455 | if (!iter.next(&temp, &done)) { | |||
21456 | return false; | |||
21457 | } | |||
21458 | if (done) { | |||
21459 | break; | |||
21460 | } | |||
21461 | JSObject** slotPtr = arr.AppendElement(nullptr, mozilla::fallible); | |||
21462 | if (!slotPtr) { | |||
21463 | JS_ReportOutOfMemory(cx); | |||
21464 | return false; | |||
21465 | } | |||
21466 | JSObject*& slot = *slotPtr; | |||
21467 | if (temp.isObject()) { | |||
21468 | slot = &temp.toObject(); | |||
21469 | } else if (temp.isNullOrUndefined()) { | |||
21470 | slot = nullptr; | |||
21471 | } else { | |||
21472 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
21473 | return false; | |||
21474 | } | |||
21475 | } | |||
21476 | } else { | |||
21477 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21478 | return false; | |||
21479 | } | |||
21480 | // NOTE: This assert does NOT call the function. | |||
21481 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfNullableObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21482 | MOZ_KnownLive(self)(self)->PassSequenceOfNullableObject(cx, Constify(arg0)); | |||
21483 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21483); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21483; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21484 | args.rval().setUndefined(); | |||
21485 | return true; | |||
21486 | } | |||
21487 | ||||
21488 | static const JSJitInfo passSequenceOfNullableObject_methodinfo = { | |||
21489 | { (JSJitGetterOp)passSequenceOfNullableObject }, | |||
21490 | { prototypes::id::TestExampleInterface }, | |||
21491 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21492 | JSJitInfo::Method, | |||
21493 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21494 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21495 | false, /* isInfallible. False in setters. */ | |||
21496 | false, /* isMovable. Not relevant for setters. */ | |||
21497 | false, /* isEliminatable. Not relevant for setters. */ | |||
21498 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21499 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21500 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21501 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21502 | }; | |||
21503 | ||||
21504 | MOZ_CAN_RUN_SCRIPT static bool | |||
21505 | passNullableSequenceOfObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21506 | { | |||
21507 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableSequenceOfObject"); | |||
21508 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21511( cx, "TestExampleInterface" , "passNullableSequenceOfObject", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21509 | "TestExampleInterface", "passNullableSequenceOfObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21511( cx, "TestExampleInterface" , "passNullableSequenceOfObject", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21510 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21511( cx, "TestExampleInterface" , "passNullableSequenceOfObject", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
21511 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21511( cx, "TestExampleInterface" , "passNullableSequenceOfObject", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
21512 | ||||
21513 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21514 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableSequenceOfObject", 1)) { | |||
21515 | return false; | |||
21516 | } | |||
21517 | Nullable<Sequence<JSObject*>> arg0; | |||
21518 | SequenceRooter<JSObject*> arg0_holder(cx, &arg0.SetValue()); | |||
21519 | if (args[0].isObject()) { | |||
21520 | JS::ForOfIterator iter(cx); | |||
21521 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
21522 | return false; | |||
21523 | } | |||
21524 | if (!iter.valueIsIterable()) { | |||
21525 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21526 | return false; | |||
21527 | } | |||
21528 | Sequence<JSObject*> &arr = arg0.SetValue(); | |||
21529 | JS::Rooted<JS::Value> temp(cx); | |||
21530 | while (true) { | |||
21531 | bool done; | |||
21532 | if (!iter.next(&temp, &done)) { | |||
21533 | return false; | |||
21534 | } | |||
21535 | if (done) { | |||
21536 | break; | |||
21537 | } | |||
21538 | JSObject** slotPtr = arr.AppendElement(nullptr, mozilla::fallible); | |||
21539 | if (!slotPtr) { | |||
21540 | JS_ReportOutOfMemory(cx); | |||
21541 | return false; | |||
21542 | } | |||
21543 | JSObject*& slot = *slotPtr; | |||
21544 | if (temp.isObject()) { | |||
21545 | slot = &temp.toObject(); | |||
21546 | } else { | |||
21547 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of argument 1"); | |||
21548 | return false; | |||
21549 | } | |||
21550 | } | |||
21551 | } else if (args[0].isNullOrUndefined()) { | |||
21552 | arg0.SetNull(); | |||
21553 | } else { | |||
21554 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21555 | return false; | |||
21556 | } | |||
21557 | // NOTE: This assert does NOT call the function. | |||
21558 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableSequenceOfObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21559 | MOZ_KnownLive(self)(self)->PassNullableSequenceOfObject(cx, Constify(arg0)); | |||
21560 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21560); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21560; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21561 | args.rval().setUndefined(); | |||
21562 | return true; | |||
21563 | } | |||
21564 | ||||
21565 | static const JSJitInfo passNullableSequenceOfObject_methodinfo = { | |||
21566 | { (JSJitGetterOp)passNullableSequenceOfObject }, | |||
21567 | { prototypes::id::TestExampleInterface }, | |||
21568 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21569 | JSJitInfo::Method, | |||
21570 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21571 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21572 | false, /* isInfallible. False in setters. */ | |||
21573 | false, /* isMovable. Not relevant for setters. */ | |||
21574 | false, /* isEliminatable. Not relevant for setters. */ | |||
21575 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21576 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21577 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21578 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21579 | }; | |||
21580 | ||||
21581 | MOZ_CAN_RUN_SCRIPT static bool | |||
21582 | passOptionalNullableSequenceOfNullableSequenceOfObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21583 | { | |||
21584 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequenceOfNullableSequenceOfObject"); | |||
21585 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21588( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfObject", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
21586 | "TestExampleInterface", "passOptionalNullableSequenceOfNullableSequenceOfObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21588( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfObject", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
21587 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21588( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfObject", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
21588 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21588( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfObject", JS ::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
21589 | ||||
21590 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21591 | Optional<Nullable<Sequence<Nullable<Sequence<JSObject*>>>>> arg0; | |||
21592 | Maybe<SequenceRooter<Nullable<Sequence<JSObject*>>>> arg0_holder; | |||
21593 | if (args.hasDefined(0)) { | |||
21594 | arg0.Construct(); | |||
21595 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
21596 | if (args[0].isObject()) { | |||
21597 | JS::ForOfIterator iter(cx); | |||
21598 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
21599 | return false; | |||
21600 | } | |||
21601 | if (!iter.valueIsIterable()) { | |||
21602 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21603 | return false; | |||
21604 | } | |||
21605 | Sequence<Nullable<Sequence<JSObject*>>> &arr = arg0.Value().SetValue(); | |||
21606 | JS::Rooted<JS::Value> temp(cx); | |||
21607 | while (true) { | |||
21608 | bool done; | |||
21609 | if (!iter.next(&temp, &done)) { | |||
21610 | return false; | |||
21611 | } | |||
21612 | if (done) { | |||
21613 | break; | |||
21614 | } | |||
21615 | Nullable<Sequence<JSObject*>>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
21616 | if (!slotPtr) { | |||
21617 | JS_ReportOutOfMemory(cx); | |||
21618 | return false; | |||
21619 | } | |||
21620 | Nullable<Sequence<JSObject*>>& slot = *slotPtr; | |||
21621 | if (temp.isObject()) { | |||
21622 | JS::ForOfIterator iter1(cx); | |||
21623 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
21624 | return false; | |||
21625 | } | |||
21626 | if (!iter1.valueIsIterable()) { | |||
21627 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
21628 | return false; | |||
21629 | } | |||
21630 | Sequence<JSObject*> &arr1 = slot.SetValue(); | |||
21631 | JS::Rooted<JS::Value> temp1(cx); | |||
21632 | while (true) { | |||
21633 | bool done1; | |||
21634 | if (!iter1.next(&temp1, &done1)) { | |||
21635 | return false; | |||
21636 | } | |||
21637 | if (done1) { | |||
21638 | break; | |||
21639 | } | |||
21640 | JSObject** slotPtr1 = arr1.AppendElement(nullptr, mozilla::fallible); | |||
21641 | if (!slotPtr1) { | |||
21642 | JS_ReportOutOfMemory(cx); | |||
21643 | return false; | |||
21644 | } | |||
21645 | JSObject*& slot1 = *slotPtr1; | |||
21646 | if (temp1.isObject()) { | |||
21647 | slot1 = &temp1.toObject(); | |||
21648 | } else { | |||
21649 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of element of argument 1"); | |||
21650 | return false; | |||
21651 | } | |||
21652 | } | |||
21653 | } else if (temp.isNullOrUndefined()) { | |||
21654 | slot.SetNull(); | |||
21655 | } else { | |||
21656 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
21657 | return false; | |||
21658 | } | |||
21659 | } | |||
21660 | } else if (args[0].isNullOrUndefined()) { | |||
21661 | arg0.Value().SetNull(); | |||
21662 | } else { | |||
21663 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21664 | return false; | |||
21665 | } | |||
21666 | } | |||
21667 | // NOTE: This assert does NOT call the function. | |||
21668 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableSequenceOfObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21669 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableSequenceOfObject(cx, Constify(arg0)); | |||
21670 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21670); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21670; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21671 | args.rval().setUndefined(); | |||
21672 | return true; | |||
21673 | } | |||
21674 | ||||
21675 | static const JSJitInfo passOptionalNullableSequenceOfNullableSequenceOfObject_methodinfo = { | |||
21676 | { (JSJitGetterOp)passOptionalNullableSequenceOfNullableSequenceOfObject }, | |||
21677 | { prototypes::id::TestExampleInterface }, | |||
21678 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21679 | JSJitInfo::Method, | |||
21680 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21681 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21682 | false, /* isInfallible. False in setters. */ | |||
21683 | false, /* isMovable. Not relevant for setters. */ | |||
21684 | false, /* isEliminatable. Not relevant for setters. */ | |||
21685 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21686 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21687 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21688 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21689 | }; | |||
21690 | ||||
21691 | MOZ_CAN_RUN_SCRIPT static bool | |||
21692 | passOptionalNullableSequenceOfNullableSequenceOfNullableObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21693 | { | |||
21694 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableSequenceOfNullableSequenceOfNullableObject"); | |||
21695 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21698( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfNullableObject" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
21696 | "TestExampleInterface", "passOptionalNullableSequenceOfNullableSequenceOfNullableObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21698( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfNullableObject" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
21697 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21698( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfNullableObject" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
21698 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21698( cx, "TestExampleInterface" , "passOptionalNullableSequenceOfNullableSequenceOfNullableObject" , JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
21699 | ||||
21700 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21701 | Optional<Nullable<Sequence<Nullable<Sequence<JSObject*>>>>> arg0; | |||
21702 | Maybe<SequenceRooter<Nullable<Sequence<JSObject*>>>> arg0_holder; | |||
| ||||
21703 | if (args.hasDefined(0)) { | |||
21704 | arg0.Construct(); | |||
21705 | arg0_holder.emplace(cx, &arg0.Value().SetValue()); | |||
21706 | if (args[0].isObject()) { | |||
21707 | JS::ForOfIterator iter(cx); | |||
21708 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
21709 | return false; | |||
21710 | } | |||
21711 | if (!iter.valueIsIterable()) { | |||
21712 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21713 | return false; | |||
21714 | } | |||
21715 | Sequence<Nullable<Sequence<JSObject*>>> &arr = arg0.Value().SetValue(); | |||
21716 | JS::Rooted<JS::Value> temp(cx); | |||
21717 | while (true) { | |||
21718 | bool done; | |||
21719 | if (!iter.next(&temp, &done)) { | |||
21720 | return false; | |||
21721 | } | |||
21722 | if (done) { | |||
21723 | break; | |||
21724 | } | |||
21725 | Nullable<Sequence<JSObject*>>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
21726 | if (!slotPtr) { | |||
21727 | JS_ReportOutOfMemory(cx); | |||
21728 | return false; | |||
21729 | } | |||
21730 | Nullable<Sequence<JSObject*>>& slot = *slotPtr; | |||
21731 | if (temp.isObject()) { | |||
21732 | JS::ForOfIterator iter1(cx); | |||
21733 | if (!iter1.init(temp, JS::ForOfIterator::AllowNonIterable)) { | |||
21734 | return false; | |||
21735 | } | |||
21736 | if (!iter1.valueIsIterable()) { | |||
21737 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
21738 | return false; | |||
21739 | } | |||
21740 | Sequence<JSObject*> &arr1 = slot.SetValue(); | |||
21741 | JS::Rooted<JS::Value> temp1(cx); | |||
21742 | while (true) { | |||
21743 | bool done1; | |||
21744 | if (!iter1.next(&temp1, &done1)) { | |||
21745 | return false; | |||
21746 | } | |||
21747 | if (done1) { | |||
21748 | break; | |||
21749 | } | |||
21750 | JSObject** slotPtr1 = arr1.AppendElement(nullptr, mozilla::fallible); | |||
21751 | if (!slotPtr1) { | |||
21752 | JS_ReportOutOfMemory(cx); | |||
21753 | return false; | |||
21754 | } | |||
21755 | JSObject*& slot1 = *slotPtr1; | |||
21756 | if (temp1.isObject()) { | |||
21757 | slot1 = &temp1.toObject(); | |||
21758 | } else if (temp1.isNullOrUndefined()) { | |||
21759 | slot1 = nullptr; | |||
21760 | } else { | |||
21761 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of element of argument 1"); | |||
21762 | return false; | |||
21763 | } | |||
21764 | } | |||
21765 | } else if (temp.isNullOrUndefined()) { | |||
21766 | slot.SetNull(); | |||
21767 | } else { | |||
21768 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Element of argument 1", "sequence"); | |||
21769 | return false; | |||
21770 | } | |||
21771 | } | |||
21772 | } else if (args[0].isNullOrUndefined()) { | |||
21773 | arg0.Value().SetNull(); | |||
21774 | } else { | |||
21775 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
21776 | return false; | |||
21777 | } | |||
21778 | } | |||
21779 | // NOTE: This assert does NOT call the function. | |||
21780 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableSequenceOfNullableObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21781 | MOZ_KnownLive(self)(self)->PassOptionalNullableSequenceOfNullableSequenceOfNullableObject(cx, Constify(arg0)); | |||
21782 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21782); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21782; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21783 | args.rval().setUndefined(); | |||
21784 | return true; | |||
21785 | } | |||
21786 | ||||
21787 | static const JSJitInfo passOptionalNullableSequenceOfNullableSequenceOfNullableObject_methodinfo = { | |||
21788 | { (JSJitGetterOp)passOptionalNullableSequenceOfNullableSequenceOfNullableObject }, | |||
21789 | { prototypes::id::TestExampleInterface }, | |||
21790 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21791 | JSJitInfo::Method, | |||
21792 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21793 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21794 | false, /* isInfallible. False in setters. */ | |||
21795 | false, /* isMovable. Not relevant for setters. */ | |||
21796 | false, /* isEliminatable. Not relevant for setters. */ | |||
21797 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21798 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21799 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21800 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21801 | }; | |||
21802 | ||||
21803 | MOZ_CAN_RUN_SCRIPT static bool | |||
21804 | passRecordOfObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21805 | { | |||
21806 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfObject"); | |||
21807 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21810( cx, "TestExampleInterface" , "passRecordOfObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21808 | "TestExampleInterface", "passRecordOfObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21810( cx, "TestExampleInterface" , "passRecordOfObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21809 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21810( cx, "TestExampleInterface" , "passRecordOfObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21810 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21810( cx, "TestExampleInterface" , "passRecordOfObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
21811 | ||||
21812 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21813 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfObject", 1)) { | |||
21814 | return false; | |||
21815 | } | |||
21816 | Record<nsString, JSObject*> arg0; | |||
21817 | RecordRooter<nsString, JSObject*> arg0_holder(cx, &arg0); | |||
21818 | if (args[0].isObject()) { | |||
21819 | auto& recordEntries = arg0.Entries(); | |||
21820 | ||||
21821 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
21822 | JS::RootedVector<jsid> ids(cx); | |||
21823 | if (!js::GetPropertyKeys(cx, recordObj, | |||
21824 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
21825 | return false; | |||
21826 | } | |||
21827 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
21828 | JS_ReportOutOfMemory(cx); | |||
21829 | return false; | |||
21830 | } | |||
21831 | JS::Rooted<JS::Value> propNameValue(cx); | |||
21832 | JS::Rooted<JS::Value> temp(cx); | |||
21833 | JS::Rooted<jsid> curId(cx); | |||
21834 | JS::Rooted<JS::Value> idVal(cx); | |||
21835 | // Use a hashset to keep track of ids seen, to avoid | |||
21836 | // introducing nasty O(N^2) behavior scanning for them all the | |||
21837 | // time. Ideally we'd use a data structure with O(1) lookup | |||
21838 | // _and_ ordering for the MozMap, but we don't have one lying | |||
21839 | // around. | |||
21840 | nsTHashtable<nsStringHashKey> idsSeen; | |||
21841 | for (size_t i = 0; i < ids.length(); ++i) { | |||
21842 | curId = ids[i]; | |||
21843 | ||||
21844 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
21845 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
21846 | &desc)) { | |||
21847 | return false; | |||
21848 | } | |||
21849 | ||||
21850 | if (desc.isNothing() || !desc->enumerable()) { | |||
21851 | continue; | |||
21852 | } | |||
21853 | ||||
21854 | idVal = js::IdToValue(curId); | |||
21855 | nsString propName; | |||
21856 | // This will just throw if idVal is a Symbol, like the spec says | |||
21857 | // to do. | |||
21858 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
21859 | return false; | |||
21860 | } | |||
21861 | ||||
21862 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
21863 | return false; | |||
21864 | } | |||
21865 | ||||
21866 | Record<nsString, JSObject*>::EntryType* entry; | |||
21867 | if (!idsSeen.EnsureInserted(propName)) { | |||
21868 | // Find the existing entry. | |||
21869 | auto idx = recordEntries.IndexOf(propName); | |||
21870 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 21871); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 21871; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
21871 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 21871); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 21871; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
21872 | // Now blow it away to make it look like it was just added | |||
21873 | // to the array, because it's not obvious that it's | |||
21874 | // safe to write to its already-initialized mValue via our | |||
21875 | // normal codegen conversions. For example, the value | |||
21876 | // could be a union and this would change its type, but | |||
21877 | // codegen assumes we won't do that. | |||
21878 | entry = recordEntries.ReconstructElementAt(idx); | |||
21879 | } else { | |||
21880 | // Safe to do an infallible append here, because we did a | |||
21881 | // SetCapacity above to the right capacity. | |||
21882 | entry = recordEntries.AppendElement(); | |||
21883 | } | |||
21884 | entry->mKey = propName; | |||
21885 | JSObject*& slot = entry->mValue; | |||
21886 | if (temp.isObject()) { | |||
21887 | slot = &temp.toObject(); | |||
21888 | } else { | |||
21889 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value in argument 1"); | |||
21890 | return false; | |||
21891 | } | |||
21892 | } | |||
21893 | } else { | |||
21894 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
21895 | return false; | |||
21896 | } | |||
21897 | // NOTE: This assert does NOT call the function. | |||
21898 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
21899 | MOZ_KnownLive(self)(self)->PassRecordOfObject(cx, Constify(arg0)); | |||
21900 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21900); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21900; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21901 | args.rval().setUndefined(); | |||
21902 | return true; | |||
21903 | } | |||
21904 | ||||
21905 | static const JSJitInfo passRecordOfObject_methodinfo = { | |||
21906 | { (JSJitGetterOp)passRecordOfObject }, | |||
21907 | { prototypes::id::TestExampleInterface }, | |||
21908 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21909 | JSJitInfo::Method, | |||
21910 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21911 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
21912 | false, /* isInfallible. False in setters. */ | |||
21913 | false, /* isMovable. Not relevant for setters. */ | |||
21914 | false, /* isEliminatable. Not relevant for setters. */ | |||
21915 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21916 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21917 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21918 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21919 | }; | |||
21920 | ||||
21921 | MOZ_CAN_RUN_SCRIPT static bool | |||
21922 | receiveObject(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21923 | { | |||
21924 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21927( cx, "TestExampleInterface" , "receiveObject", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21925 | "TestExampleInterface", "receiveObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21927( cx, "TestExampleInterface" , "receiveObject", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21926 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21927( cx, "TestExampleInterface" , "receiveObject", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21927 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21927( cx, "TestExampleInterface" , "receiveObject", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
21928 | ||||
21929 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21930 | JS::Rooted<JSObject*> result(cx); | |||
21931 | // NOTE: This assert does NOT call the function. | |||
21932 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveObject(cx, &result))>, "Should be returning void here"); | |||
21933 | MOZ_KnownLive(self)(self)->ReceiveObject(cx, &result); | |||
21934 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21934); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21934; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21935 | JS::ExposeObjectToActiveJS(result); | |||
21936 | args.rval().setObject(*result); | |||
21937 | if (!MaybeWrapObjectValue(cx, args.rval())) { | |||
21938 | return false; | |||
21939 | } | |||
21940 | return true; | |||
21941 | } | |||
21942 | ||||
21943 | static const JSJitInfo receiveObject_methodinfo = { | |||
21944 | { (JSJitGetterOp)receiveObject }, | |||
21945 | { prototypes::id::TestExampleInterface }, | |||
21946 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21947 | JSJitInfo::Method, | |||
21948 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21949 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
21950 | false, /* isInfallible. False in setters. */ | |||
21951 | false, /* isMovable. Not relevant for setters. */ | |||
21952 | false, /* isEliminatable. Not relevant for setters. */ | |||
21953 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21954 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21955 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21956 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21957 | }; | |||
21958 | ||||
21959 | MOZ_CAN_RUN_SCRIPT static bool | |||
21960 | receiveNullableObject(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
21961 | { | |||
21962 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject21965( cx, "TestExampleInterface" , "receiveNullableObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21963 | "TestExampleInterface", "receiveNullableObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject21965( cx, "TestExampleInterface" , "receiveNullableObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21964 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject21965( cx, "TestExampleInterface" , "receiveNullableObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
21965 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject21965( cx, "TestExampleInterface" , "receiveNullableObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
21966 | ||||
21967 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
21968 | JS::Rooted<JSObject*> result(cx); | |||
21969 | // NOTE: This assert does NOT call the function. | |||
21970 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableObject(cx, &result))>, "Should be returning void here"); | |||
21971 | MOZ_KnownLive(self)(self)->ReceiveNullableObject(cx, &result); | |||
21972 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 21972); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 21972; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
21973 | if (result) { | |||
21974 | JS::ExposeObjectToActiveJS(result); | |||
21975 | } | |||
21976 | args.rval().setObjectOrNull(result); | |||
21977 | if (!MaybeWrapObjectOrNullValue(cx, args.rval())) { | |||
21978 | return false; | |||
21979 | } | |||
21980 | return true; | |||
21981 | } | |||
21982 | ||||
21983 | static const JSJitInfo receiveNullableObject_methodinfo = { | |||
21984 | { (JSJitGetterOp)receiveNullableObject }, | |||
21985 | { prototypes::id::TestExampleInterface }, | |||
21986 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
21987 | JSJitInfo::Method, | |||
21988 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
21989 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
21990 | false, /* isInfallible. False in setters. */ | |||
21991 | false, /* isMovable. Not relevant for setters. */ | |||
21992 | false, /* isEliminatable. Not relevant for setters. */ | |||
21993 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
21994 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
21995 | false, /* isTypedMethod. Only relevant for methods. */ | |||
21996 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
21997 | }; | |||
21998 | ||||
21999 | MOZ_CAN_RUN_SCRIPT static bool | |||
22000 | passUnion(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22001 | { | |||
22002 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion"); | |||
22003 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22006( cx, "TestExampleInterface" , "passUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
22004 | "TestExampleInterface", "passUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22006( cx, "TestExampleInterface" , "passUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
22005 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22006( cx, "TestExampleInterface" , "passUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
22006 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22006( cx, "TestExampleInterface" , "passUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
22007 | ||||
22008 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22009 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion", 1)) { | |||
22010 | return false; | |||
22011 | } | |||
22012 | ObjectOrLong arg0; | |||
22013 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22014 | return false; | |||
22015 | } | |||
22016 | // NOTE: This assert does NOT call the function. | |||
22017 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22018 | MOZ_KnownLive(self)(self)->PassUnion(cx, Constify(arg0)); | |||
22019 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22019); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22019; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22020 | args.rval().setUndefined(); | |||
22021 | return true; | |||
22022 | } | |||
22023 | ||||
22024 | static const JSJitInfo passUnion_methodinfo = { | |||
22025 | { (JSJitGetterOp)passUnion }, | |||
22026 | { prototypes::id::TestExampleInterface }, | |||
22027 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22028 | JSJitInfo::Method, | |||
22029 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22030 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22031 | false, /* isInfallible. False in setters. */ | |||
22032 | false, /* isMovable. Not relevant for setters. */ | |||
22033 | false, /* isEliminatable. Not relevant for setters. */ | |||
22034 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22035 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22036 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22037 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22038 | }; | |||
22039 | ||||
22040 | MOZ_CAN_RUN_SCRIPT static bool | |||
22041 | passUnion2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22042 | { | |||
22043 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion2"); | |||
22044 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22047( cx, "TestExampleInterface" , "passUnion2", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22045 | "TestExampleInterface", "passUnion2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22047( cx, "TestExampleInterface" , "passUnion2", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22046 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22047( cx, "TestExampleInterface" , "passUnion2", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22047 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22047( cx, "TestExampleInterface" , "passUnion2", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22048 | ||||
22049 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22050 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion2", 1)) { | |||
22051 | return false; | |||
22052 | } | |||
22053 | LongOrBoolean arg0; | |||
22054 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22055 | return false; | |||
22056 | } | |||
22057 | // NOTE: This assert does NOT call the function. | |||
22058 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion2(Constify(arg0)))>, "Should be returning void here"); | |||
22059 | MOZ_KnownLive(self)(self)->PassUnion2(Constify(arg0)); | |||
22060 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22060); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22060; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22061 | args.rval().setUndefined(); | |||
22062 | return true; | |||
22063 | } | |||
22064 | ||||
22065 | static const JSJitInfo passUnion2_methodinfo = { | |||
22066 | { (JSJitGetterOp)passUnion2 }, | |||
22067 | { prototypes::id::TestExampleInterface }, | |||
22068 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22069 | JSJitInfo::Method, | |||
22070 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22071 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22072 | false, /* isInfallible. False in setters. */ | |||
22073 | false, /* isMovable. Not relevant for setters. */ | |||
22074 | false, /* isEliminatable. Not relevant for setters. */ | |||
22075 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22076 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22077 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22078 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22079 | }; | |||
22080 | ||||
22081 | MOZ_CAN_RUN_SCRIPT static bool | |||
22082 | passUnion3(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22083 | { | |||
22084 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion3"); | |||
22085 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22088( cx, "TestExampleInterface" , "passUnion3", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22086 | "TestExampleInterface", "passUnion3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22088( cx, "TestExampleInterface" , "passUnion3", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22087 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22088( cx, "TestExampleInterface" , "passUnion3", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22088 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22088( cx, "TestExampleInterface" , "passUnion3", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22089 | ||||
22090 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22091 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion3", 1)) { | |||
22092 | return false; | |||
22093 | } | |||
22094 | ObjectOrLongOrBoolean arg0; | |||
22095 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22096 | return false; | |||
22097 | } | |||
22098 | // NOTE: This assert does NOT call the function. | |||
22099 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion3(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22100 | MOZ_KnownLive(self)(self)->PassUnion3(cx, Constify(arg0)); | |||
22101 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22101); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22101; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22102 | args.rval().setUndefined(); | |||
22103 | return true; | |||
22104 | } | |||
22105 | ||||
22106 | static const JSJitInfo passUnion3_methodinfo = { | |||
22107 | { (JSJitGetterOp)passUnion3 }, | |||
22108 | { prototypes::id::TestExampleInterface }, | |||
22109 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22110 | JSJitInfo::Method, | |||
22111 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22112 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22113 | false, /* isInfallible. False in setters. */ | |||
22114 | false, /* isMovable. Not relevant for setters. */ | |||
22115 | false, /* isEliminatable. Not relevant for setters. */ | |||
22116 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22117 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22118 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22119 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22120 | }; | |||
22121 | ||||
22122 | MOZ_CAN_RUN_SCRIPT static bool | |||
22123 | passUnion4(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22124 | { | |||
22125 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion4"); | |||
22126 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22129( cx, "TestExampleInterface" , "passUnion4", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22127 | "TestExampleInterface", "passUnion4", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22129( cx, "TestExampleInterface" , "passUnion4", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22128 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22129( cx, "TestExampleInterface" , "passUnion4", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22129 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22129( cx, "TestExampleInterface" , "passUnion4", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22130 | ||||
22131 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22132 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion4", 1)) { | |||
22133 | return false; | |||
22134 | } | |||
22135 | NodeOrLongOrBoolean arg0; | |||
22136 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22137 | return false; | |||
22138 | } | |||
22139 | // NOTE: This assert does NOT call the function. | |||
22140 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion4(Constify(arg0)))>, "Should be returning void here"); | |||
22141 | MOZ_KnownLive(self)(self)->PassUnion4(Constify(arg0)); | |||
22142 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22142); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22142; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22143 | args.rval().setUndefined(); | |||
22144 | return true; | |||
22145 | } | |||
22146 | ||||
22147 | static const JSJitInfo passUnion4_methodinfo = { | |||
22148 | { (JSJitGetterOp)passUnion4 }, | |||
22149 | { prototypes::id::TestExampleInterface }, | |||
22150 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22151 | JSJitInfo::Method, | |||
22152 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22153 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22154 | false, /* isInfallible. False in setters. */ | |||
22155 | false, /* isMovable. Not relevant for setters. */ | |||
22156 | false, /* isEliminatable. Not relevant for setters. */ | |||
22157 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22158 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22159 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22160 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22161 | }; | |||
22162 | ||||
22163 | MOZ_CAN_RUN_SCRIPT static bool | |||
22164 | passUnion5(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22165 | { | |||
22166 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion5"); | |||
22167 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22170( cx, "TestExampleInterface" , "passUnion5", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22168 | "TestExampleInterface", "passUnion5", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22170( cx, "TestExampleInterface" , "passUnion5", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22169 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22170( cx, "TestExampleInterface" , "passUnion5", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22170 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22170( cx, "TestExampleInterface" , "passUnion5", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22171 | ||||
22172 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22173 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion5", 1)) { | |||
22174 | return false; | |||
22175 | } | |||
22176 | ObjectOrBoolean arg0; | |||
22177 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22178 | return false; | |||
22179 | } | |||
22180 | // NOTE: This assert does NOT call the function. | |||
22181 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion5(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22182 | MOZ_KnownLive(self)(self)->PassUnion5(cx, Constify(arg0)); | |||
22183 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22183); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22183; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22184 | args.rval().setUndefined(); | |||
22185 | return true; | |||
22186 | } | |||
22187 | ||||
22188 | static const JSJitInfo passUnion5_methodinfo = { | |||
22189 | { (JSJitGetterOp)passUnion5 }, | |||
22190 | { prototypes::id::TestExampleInterface }, | |||
22191 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22192 | JSJitInfo::Method, | |||
22193 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22194 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22195 | false, /* isInfallible. False in setters. */ | |||
22196 | false, /* isMovable. Not relevant for setters. */ | |||
22197 | false, /* isEliminatable. Not relevant for setters. */ | |||
22198 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22199 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22200 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22201 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22202 | }; | |||
22203 | ||||
22204 | MOZ_CAN_RUN_SCRIPT static bool | |||
22205 | passUnion6(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22206 | { | |||
22207 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion6"); | |||
22208 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22211( cx, "TestExampleInterface" , "passUnion6", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22209 | "TestExampleInterface", "passUnion6", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22211( cx, "TestExampleInterface" , "passUnion6", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22210 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22211( cx, "TestExampleInterface" , "passUnion6", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22211 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22211( cx, "TestExampleInterface" , "passUnion6", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22212 | ||||
22213 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22214 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion6", 1)) { | |||
22215 | return false; | |||
22216 | } | |||
22217 | ObjectOrString arg0; | |||
22218 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22219 | return false; | |||
22220 | } | |||
22221 | // NOTE: This assert does NOT call the function. | |||
22222 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion6(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22223 | MOZ_KnownLive(self)(self)->PassUnion6(cx, Constify(arg0)); | |||
22224 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22224); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22224; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22225 | args.rval().setUndefined(); | |||
22226 | return true; | |||
22227 | } | |||
22228 | ||||
22229 | static const JSJitInfo passUnion6_methodinfo = { | |||
22230 | { (JSJitGetterOp)passUnion6 }, | |||
22231 | { prototypes::id::TestExampleInterface }, | |||
22232 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22233 | JSJitInfo::Method, | |||
22234 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22235 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22236 | false, /* isInfallible. False in setters. */ | |||
22237 | false, /* isMovable. Not relevant for setters. */ | |||
22238 | false, /* isEliminatable. Not relevant for setters. */ | |||
22239 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22240 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22241 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22242 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22243 | }; | |||
22244 | ||||
22245 | MOZ_CAN_RUN_SCRIPT static bool | |||
22246 | passUnion7(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22247 | { | |||
22248 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion7"); | |||
22249 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22252( cx, "TestExampleInterface" , "passUnion7", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22250 | "TestExampleInterface", "passUnion7", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22252( cx, "TestExampleInterface" , "passUnion7", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22251 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22252( cx, "TestExampleInterface" , "passUnion7", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22252 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22252( cx, "TestExampleInterface" , "passUnion7", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22253 | ||||
22254 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22255 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion7", 1)) { | |||
22256 | return false; | |||
22257 | } | |||
22258 | ObjectOrStringOrLong arg0; | |||
22259 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22260 | return false; | |||
22261 | } | |||
22262 | // NOTE: This assert does NOT call the function. | |||
22263 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion7(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22264 | MOZ_KnownLive(self)(self)->PassUnion7(cx, Constify(arg0)); | |||
22265 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22265); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22265; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22266 | args.rval().setUndefined(); | |||
22267 | return true; | |||
22268 | } | |||
22269 | ||||
22270 | static const JSJitInfo passUnion7_methodinfo = { | |||
22271 | { (JSJitGetterOp)passUnion7 }, | |||
22272 | { prototypes::id::TestExampleInterface }, | |||
22273 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22274 | JSJitInfo::Method, | |||
22275 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22276 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22277 | false, /* isInfallible. False in setters. */ | |||
22278 | false, /* isMovable. Not relevant for setters. */ | |||
22279 | false, /* isEliminatable. Not relevant for setters. */ | |||
22280 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22281 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22282 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22283 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22284 | }; | |||
22285 | ||||
22286 | MOZ_CAN_RUN_SCRIPT static bool | |||
22287 | passUnion8(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22288 | { | |||
22289 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion8"); | |||
22290 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22293( cx, "TestExampleInterface" , "passUnion8", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22291 | "TestExampleInterface", "passUnion8", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22293( cx, "TestExampleInterface" , "passUnion8", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22292 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22293( cx, "TestExampleInterface" , "passUnion8", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22293 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22293( cx, "TestExampleInterface" , "passUnion8", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22294 | ||||
22295 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22296 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion8", 1)) { | |||
22297 | return false; | |||
22298 | } | |||
22299 | ObjectOrStringOrBoolean arg0; | |||
22300 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22301 | return false; | |||
22302 | } | |||
22303 | // NOTE: This assert does NOT call the function. | |||
22304 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion8(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22305 | MOZ_KnownLive(self)(self)->PassUnion8(cx, Constify(arg0)); | |||
22306 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22306); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22306; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22307 | args.rval().setUndefined(); | |||
22308 | return true; | |||
22309 | } | |||
22310 | ||||
22311 | static const JSJitInfo passUnion8_methodinfo = { | |||
22312 | { (JSJitGetterOp)passUnion8 }, | |||
22313 | { prototypes::id::TestExampleInterface }, | |||
22314 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22315 | JSJitInfo::Method, | |||
22316 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22317 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22318 | false, /* isInfallible. False in setters. */ | |||
22319 | false, /* isMovable. Not relevant for setters. */ | |||
22320 | false, /* isEliminatable. Not relevant for setters. */ | |||
22321 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22322 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22323 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22324 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22325 | }; | |||
22326 | ||||
22327 | MOZ_CAN_RUN_SCRIPT static bool | |||
22328 | passUnion9(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22329 | { | |||
22330 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion9"); | |||
22331 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22334( cx, "TestExampleInterface" , "passUnion9", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22332 | "TestExampleInterface", "passUnion9", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22334( cx, "TestExampleInterface" , "passUnion9", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22333 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22334( cx, "TestExampleInterface" , "passUnion9", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22334 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22334( cx, "TestExampleInterface" , "passUnion9", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22335 | ||||
22336 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22337 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion9", 1)) { | |||
22338 | return false; | |||
22339 | } | |||
22340 | ObjectOrStringOrLongOrBoolean arg0; | |||
22341 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22342 | return false; | |||
22343 | } | |||
22344 | // NOTE: This assert does NOT call the function. | |||
22345 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion9(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22346 | MOZ_KnownLive(self)(self)->PassUnion9(cx, Constify(arg0)); | |||
22347 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22347); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22347; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22348 | args.rval().setUndefined(); | |||
22349 | return true; | |||
22350 | } | |||
22351 | ||||
22352 | static const JSJitInfo passUnion9_methodinfo = { | |||
22353 | { (JSJitGetterOp)passUnion9 }, | |||
22354 | { prototypes::id::TestExampleInterface }, | |||
22355 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22356 | JSJitInfo::Method, | |||
22357 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22358 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22359 | false, /* isInfallible. False in setters. */ | |||
22360 | false, /* isMovable. Not relevant for setters. */ | |||
22361 | false, /* isEliminatable. Not relevant for setters. */ | |||
22362 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22363 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22364 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22365 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22366 | }; | |||
22367 | ||||
22368 | MOZ_CAN_RUN_SCRIPT static bool | |||
22369 | passUnion10(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22370 | { | |||
22371 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion10"); | |||
22372 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22375( cx, "TestExampleInterface" , "passUnion10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22373 | "TestExampleInterface", "passUnion10", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22375( cx, "TestExampleInterface" , "passUnion10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22374 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22375( cx, "TestExampleInterface" , "passUnion10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22375 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22375( cx, "TestExampleInterface" , "passUnion10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22376 | ||||
22377 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22378 | EventInitOrLong arg0; | |||
22379 | if (!(args.hasDefined(0))) { | |||
22380 | if (!arg0.RawSetAsEventInit().Init(cx, JS::NullHandleValue, "Member of (EventInit or long)")) { | |||
22381 | return false; | |||
22382 | } | |||
22383 | } else { | |||
22384 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22385 | return false; | |||
22386 | } | |||
22387 | } | |||
22388 | // NOTE: This assert does NOT call the function. | |||
22389 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion10(Constify(arg0)))>, "Should be returning void here"); | |||
22390 | MOZ_KnownLive(self)(self)->PassUnion10(Constify(arg0)); | |||
22391 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22391); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22391; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22392 | args.rval().setUndefined(); | |||
22393 | return true; | |||
22394 | } | |||
22395 | ||||
22396 | static const JSJitInfo passUnion10_methodinfo = { | |||
22397 | { (JSJitGetterOp)passUnion10 }, | |||
22398 | { prototypes::id::TestExampleInterface }, | |||
22399 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22400 | JSJitInfo::Method, | |||
22401 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22402 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22403 | false, /* isInfallible. False in setters. */ | |||
22404 | false, /* isMovable. Not relevant for setters. */ | |||
22405 | false, /* isEliminatable. Not relevant for setters. */ | |||
22406 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22407 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22408 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22409 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22410 | }; | |||
22411 | ||||
22412 | MOZ_CAN_RUN_SCRIPT static bool | |||
22413 | passUnion11(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22414 | { | |||
22415 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion11"); | |||
22416 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22419( cx, "TestExampleInterface" , "passUnion11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22417 | "TestExampleInterface", "passUnion11", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22419( cx, "TestExampleInterface" , "passUnion11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22418 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22419( cx, "TestExampleInterface" , "passUnion11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22419 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22419( cx, "TestExampleInterface" , "passUnion11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22420 | ||||
22421 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22422 | CustomEventInitOrLong arg0; | |||
22423 | if (!(args.hasDefined(0))) { | |||
22424 | if (!arg0.RawSetAsCustomEventInit(cx).Init(cx, JS::NullHandleValue, "Member of (CustomEventInit or long)")) { | |||
22425 | return false; | |||
22426 | } | |||
22427 | } else { | |||
22428 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22429 | return false; | |||
22430 | } | |||
22431 | } | |||
22432 | // NOTE: This assert does NOT call the function. | |||
22433 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion11(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22434 | MOZ_KnownLive(self)(self)->PassUnion11(cx, Constify(arg0)); | |||
22435 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22435); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22435; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22436 | args.rval().setUndefined(); | |||
22437 | return true; | |||
22438 | } | |||
22439 | ||||
22440 | static const JSJitInfo passUnion11_methodinfo = { | |||
22441 | { (JSJitGetterOp)passUnion11 }, | |||
22442 | { prototypes::id::TestExampleInterface }, | |||
22443 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22444 | JSJitInfo::Method, | |||
22445 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22446 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22447 | false, /* isInfallible. False in setters. */ | |||
22448 | false, /* isMovable. Not relevant for setters. */ | |||
22449 | false, /* isEliminatable. Not relevant for setters. */ | |||
22450 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22451 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22452 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22453 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22454 | }; | |||
22455 | ||||
22456 | MOZ_CAN_RUN_SCRIPT static bool | |||
22457 | passUnion12(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22458 | { | |||
22459 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion12"); | |||
22460 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22463( cx, "TestExampleInterface" , "passUnion12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22461 | "TestExampleInterface", "passUnion12", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22463( cx, "TestExampleInterface" , "passUnion12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22462 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22463( cx, "TestExampleInterface" , "passUnion12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22463 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22463( cx, "TestExampleInterface" , "passUnion12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22464 | ||||
22465 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22466 | EventInitOrLong arg0; | |||
22467 | if (!(args.hasDefined(0))) { | |||
22468 | arg0.RawSetAsLong() = 5; | |||
22469 | } else { | |||
22470 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22471 | return false; | |||
22472 | } | |||
22473 | } | |||
22474 | // NOTE: This assert does NOT call the function. | |||
22475 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion12(Constify(arg0)))>, "Should be returning void here"); | |||
22476 | MOZ_KnownLive(self)(self)->PassUnion12(Constify(arg0)); | |||
22477 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22477); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22477; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22478 | args.rval().setUndefined(); | |||
22479 | return true; | |||
22480 | } | |||
22481 | ||||
22482 | static const JSJitInfo passUnion12_methodinfo = { | |||
22483 | { (JSJitGetterOp)passUnion12 }, | |||
22484 | { prototypes::id::TestExampleInterface }, | |||
22485 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22486 | JSJitInfo::Method, | |||
22487 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22488 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22489 | false, /* isInfallible. False in setters. */ | |||
22490 | false, /* isMovable. Not relevant for setters. */ | |||
22491 | false, /* isEliminatable. Not relevant for setters. */ | |||
22492 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22493 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22494 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22495 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22496 | }; | |||
22497 | ||||
22498 | MOZ_CAN_RUN_SCRIPT static bool | |||
22499 | passUnion13(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22500 | { | |||
22501 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion13"); | |||
22502 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22505( cx, "TestExampleInterface" , "passUnion13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22503 | "TestExampleInterface", "passUnion13", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22505( cx, "TestExampleInterface" , "passUnion13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22504 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22505( cx, "TestExampleInterface" , "passUnion13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22505 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22505( cx, "TestExampleInterface" , "passUnion13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22506 | ||||
22507 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22508 | ObjectOrLongOrNull arg0; | |||
22509 | if (!(args.hasDefined(0))) { | |||
22510 | arg0.SetNull(); | |||
22511 | } else { | |||
22512 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22513 | return false; | |||
22514 | } | |||
22515 | } | |||
22516 | // NOTE: This assert does NOT call the function. | |||
22517 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion13(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22518 | MOZ_KnownLive(self)(self)->PassUnion13(cx, Constify(arg0)); | |||
22519 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22519); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22519; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22520 | args.rval().setUndefined(); | |||
22521 | return true; | |||
22522 | } | |||
22523 | ||||
22524 | static const JSJitInfo passUnion13_methodinfo = { | |||
22525 | { (JSJitGetterOp)passUnion13 }, | |||
22526 | { prototypes::id::TestExampleInterface }, | |||
22527 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22528 | JSJitInfo::Method, | |||
22529 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22530 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22531 | false, /* isInfallible. False in setters. */ | |||
22532 | false, /* isMovable. Not relevant for setters. */ | |||
22533 | false, /* isEliminatable. Not relevant for setters. */ | |||
22534 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22535 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22536 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22537 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22538 | }; | |||
22539 | ||||
22540 | MOZ_CAN_RUN_SCRIPT static bool | |||
22541 | passUnion14(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22542 | { | |||
22543 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion14"); | |||
22544 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22547( cx, "TestExampleInterface" , "passUnion14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22545 | "TestExampleInterface", "passUnion14", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22547( cx, "TestExampleInterface" , "passUnion14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22546 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22547( cx, "TestExampleInterface" , "passUnion14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22547 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22547( cx, "TestExampleInterface" , "passUnion14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22548 | ||||
22549 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22550 | ObjectOrLongOrNull arg0; | |||
22551 | if (!(args.hasDefined(0))) { | |||
22552 | arg0.RawSetAsLong() = 5; | |||
22553 | } else { | |||
22554 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22555 | return false; | |||
22556 | } | |||
22557 | } | |||
22558 | // NOTE: This assert does NOT call the function. | |||
22559 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion14(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22560 | MOZ_KnownLive(self)(self)->PassUnion14(cx, Constify(arg0)); | |||
22561 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22561); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22561; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22562 | args.rval().setUndefined(); | |||
22563 | return true; | |||
22564 | } | |||
22565 | ||||
22566 | static const JSJitInfo passUnion14_methodinfo = { | |||
22567 | { (JSJitGetterOp)passUnion14 }, | |||
22568 | { prototypes::id::TestExampleInterface }, | |||
22569 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22570 | JSJitInfo::Method, | |||
22571 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22572 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22573 | false, /* isInfallible. False in setters. */ | |||
22574 | false, /* isMovable. Not relevant for setters. */ | |||
22575 | false, /* isEliminatable. Not relevant for setters. */ | |||
22576 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22577 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22578 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22579 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22580 | }; | |||
22581 | ||||
22582 | MOZ_CAN_RUN_SCRIPT static bool | |||
22583 | passUnion15(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22584 | { | |||
22585 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion15"); | |||
22586 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22589( cx, "TestExampleInterface" , "passUnion15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22587 | "TestExampleInterface", "passUnion15", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22589( cx, "TestExampleInterface" , "passUnion15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22588 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22589( cx, "TestExampleInterface" , "passUnion15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22589 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22589( cx, "TestExampleInterface" , "passUnion15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22590 | ||||
22591 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22592 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion15", 1)) { | |||
22593 | return false; | |||
22594 | } | |||
22595 | LongSequenceOrLong arg0; | |||
22596 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22597 | return false; | |||
22598 | } | |||
22599 | // NOTE: This assert does NOT call the function. | |||
22600 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion15(Constify(arg0)))>, "Should be returning void here"); | |||
22601 | MOZ_KnownLive(self)(self)->PassUnion15(Constify(arg0)); | |||
22602 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22602); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22602; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22603 | args.rval().setUndefined(); | |||
22604 | return true; | |||
22605 | } | |||
22606 | ||||
22607 | static const JSJitInfo passUnion15_methodinfo = { | |||
22608 | { (JSJitGetterOp)passUnion15 }, | |||
22609 | { prototypes::id::TestExampleInterface }, | |||
22610 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22611 | JSJitInfo::Method, | |||
22612 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22613 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22614 | false, /* isInfallible. False in setters. */ | |||
22615 | false, /* isMovable. Not relevant for setters. */ | |||
22616 | false, /* isEliminatable. Not relevant for setters. */ | |||
22617 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22618 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22619 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22620 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22621 | }; | |||
22622 | ||||
22623 | MOZ_CAN_RUN_SCRIPT static bool | |||
22624 | passUnion16(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22625 | { | |||
22626 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion16"); | |||
22627 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22630( cx, "TestExampleInterface" , "passUnion16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22628 | "TestExampleInterface", "passUnion16", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22630( cx, "TestExampleInterface" , "passUnion16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22629 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22630( cx, "TestExampleInterface" , "passUnion16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22630 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22630( cx, "TestExampleInterface" , "passUnion16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22631 | ||||
22632 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22633 | Optional<LongSequenceOrLong> arg0; | |||
22634 | if (args.hasDefined(0)) { | |||
22635 | arg0.Construct(); | |||
22636 | if (!arg0.Value().Init(cx, args[0], "Argument 1", false)) { | |||
22637 | return false; | |||
22638 | } | |||
22639 | } | |||
22640 | // NOTE: This assert does NOT call the function. | |||
22641 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion16(Constify(arg0)))>, "Should be returning void here"); | |||
22642 | MOZ_KnownLive(self)(self)->PassUnion16(Constify(arg0)); | |||
22643 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22643); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22643; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22644 | args.rval().setUndefined(); | |||
22645 | return true; | |||
22646 | } | |||
22647 | ||||
22648 | static const JSJitInfo passUnion16_methodinfo = { | |||
22649 | { (JSJitGetterOp)passUnion16 }, | |||
22650 | { prototypes::id::TestExampleInterface }, | |||
22651 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22652 | JSJitInfo::Method, | |||
22653 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22654 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22655 | false, /* isInfallible. False in setters. */ | |||
22656 | false, /* isMovable. Not relevant for setters. */ | |||
22657 | false, /* isEliminatable. Not relevant for setters. */ | |||
22658 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22659 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22660 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22661 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22662 | }; | |||
22663 | ||||
22664 | MOZ_CAN_RUN_SCRIPT static bool | |||
22665 | passUnion17(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22666 | { | |||
22667 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion17"); | |||
22668 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22671( cx, "TestExampleInterface" , "passUnion17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22669 | "TestExampleInterface", "passUnion17", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22671( cx, "TestExampleInterface" , "passUnion17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22670 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22671( cx, "TestExampleInterface" , "passUnion17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22671 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22671( cx, "TestExampleInterface" , "passUnion17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22672 | ||||
22673 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22674 | LongSequenceOrNullOrLong arg0; | |||
22675 | if (!(args.hasDefined(0))) { | |||
22676 | arg0.RawSetAsLong() = 5; | |||
22677 | } else { | |||
22678 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22679 | return false; | |||
22680 | } | |||
22681 | } | |||
22682 | // NOTE: This assert does NOT call the function. | |||
22683 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion17(Constify(arg0)))>, "Should be returning void here"); | |||
22684 | MOZ_KnownLive(self)(self)->PassUnion17(Constify(arg0)); | |||
22685 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22685); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22685; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22686 | args.rval().setUndefined(); | |||
22687 | return true; | |||
22688 | } | |||
22689 | ||||
22690 | static const JSJitInfo passUnion17_methodinfo = { | |||
22691 | { (JSJitGetterOp)passUnion17 }, | |||
22692 | { prototypes::id::TestExampleInterface }, | |||
22693 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22694 | JSJitInfo::Method, | |||
22695 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22696 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22697 | false, /* isInfallible. False in setters. */ | |||
22698 | false, /* isMovable. Not relevant for setters. */ | |||
22699 | false, /* isEliminatable. Not relevant for setters. */ | |||
22700 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22701 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22702 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22703 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22704 | }; | |||
22705 | ||||
22706 | MOZ_CAN_RUN_SCRIPT static bool | |||
22707 | passUnion18(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22708 | { | |||
22709 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion18"); | |||
22710 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22713( cx, "TestExampleInterface" , "passUnion18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22711 | "TestExampleInterface", "passUnion18", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22713( cx, "TestExampleInterface" , "passUnion18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22712 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22713( cx, "TestExampleInterface" , "passUnion18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22713 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22713( cx, "TestExampleInterface" , "passUnion18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22714 | ||||
22715 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22716 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion18", 1)) { | |||
22717 | return false; | |||
22718 | } | |||
22719 | ObjectSequenceOrLong arg0; | |||
22720 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22721 | return false; | |||
22722 | } | |||
22723 | // NOTE: This assert does NOT call the function. | |||
22724 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion18(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22725 | MOZ_KnownLive(self)(self)->PassUnion18(cx, Constify(arg0)); | |||
22726 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22726); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22726; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22727 | args.rval().setUndefined(); | |||
22728 | return true; | |||
22729 | } | |||
22730 | ||||
22731 | static const JSJitInfo passUnion18_methodinfo = { | |||
22732 | { (JSJitGetterOp)passUnion18 }, | |||
22733 | { prototypes::id::TestExampleInterface }, | |||
22734 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22735 | JSJitInfo::Method, | |||
22736 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22737 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22738 | false, /* isInfallible. False in setters. */ | |||
22739 | false, /* isMovable. Not relevant for setters. */ | |||
22740 | false, /* isEliminatable. Not relevant for setters. */ | |||
22741 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22742 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22743 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22744 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22745 | }; | |||
22746 | ||||
22747 | MOZ_CAN_RUN_SCRIPT static bool | |||
22748 | passUnion19(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22749 | { | |||
22750 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion19"); | |||
22751 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22754( cx, "TestExampleInterface" , "passUnion19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22752 | "TestExampleInterface", "passUnion19", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22754( cx, "TestExampleInterface" , "passUnion19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22753 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22754( cx, "TestExampleInterface" , "passUnion19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22754 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22754( cx, "TestExampleInterface" , "passUnion19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22755 | ||||
22756 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22757 | Optional<ObjectSequenceOrLong> arg0; | |||
22758 | if (args.hasDefined(0)) { | |||
22759 | arg0.Construct(); | |||
22760 | if (!arg0.Value().Init(cx, args[0], "Argument 1", false)) { | |||
22761 | return false; | |||
22762 | } | |||
22763 | } | |||
22764 | // NOTE: This assert does NOT call the function. | |||
22765 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion19(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22766 | MOZ_KnownLive(self)(self)->PassUnion19(cx, Constify(arg0)); | |||
22767 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22767); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22767; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22768 | args.rval().setUndefined(); | |||
22769 | return true; | |||
22770 | } | |||
22771 | ||||
22772 | static const JSJitInfo passUnion19_methodinfo = { | |||
22773 | { (JSJitGetterOp)passUnion19 }, | |||
22774 | { prototypes::id::TestExampleInterface }, | |||
22775 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22776 | JSJitInfo::Method, | |||
22777 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22778 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22779 | false, /* isInfallible. False in setters. */ | |||
22780 | false, /* isMovable. Not relevant for setters. */ | |||
22781 | false, /* isEliminatable. Not relevant for setters. */ | |||
22782 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22783 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22784 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22785 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22786 | }; | |||
22787 | ||||
22788 | MOZ_CAN_RUN_SCRIPT static bool | |||
22789 | passUnion20(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22790 | { | |||
22791 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion20"); | |||
22792 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22795( cx, "TestExampleInterface" , "passUnion20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22793 | "TestExampleInterface", "passUnion20", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22795( cx, "TestExampleInterface" , "passUnion20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22794 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22795( cx, "TestExampleInterface" , "passUnion20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22795 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22795( cx, "TestExampleInterface" , "passUnion20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22796 | ||||
22797 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22798 | ObjectSequenceOrLong arg0; | |||
22799 | if (!(args.hasDefined(0))) { | |||
22800 | Unused << arg0.RawSetAsObjectSequence(cx); | |||
22801 | } else { | |||
22802 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22803 | return false; | |||
22804 | } | |||
22805 | } | |||
22806 | // NOTE: This assert does NOT call the function. | |||
22807 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion20(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22808 | MOZ_KnownLive(self)(self)->PassUnion20(cx, Constify(arg0)); | |||
22809 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22809); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22809; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22810 | args.rval().setUndefined(); | |||
22811 | return true; | |||
22812 | } | |||
22813 | ||||
22814 | static const JSJitInfo passUnion20_methodinfo = { | |||
22815 | { (JSJitGetterOp)passUnion20 }, | |||
22816 | { prototypes::id::TestExampleInterface }, | |||
22817 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22818 | JSJitInfo::Method, | |||
22819 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22820 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22821 | false, /* isInfallible. False in setters. */ | |||
22822 | false, /* isMovable. Not relevant for setters. */ | |||
22823 | false, /* isEliminatable. Not relevant for setters. */ | |||
22824 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22825 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22826 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22827 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22828 | }; | |||
22829 | ||||
22830 | MOZ_CAN_RUN_SCRIPT static bool | |||
22831 | passUnion21(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22832 | { | |||
22833 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion21"); | |||
22834 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22837( cx, "TestExampleInterface" , "passUnion21", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22835 | "TestExampleInterface", "passUnion21", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22837( cx, "TestExampleInterface" , "passUnion21", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22836 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22837( cx, "TestExampleInterface" , "passUnion21", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22837 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22837( cx, "TestExampleInterface" , "passUnion21", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22838 | ||||
22839 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22840 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion21", 1)) { | |||
22841 | return false; | |||
22842 | } | |||
22843 | StringLongRecordOrLong arg0; | |||
22844 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22845 | return false; | |||
22846 | } | |||
22847 | // NOTE: This assert does NOT call the function. | |||
22848 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion21(Constify(arg0)))>, "Should be returning void here"); | |||
22849 | MOZ_KnownLive(self)(self)->PassUnion21(Constify(arg0)); | |||
22850 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22850); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22850; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22851 | args.rval().setUndefined(); | |||
22852 | return true; | |||
22853 | } | |||
22854 | ||||
22855 | static const JSJitInfo passUnion21_methodinfo = { | |||
22856 | { (JSJitGetterOp)passUnion21 }, | |||
22857 | { prototypes::id::TestExampleInterface }, | |||
22858 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22859 | JSJitInfo::Method, | |||
22860 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22861 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22862 | false, /* isInfallible. False in setters. */ | |||
22863 | false, /* isMovable. Not relevant for setters. */ | |||
22864 | false, /* isEliminatable. Not relevant for setters. */ | |||
22865 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22866 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22867 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22868 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22869 | }; | |||
22870 | ||||
22871 | MOZ_CAN_RUN_SCRIPT static bool | |||
22872 | passUnion22(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22873 | { | |||
22874 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion22"); | |||
22875 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22878( cx, "TestExampleInterface" , "passUnion22", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22876 | "TestExampleInterface", "passUnion22", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22878( cx, "TestExampleInterface" , "passUnion22", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22877 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22878( cx, "TestExampleInterface" , "passUnion22", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22878 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22878( cx, "TestExampleInterface" , "passUnion22", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22879 | ||||
22880 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22881 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion22", 1)) { | |||
22882 | return false; | |||
22883 | } | |||
22884 | StringObjectRecordOrLong arg0; | |||
22885 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22886 | return false; | |||
22887 | } | |||
22888 | // NOTE: This assert does NOT call the function. | |||
22889 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion22(cx, Constify(arg0)))>, "Should be returning void here"); | |||
22890 | MOZ_KnownLive(self)(self)->PassUnion22(cx, Constify(arg0)); | |||
22891 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22891); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22891; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22892 | args.rval().setUndefined(); | |||
22893 | return true; | |||
22894 | } | |||
22895 | ||||
22896 | static const JSJitInfo passUnion22_methodinfo = { | |||
22897 | { (JSJitGetterOp)passUnion22 }, | |||
22898 | { prototypes::id::TestExampleInterface }, | |||
22899 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22900 | JSJitInfo::Method, | |||
22901 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22902 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22903 | false, /* isInfallible. False in setters. */ | |||
22904 | false, /* isMovable. Not relevant for setters. */ | |||
22905 | false, /* isEliminatable. Not relevant for setters. */ | |||
22906 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22907 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22908 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22909 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22910 | }; | |||
22911 | ||||
22912 | MOZ_CAN_RUN_SCRIPT static bool | |||
22913 | passUnion23(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22914 | { | |||
22915 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion23"); | |||
22916 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22919( cx, "TestExampleInterface" , "passUnion23", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22917 | "TestExampleInterface", "passUnion23", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22919( cx, "TestExampleInterface" , "passUnion23", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22918 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22919( cx, "TestExampleInterface" , "passUnion23", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22919 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22919( cx, "TestExampleInterface" , "passUnion23", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22920 | ||||
22921 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22922 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion23", 1)) { | |||
22923 | return false; | |||
22924 | } | |||
22925 | ImageDataSequenceOrLong arg0; | |||
22926 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22927 | return false; | |||
22928 | } | |||
22929 | // NOTE: This assert does NOT call the function. | |||
22930 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion23(Constify(arg0)))>, "Should be returning void here"); | |||
22931 | MOZ_KnownLive(self)(self)->PassUnion23(Constify(arg0)); | |||
22932 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22932); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22932; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22933 | args.rval().setUndefined(); | |||
22934 | return true; | |||
22935 | } | |||
22936 | ||||
22937 | static const JSJitInfo passUnion23_methodinfo = { | |||
22938 | { (JSJitGetterOp)passUnion23 }, | |||
22939 | { prototypes::id::TestExampleInterface }, | |||
22940 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22941 | JSJitInfo::Method, | |||
22942 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22943 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22944 | false, /* isInfallible. False in setters. */ | |||
22945 | false, /* isMovable. Not relevant for setters. */ | |||
22946 | false, /* isEliminatable. Not relevant for setters. */ | |||
22947 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22948 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22949 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22950 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22951 | }; | |||
22952 | ||||
22953 | MOZ_CAN_RUN_SCRIPT static bool | |||
22954 | passUnion24(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22955 | { | |||
22956 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion24"); | |||
22957 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject22960( cx, "TestExampleInterface" , "passUnion24", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22958 | "TestExampleInterface", "passUnion24", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject22960( cx, "TestExampleInterface" , "passUnion24", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22959 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject22960( cx, "TestExampleInterface" , "passUnion24", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22960 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject22960( cx, "TestExampleInterface" , "passUnion24", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
22961 | ||||
22962 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
22963 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion24", 1)) { | |||
22964 | return false; | |||
22965 | } | |||
22966 | ImageDataOrNullSequenceOrLong arg0; | |||
22967 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
22968 | return false; | |||
22969 | } | |||
22970 | // NOTE: This assert does NOT call the function. | |||
22971 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion24(Constify(arg0)))>, "Should be returning void here"); | |||
22972 | MOZ_KnownLive(self)(self)->PassUnion24(Constify(arg0)); | |||
22973 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 22973); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 22973; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
22974 | args.rval().setUndefined(); | |||
22975 | return true; | |||
22976 | } | |||
22977 | ||||
22978 | static const JSJitInfo passUnion24_methodinfo = { | |||
22979 | { (JSJitGetterOp)passUnion24 }, | |||
22980 | { prototypes::id::TestExampleInterface }, | |||
22981 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
22982 | JSJitInfo::Method, | |||
22983 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
22984 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
22985 | false, /* isInfallible. False in setters. */ | |||
22986 | false, /* isMovable. Not relevant for setters. */ | |||
22987 | false, /* isEliminatable. Not relevant for setters. */ | |||
22988 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
22989 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
22990 | false, /* isTypedMethod. Only relevant for methods. */ | |||
22991 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
22992 | }; | |||
22993 | ||||
22994 | MOZ_CAN_RUN_SCRIPT static bool | |||
22995 | passUnion25(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
22996 | { | |||
22997 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion25"); | |||
22998 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23001( cx, "TestExampleInterface" , "passUnion25", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
22999 | "TestExampleInterface", "passUnion25", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23001( cx, "TestExampleInterface" , "passUnion25", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23000 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23001( cx, "TestExampleInterface" , "passUnion25", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23001 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23001( cx, "TestExampleInterface" , "passUnion25", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23002 | ||||
23003 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23004 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion25", 1)) { | |||
23005 | return false; | |||
23006 | } | |||
23007 | ImageDataSequenceSequenceOrLong arg0; | |||
23008 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23009 | return false; | |||
23010 | } | |||
23011 | // NOTE: This assert does NOT call the function. | |||
23012 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion25(Constify(arg0)))>, "Should be returning void here"); | |||
23013 | MOZ_KnownLive(self)(self)->PassUnion25(Constify(arg0)); | |||
23014 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23014); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23014; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23015 | args.rval().setUndefined(); | |||
23016 | return true; | |||
23017 | } | |||
23018 | ||||
23019 | static const JSJitInfo passUnion25_methodinfo = { | |||
23020 | { (JSJitGetterOp)passUnion25 }, | |||
23021 | { prototypes::id::TestExampleInterface }, | |||
23022 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23023 | JSJitInfo::Method, | |||
23024 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23025 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23026 | false, /* isInfallible. False in setters. */ | |||
23027 | false, /* isMovable. Not relevant for setters. */ | |||
23028 | false, /* isEliminatable. Not relevant for setters. */ | |||
23029 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23030 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23031 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23032 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23033 | }; | |||
23034 | ||||
23035 | MOZ_CAN_RUN_SCRIPT static bool | |||
23036 | passUnion26(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23037 | { | |||
23038 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion26"); | |||
23039 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23042( cx, "TestExampleInterface" , "passUnion26", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23040 | "TestExampleInterface", "passUnion26", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23042( cx, "TestExampleInterface" , "passUnion26", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23041 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23042( cx, "TestExampleInterface" , "passUnion26", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23042 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23042( cx, "TestExampleInterface" , "passUnion26", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23043 | ||||
23044 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23045 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnion26", 1)) { | |||
23046 | return false; | |||
23047 | } | |||
23048 | ImageDataOrNullSequenceSequenceOrLong arg0; | |||
23049 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23050 | return false; | |||
23051 | } | |||
23052 | // NOTE: This assert does NOT call the function. | |||
23053 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion26(Constify(arg0)))>, "Should be returning void here"); | |||
23054 | MOZ_KnownLive(self)(self)->PassUnion26(Constify(arg0)); | |||
23055 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23055); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23055; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23056 | args.rval().setUndefined(); | |||
23057 | return true; | |||
23058 | } | |||
23059 | ||||
23060 | static const JSJitInfo passUnion26_methodinfo = { | |||
23061 | { (JSJitGetterOp)passUnion26 }, | |||
23062 | { prototypes::id::TestExampleInterface }, | |||
23063 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23064 | JSJitInfo::Method, | |||
23065 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23066 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23067 | false, /* isInfallible. False in setters. */ | |||
23068 | false, /* isMovable. Not relevant for setters. */ | |||
23069 | false, /* isEliminatable. Not relevant for setters. */ | |||
23070 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23071 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23072 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23073 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23074 | }; | |||
23075 | ||||
23076 | MOZ_CAN_RUN_SCRIPT static bool | |||
23077 | passUnion27(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23078 | { | |||
23079 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion27"); | |||
23080 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23083( cx, "TestExampleInterface" , "passUnion27", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23081 | "TestExampleInterface", "passUnion27", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23083( cx, "TestExampleInterface" , "passUnion27", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23082 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23083( cx, "TestExampleInterface" , "passUnion27", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23083 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23083( cx, "TestExampleInterface" , "passUnion27", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23084 | ||||
23085 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23086 | StringSequenceOrEventInit arg0; | |||
23087 | if (!(args.hasDefined(0))) { | |||
23088 | if (!arg0.RawSetAsEventInit().Init(cx, JS::NullHandleValue, "Member of (sequence<DOMString> or EventInit)")) { | |||
23089 | return false; | |||
23090 | } | |||
23091 | } else { | |||
23092 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23093 | return false; | |||
23094 | } | |||
23095 | } | |||
23096 | // NOTE: This assert does NOT call the function. | |||
23097 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion27(Constify(arg0)))>, "Should be returning void here"); | |||
23098 | MOZ_KnownLive(self)(self)->PassUnion27(Constify(arg0)); | |||
23099 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23099); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23099; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23100 | args.rval().setUndefined(); | |||
23101 | return true; | |||
23102 | } | |||
23103 | ||||
23104 | static const JSJitInfo passUnion27_methodinfo = { | |||
23105 | { (JSJitGetterOp)passUnion27 }, | |||
23106 | { prototypes::id::TestExampleInterface }, | |||
23107 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23108 | JSJitInfo::Method, | |||
23109 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23110 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23111 | false, /* isInfallible. False in setters. */ | |||
23112 | false, /* isMovable. Not relevant for setters. */ | |||
23113 | false, /* isEliminatable. Not relevant for setters. */ | |||
23114 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23115 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23116 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23117 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23118 | }; | |||
23119 | ||||
23120 | MOZ_CAN_RUN_SCRIPT static bool | |||
23121 | passUnion28(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23122 | { | |||
23123 | BindingCallContext cx(cx_, "TestExampleInterface.passUnion28"); | |||
23124 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23127( cx, "TestExampleInterface" , "passUnion28", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23125 | "TestExampleInterface", "passUnion28", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23127( cx, "TestExampleInterface" , "passUnion28", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23126 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23127( cx, "TestExampleInterface" , "passUnion28", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23127 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23127( cx, "TestExampleInterface" , "passUnion28", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23128 | ||||
23129 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23130 | EventInitOrStringSequence arg0; | |||
23131 | if (!(args.hasDefined(0))) { | |||
23132 | if (!arg0.RawSetAsEventInit().Init(cx, JS::NullHandleValue, "Member of (EventInit or sequence<DOMString>)")) { | |||
23133 | return false; | |||
23134 | } | |||
23135 | } else { | |||
23136 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23137 | return false; | |||
23138 | } | |||
23139 | } | |||
23140 | // NOTE: This assert does NOT call the function. | |||
23141 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnion28(Constify(arg0)))>, "Should be returning void here"); | |||
23142 | MOZ_KnownLive(self)(self)->PassUnion28(Constify(arg0)); | |||
23143 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23143); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23143; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23144 | args.rval().setUndefined(); | |||
23145 | return true; | |||
23146 | } | |||
23147 | ||||
23148 | static const JSJitInfo passUnion28_methodinfo = { | |||
23149 | { (JSJitGetterOp)passUnion28 }, | |||
23150 | { prototypes::id::TestExampleInterface }, | |||
23151 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23152 | JSJitInfo::Method, | |||
23153 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23154 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23155 | false, /* isInfallible. False in setters. */ | |||
23156 | false, /* isMovable. Not relevant for setters. */ | |||
23157 | false, /* isEliminatable. Not relevant for setters. */ | |||
23158 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23159 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23160 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23161 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23162 | }; | |||
23163 | ||||
23164 | MOZ_CAN_RUN_SCRIPT static bool | |||
23165 | passUnionWithCallback(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23166 | { | |||
23167 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithCallback"); | |||
23168 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23171( cx, "TestExampleInterface" , "passUnionWithCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23169 | "TestExampleInterface", "passUnionWithCallback", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23171( cx, "TestExampleInterface" , "passUnionWithCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23170 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23171( cx, "TestExampleInterface" , "passUnionWithCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23171 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23171( cx, "TestExampleInterface" , "passUnionWithCallback", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23172 | ||||
23173 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23174 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithCallback", 1)) { | |||
23175 | return false; | |||
23176 | } | |||
23177 | EventHandlerNonNullOrNullOrLong arg0; | |||
23178 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23179 | return false; | |||
23180 | } | |||
23181 | // NOTE: This assert does NOT call the function. | |||
23182 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithCallback(Constify(arg0)))>, "Should be returning void here"); | |||
23183 | MOZ_KnownLive(self)(self)->PassUnionWithCallback(Constify(arg0)); | |||
23184 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23184); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23184; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23185 | args.rval().setUndefined(); | |||
23186 | return true; | |||
23187 | } | |||
23188 | ||||
23189 | static const JSJitInfo passUnionWithCallback_methodinfo = { | |||
23190 | { (JSJitGetterOp)passUnionWithCallback }, | |||
23191 | { prototypes::id::TestExampleInterface }, | |||
23192 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23193 | JSJitInfo::Method, | |||
23194 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23195 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23196 | false, /* isInfallible. False in setters. */ | |||
23197 | false, /* isMovable. Not relevant for setters. */ | |||
23198 | false, /* isEliminatable. Not relevant for setters. */ | |||
23199 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23200 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23201 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23202 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23203 | }; | |||
23204 | ||||
23205 | MOZ_CAN_RUN_SCRIPT static bool | |||
23206 | passUnionWithByteString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23207 | { | |||
23208 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithByteString"); | |||
23209 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23212( cx, "TestExampleInterface" , "passUnionWithByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23210 | "TestExampleInterface", "passUnionWithByteString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23212( cx, "TestExampleInterface" , "passUnionWithByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23211 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23212( cx, "TestExampleInterface" , "passUnionWithByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23212 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23212( cx, "TestExampleInterface" , "passUnionWithByteString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23213 | ||||
23214 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23215 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithByteString", 1)) { | |||
23216 | return false; | |||
23217 | } | |||
23218 | ByteStringOrLong arg0; | |||
23219 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23220 | return false; | |||
23221 | } | |||
23222 | // NOTE: This assert does NOT call the function. | |||
23223 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithByteString(Constify(arg0)))>, "Should be returning void here"); | |||
23224 | MOZ_KnownLive(self)(self)->PassUnionWithByteString(Constify(arg0)); | |||
23225 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23225); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23225; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23226 | args.rval().setUndefined(); | |||
23227 | return true; | |||
23228 | } | |||
23229 | ||||
23230 | static const JSJitInfo passUnionWithByteString_methodinfo = { | |||
23231 | { (JSJitGetterOp)passUnionWithByteString }, | |||
23232 | { prototypes::id::TestExampleInterface }, | |||
23233 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23234 | JSJitInfo::Method, | |||
23235 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23236 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23237 | false, /* isInfallible. False in setters. */ | |||
23238 | false, /* isMovable. Not relevant for setters. */ | |||
23239 | false, /* isEliminatable. Not relevant for setters. */ | |||
23240 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23241 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23242 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23243 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23244 | }; | |||
23245 | ||||
23246 | MOZ_CAN_RUN_SCRIPT static bool | |||
23247 | passUnionWithUTF8String(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23248 | { | |||
23249 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithUTF8String"); | |||
23250 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23253( cx, "TestExampleInterface" , "passUnionWithUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23251 | "TestExampleInterface", "passUnionWithUTF8String", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23253( cx, "TestExampleInterface" , "passUnionWithUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23252 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23253( cx, "TestExampleInterface" , "passUnionWithUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23253 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23253( cx, "TestExampleInterface" , "passUnionWithUTF8String", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23254 | ||||
23255 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23256 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithUTF8String", 1)) { | |||
23257 | return false; | |||
23258 | } | |||
23259 | UTF8StringOrLong arg0; | |||
23260 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23261 | return false; | |||
23262 | } | |||
23263 | // NOTE: This assert does NOT call the function. | |||
23264 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithUTF8String(Constify(arg0)))>, "Should be returning void here"); | |||
23265 | MOZ_KnownLive(self)(self)->PassUnionWithUTF8String(Constify(arg0)); | |||
23266 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23266); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23266; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23267 | args.rval().setUndefined(); | |||
23268 | return true; | |||
23269 | } | |||
23270 | ||||
23271 | static const JSJitInfo passUnionWithUTF8String_methodinfo = { | |||
23272 | { (JSJitGetterOp)passUnionWithUTF8String }, | |||
23273 | { prototypes::id::TestExampleInterface }, | |||
23274 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23275 | JSJitInfo::Method, | |||
23276 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23277 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23278 | false, /* isInfallible. False in setters. */ | |||
23279 | false, /* isMovable. Not relevant for setters. */ | |||
23280 | false, /* isEliminatable. Not relevant for setters. */ | |||
23281 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23282 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23283 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23284 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23285 | }; | |||
23286 | ||||
23287 | MOZ_CAN_RUN_SCRIPT static bool | |||
23288 | passUnionWithRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23289 | { | |||
23290 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithRecord"); | |||
23291 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23294( cx, "TestExampleInterface" , "passUnionWithRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23292 | "TestExampleInterface", "passUnionWithRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23294( cx, "TestExampleInterface" , "passUnionWithRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23293 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23294( cx, "TestExampleInterface" , "passUnionWithRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23294 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23294( cx, "TestExampleInterface" , "passUnionWithRecord", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23295 | ||||
23296 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23297 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithRecord", 1)) { | |||
23298 | return false; | |||
23299 | } | |||
23300 | StringStringRecordOrString arg0; | |||
23301 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23302 | return false; | |||
23303 | } | |||
23304 | // NOTE: This assert does NOT call the function. | |||
23305 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithRecord(Constify(arg0)))>, "Should be returning void here"); | |||
23306 | MOZ_KnownLive(self)(self)->PassUnionWithRecord(Constify(arg0)); | |||
23307 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23307); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23307; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23308 | args.rval().setUndefined(); | |||
23309 | return true; | |||
23310 | } | |||
23311 | ||||
23312 | static const JSJitInfo passUnionWithRecord_methodinfo = { | |||
23313 | { (JSJitGetterOp)passUnionWithRecord }, | |||
23314 | { prototypes::id::TestExampleInterface }, | |||
23315 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23316 | JSJitInfo::Method, | |||
23317 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23318 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23319 | false, /* isInfallible. False in setters. */ | |||
23320 | false, /* isMovable. Not relevant for setters. */ | |||
23321 | false, /* isEliminatable. Not relevant for setters. */ | |||
23322 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23323 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23324 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23325 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23326 | }; | |||
23327 | ||||
23328 | MOZ_CAN_RUN_SCRIPT static bool | |||
23329 | passUnionWithRecordAndSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23330 | { | |||
23331 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithRecordAndSequence"); | |||
23332 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23335( cx, "TestExampleInterface" , "passUnionWithRecordAndSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23333 | "TestExampleInterface", "passUnionWithRecordAndSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23335( cx, "TestExampleInterface" , "passUnionWithRecordAndSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23334 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23335( cx, "TestExampleInterface" , "passUnionWithRecordAndSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23335 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23335( cx, "TestExampleInterface" , "passUnionWithRecordAndSequence", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23336 | ||||
23337 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23338 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithRecordAndSequence", 1)) { | |||
23339 | return false; | |||
23340 | } | |||
23341 | StringStringRecordOrStringSequence arg0; | |||
23342 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23343 | return false; | |||
23344 | } | |||
23345 | // NOTE: This assert does NOT call the function. | |||
23346 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithRecordAndSequence(Constify(arg0)))>, "Should be returning void here"); | |||
23347 | MOZ_KnownLive(self)(self)->PassUnionWithRecordAndSequence(Constify(arg0)); | |||
23348 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23348); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23348; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23349 | args.rval().setUndefined(); | |||
23350 | return true; | |||
23351 | } | |||
23352 | ||||
23353 | static const JSJitInfo passUnionWithRecordAndSequence_methodinfo = { | |||
23354 | { (JSJitGetterOp)passUnionWithRecordAndSequence }, | |||
23355 | { prototypes::id::TestExampleInterface }, | |||
23356 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23357 | JSJitInfo::Method, | |||
23358 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23359 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23360 | false, /* isInfallible. False in setters. */ | |||
23361 | false, /* isMovable. Not relevant for setters. */ | |||
23362 | false, /* isEliminatable. Not relevant for setters. */ | |||
23363 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23364 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23365 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23366 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23367 | }; | |||
23368 | ||||
23369 | MOZ_CAN_RUN_SCRIPT static bool | |||
23370 | passUnionWithSequenceAndRecord(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23371 | { | |||
23372 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithSequenceAndRecord"); | |||
23373 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23376( cx, "TestExampleInterface" , "passUnionWithSequenceAndRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23374 | "TestExampleInterface", "passUnionWithSequenceAndRecord", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23376( cx, "TestExampleInterface" , "passUnionWithSequenceAndRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23375 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23376( cx, "TestExampleInterface" , "passUnionWithSequenceAndRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23376 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23376( cx, "TestExampleInterface" , "passUnionWithSequenceAndRecord", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23377 | ||||
23378 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23379 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithSequenceAndRecord", 1)) { | |||
23380 | return false; | |||
23381 | } | |||
23382 | StringSequenceOrStringStringRecord arg0; | |||
23383 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23384 | return false; | |||
23385 | } | |||
23386 | // NOTE: This assert does NOT call the function. | |||
23387 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithSequenceAndRecord(Constify(arg0)))>, "Should be returning void here"); | |||
23388 | MOZ_KnownLive(self)(self)->PassUnionWithSequenceAndRecord(Constify(arg0)); | |||
23389 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23389); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23389; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23390 | args.rval().setUndefined(); | |||
23391 | return true; | |||
23392 | } | |||
23393 | ||||
23394 | static const JSJitInfo passUnionWithSequenceAndRecord_methodinfo = { | |||
23395 | { (JSJitGetterOp)passUnionWithSequenceAndRecord }, | |||
23396 | { prototypes::id::TestExampleInterface }, | |||
23397 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23398 | JSJitInfo::Method, | |||
23399 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23400 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23401 | false, /* isInfallible. False in setters. */ | |||
23402 | false, /* isMovable. Not relevant for setters. */ | |||
23403 | false, /* isEliminatable. Not relevant for setters. */ | |||
23404 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23405 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23406 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23407 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23408 | }; | |||
23409 | ||||
23410 | MOZ_CAN_RUN_SCRIPT static bool | |||
23411 | passUnionWithSVS(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23412 | { | |||
23413 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithSVS"); | |||
23414 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23417( cx, "TestExampleInterface" , "passUnionWithSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23415 | "TestExampleInterface", "passUnionWithSVS", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23417( cx, "TestExampleInterface" , "passUnionWithSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23416 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23417( cx, "TestExampleInterface" , "passUnionWithSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23417 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23417( cx, "TestExampleInterface" , "passUnionWithSVS", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23418 | ||||
23419 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23420 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithSVS", 1)) { | |||
23421 | return false; | |||
23422 | } | |||
23423 | USVStringOrLong arg0; | |||
23424 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23425 | return false; | |||
23426 | } | |||
23427 | // NOTE: This assert does NOT call the function. | |||
23428 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithSVS(Constify(arg0)))>, "Should be returning void here"); | |||
23429 | MOZ_KnownLive(self)(self)->PassUnionWithSVS(Constify(arg0)); | |||
23430 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23430); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23430; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23431 | args.rval().setUndefined(); | |||
23432 | return true; | |||
23433 | } | |||
23434 | ||||
23435 | static const JSJitInfo passUnionWithSVS_methodinfo = { | |||
23436 | { (JSJitGetterOp)passUnionWithSVS }, | |||
23437 | { prototypes::id::TestExampleInterface }, | |||
23438 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23439 | JSJitInfo::Method, | |||
23440 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23441 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23442 | false, /* isInfallible. False in setters. */ | |||
23443 | false, /* isMovable. Not relevant for setters. */ | |||
23444 | false, /* isEliminatable. Not relevant for setters. */ | |||
23445 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23446 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23447 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23448 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23449 | }; | |||
23450 | ||||
23451 | MOZ_CAN_RUN_SCRIPT static bool | |||
23452 | passUnionWithNullable(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23453 | { | |||
23454 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithNullable"); | |||
23455 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23458( cx, "TestExampleInterface" , "passUnionWithNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23456 | "TestExampleInterface", "passUnionWithNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23458( cx, "TestExampleInterface" , "passUnionWithNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23457 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23458( cx, "TestExampleInterface" , "passUnionWithNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23458 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23458( cx, "TestExampleInterface" , "passUnionWithNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23459 | ||||
23460 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23461 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithNullable", 1)) { | |||
23462 | return false; | |||
23463 | } | |||
23464 | ObjectOrNullOrLong arg0; | |||
23465 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23466 | return false; | |||
23467 | } | |||
23468 | // NOTE: This assert does NOT call the function. | |||
23469 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithNullable(cx, Constify(arg0)))>, "Should be returning void here"); | |||
23470 | MOZ_KnownLive(self)(self)->PassUnionWithNullable(cx, Constify(arg0)); | |||
23471 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23471); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23471; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23472 | args.rval().setUndefined(); | |||
23473 | return true; | |||
23474 | } | |||
23475 | ||||
23476 | static const JSJitInfo passUnionWithNullable_methodinfo = { | |||
23477 | { (JSJitGetterOp)passUnionWithNullable }, | |||
23478 | { prototypes::id::TestExampleInterface }, | |||
23479 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23480 | JSJitInfo::Method, | |||
23481 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23482 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23483 | false, /* isInfallible. False in setters. */ | |||
23484 | false, /* isMovable. Not relevant for setters. */ | |||
23485 | false, /* isEliminatable. Not relevant for setters. */ | |||
23486 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23487 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23488 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23489 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23490 | }; | |||
23491 | ||||
23492 | MOZ_CAN_RUN_SCRIPT static bool | |||
23493 | passNullableUnion(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23494 | { | |||
23495 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnion"); | |||
23496 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23499( cx, "TestExampleInterface" , "passNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23497 | "TestExampleInterface", "passNullableUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23499( cx, "TestExampleInterface" , "passNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23498 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23499( cx, "TestExampleInterface" , "passNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23499 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23499( cx, "TestExampleInterface" , "passNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23500 | ||||
23501 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23502 | if (!args.requireAtLeast(cx, "TestExampleInterface.passNullableUnion", 1)) { | |||
23503 | return false; | |||
23504 | } | |||
23505 | Nullable<ObjectOrLong > arg0; | |||
23506 | if (args[0].isNullOrUndefined()) { | |||
23507 | arg0.SetNull(); | |||
23508 | } else { | |||
23509 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
23510 | return false; | |||
23511 | } | |||
23512 | } | |||
23513 | // NOTE: This assert does NOT call the function. | |||
23514 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnion(cx, Constify(arg0)))>, "Should be returning void here"); | |||
23515 | MOZ_KnownLive(self)(self)->PassNullableUnion(cx, Constify(arg0)); | |||
23516 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23516); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23516; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23517 | args.rval().setUndefined(); | |||
23518 | return true; | |||
23519 | } | |||
23520 | ||||
23521 | static const JSJitInfo passNullableUnion_methodinfo = { | |||
23522 | { (JSJitGetterOp)passNullableUnion }, | |||
23523 | { prototypes::id::TestExampleInterface }, | |||
23524 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23525 | JSJitInfo::Method, | |||
23526 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23527 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23528 | false, /* isInfallible. False in setters. */ | |||
23529 | false, /* isMovable. Not relevant for setters. */ | |||
23530 | false, /* isEliminatable. Not relevant for setters. */ | |||
23531 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23532 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23533 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23534 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23535 | }; | |||
23536 | ||||
23537 | MOZ_CAN_RUN_SCRIPT static bool | |||
23538 | passOptionalUnion(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23539 | { | |||
23540 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalUnion"); | |||
23541 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23544( cx, "TestExampleInterface" , "passOptionalUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23542 | "TestExampleInterface", "passOptionalUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23544( cx, "TestExampleInterface" , "passOptionalUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23543 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23544( cx, "TestExampleInterface" , "passOptionalUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23544 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23544( cx, "TestExampleInterface" , "passOptionalUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23545 | ||||
23546 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23547 | Optional<ObjectOrLong> arg0; | |||
23548 | if (args.hasDefined(0)) { | |||
23549 | arg0.Construct(); | |||
23550 | if (!arg0.Value().Init(cx, args[0], "Argument 1", false)) { | |||
23551 | return false; | |||
23552 | } | |||
23553 | } | |||
23554 | // NOTE: This assert does NOT call the function. | |||
23555 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalUnion(cx, Constify(arg0)))>, "Should be returning void here"); | |||
23556 | MOZ_KnownLive(self)(self)->PassOptionalUnion(cx, Constify(arg0)); | |||
23557 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23557); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23557; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23558 | args.rval().setUndefined(); | |||
23559 | return true; | |||
23560 | } | |||
23561 | ||||
23562 | static const JSJitInfo passOptionalUnion_methodinfo = { | |||
23563 | { (JSJitGetterOp)passOptionalUnion }, | |||
23564 | { prototypes::id::TestExampleInterface }, | |||
23565 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23566 | JSJitInfo::Method, | |||
23567 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23568 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23569 | false, /* isInfallible. False in setters. */ | |||
23570 | false, /* isMovable. Not relevant for setters. */ | |||
23571 | false, /* isEliminatable. Not relevant for setters. */ | |||
23572 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23573 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23574 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23575 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23576 | }; | |||
23577 | ||||
23578 | MOZ_CAN_RUN_SCRIPT static bool | |||
23579 | passOptionalNullableUnion(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23580 | { | |||
23581 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableUnion"); | |||
23582 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23585( cx, "TestExampleInterface" , "passOptionalNullableUnion", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23583 | "TestExampleInterface", "passOptionalNullableUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23585( cx, "TestExampleInterface" , "passOptionalNullableUnion", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23584 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23585( cx, "TestExampleInterface" , "passOptionalNullableUnion", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23585 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23585( cx, "TestExampleInterface" , "passOptionalNullableUnion", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23586 | ||||
23587 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23588 | Optional<Nullable<ObjectOrLong >> arg0; | |||
23589 | if (args.hasDefined(0)) { | |||
23590 | arg0.Construct(); | |||
23591 | if (args[0].isNullOrUndefined()) { | |||
23592 | arg0.Value().SetNull(); | |||
23593 | } else { | |||
23594 | if (!arg0.Value().SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
23595 | return false; | |||
23596 | } | |||
23597 | } | |||
23598 | } | |||
23599 | // NOTE: This assert does NOT call the function. | |||
23600 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableUnion(cx, Constify(arg0)))>, "Should be returning void here"); | |||
23601 | MOZ_KnownLive(self)(self)->PassOptionalNullableUnion(cx, Constify(arg0)); | |||
23602 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23602); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23602; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23603 | args.rval().setUndefined(); | |||
23604 | return true; | |||
23605 | } | |||
23606 | ||||
23607 | static const JSJitInfo passOptionalNullableUnion_methodinfo = { | |||
23608 | { (JSJitGetterOp)passOptionalNullableUnion }, | |||
23609 | { prototypes::id::TestExampleInterface }, | |||
23610 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23611 | JSJitInfo::Method, | |||
23612 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23613 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23614 | false, /* isInfallible. False in setters. */ | |||
23615 | false, /* isMovable. Not relevant for setters. */ | |||
23616 | false, /* isEliminatable. Not relevant for setters. */ | |||
23617 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23618 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23619 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23620 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23621 | }; | |||
23622 | ||||
23623 | MOZ_CAN_RUN_SCRIPT static bool | |||
23624 | passOptionalNullableUnionWithDefaultValue(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23625 | { | |||
23626 | BindingCallContext cx(cx_, "TestExampleInterface.passOptionalNullableUnionWithDefaultValue"); | |||
23627 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23630( cx, "TestExampleInterface" , "passOptionalNullableUnionWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23628 | "TestExampleInterface", "passOptionalNullableUnionWithDefaultValue", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23630( cx, "TestExampleInterface" , "passOptionalNullableUnionWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23629 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23630( cx, "TestExampleInterface" , "passOptionalNullableUnionWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23630 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23630( cx, "TestExampleInterface" , "passOptionalNullableUnionWithDefaultValue", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23631 | ||||
23632 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23633 | Nullable<ObjectOrLong > arg0; | |||
23634 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
23635 | arg0.SetNull(); | |||
23636 | } else { | |||
23637 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
23638 | return false; | |||
23639 | } | |||
23640 | } | |||
23641 | // NOTE: This assert does NOT call the function. | |||
23642 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalNullableUnionWithDefaultValue(cx, Constify(arg0)))>, "Should be returning void here"); | |||
23643 | MOZ_KnownLive(self)(self)->PassOptionalNullableUnionWithDefaultValue(cx, Constify(arg0)); | |||
23644 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23644); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23644; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23645 | args.rval().setUndefined(); | |||
23646 | return true; | |||
23647 | } | |||
23648 | ||||
23649 | static const JSJitInfo passOptionalNullableUnionWithDefaultValue_methodinfo = { | |||
23650 | { (JSJitGetterOp)passOptionalNullableUnionWithDefaultValue }, | |||
23651 | { prototypes::id::TestExampleInterface }, | |||
23652 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23653 | JSJitInfo::Method, | |||
23654 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23655 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23656 | false, /* isInfallible. False in setters. */ | |||
23657 | false, /* isMovable. Not relevant for setters. */ | |||
23658 | false, /* isEliminatable. Not relevant for setters. */ | |||
23659 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23660 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23661 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23662 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23663 | }; | |||
23664 | ||||
23665 | MOZ_CAN_RUN_SCRIPT static bool | |||
23666 | passUnionWithArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23667 | { | |||
23668 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithArrayBuffer"); | |||
23669 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23672( cx, "TestExampleInterface" , "passUnionWithArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23670 | "TestExampleInterface", "passUnionWithArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23672( cx, "TestExampleInterface" , "passUnionWithArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23671 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23672( cx, "TestExampleInterface" , "passUnionWithArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23672 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23672( cx, "TestExampleInterface" , "passUnionWithArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23673 | ||||
23674 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23675 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithArrayBuffer", 1)) { | |||
23676 | return false; | |||
23677 | } | |||
23678 | UTF8StringOrArrayBuffer arg0; | |||
23679 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23680 | return false; | |||
23681 | } | |||
23682 | // NOTE: This assert does NOT call the function. | |||
23683 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
23684 | MOZ_KnownLive(self)(self)->PassUnionWithArrayBuffer(Constify(arg0)); | |||
23685 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23685); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23685; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23686 | args.rval().setUndefined(); | |||
23687 | return true; | |||
23688 | } | |||
23689 | ||||
23690 | static const JSJitInfo passUnionWithArrayBuffer_methodinfo = { | |||
23691 | { (JSJitGetterOp)passUnionWithArrayBuffer }, | |||
23692 | { prototypes::id::TestExampleInterface }, | |||
23693 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23694 | JSJitInfo::Method, | |||
23695 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23696 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23697 | false, /* isInfallible. False in setters. */ | |||
23698 | false, /* isMovable. Not relevant for setters. */ | |||
23699 | false, /* isEliminatable. Not relevant for setters. */ | |||
23700 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23701 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23702 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23703 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23704 | }; | |||
23705 | ||||
23706 | MOZ_CAN_RUN_SCRIPT static bool | |||
23707 | passUnionWithArrayBufferOrNull(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23708 | { | |||
23709 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithArrayBufferOrNull"); | |||
23710 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23713( cx, "TestExampleInterface" , "passUnionWithArrayBufferOrNull", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23711 | "TestExampleInterface", "passUnionWithArrayBufferOrNull", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23713( cx, "TestExampleInterface" , "passUnionWithArrayBufferOrNull", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23712 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23713( cx, "TestExampleInterface" , "passUnionWithArrayBufferOrNull", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23713 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23713( cx, "TestExampleInterface" , "passUnionWithArrayBufferOrNull", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23714 | ||||
23715 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23716 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithArrayBufferOrNull", 1)) { | |||
23717 | return false; | |||
23718 | } | |||
23719 | UTF8StringOrArrayBufferOrNull arg0; | |||
23720 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23721 | return false; | |||
23722 | } | |||
23723 | // NOTE: This assert does NOT call the function. | |||
23724 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithArrayBufferOrNull(Constify(arg0)))>, "Should be returning void here"); | |||
23725 | MOZ_KnownLive(self)(self)->PassUnionWithArrayBufferOrNull(Constify(arg0)); | |||
23726 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23726); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23726; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23727 | args.rval().setUndefined(); | |||
23728 | return true; | |||
23729 | } | |||
23730 | ||||
23731 | static const JSJitInfo passUnionWithArrayBufferOrNull_methodinfo = { | |||
23732 | { (JSJitGetterOp)passUnionWithArrayBufferOrNull }, | |||
23733 | { prototypes::id::TestExampleInterface }, | |||
23734 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23735 | JSJitInfo::Method, | |||
23736 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23737 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23738 | false, /* isInfallible. False in setters. */ | |||
23739 | false, /* isMovable. Not relevant for setters. */ | |||
23740 | false, /* isEliminatable. Not relevant for setters. */ | |||
23741 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23742 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23743 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23744 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23745 | }; | |||
23746 | ||||
23747 | MOZ_CAN_RUN_SCRIPT static bool | |||
23748 | passUnionWithTypedArrays(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23749 | { | |||
23750 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithTypedArrays"); | |||
23751 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23754( cx, "TestExampleInterface" , "passUnionWithTypedArrays", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23752 | "TestExampleInterface", "passUnionWithTypedArrays", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23754( cx, "TestExampleInterface" , "passUnionWithTypedArrays", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23753 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23754( cx, "TestExampleInterface" , "passUnionWithTypedArrays", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23754 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23754( cx, "TestExampleInterface" , "passUnionWithTypedArrays", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23755 | ||||
23756 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23757 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithTypedArrays", 1)) { | |||
23758 | return false; | |||
23759 | } | |||
23760 | ArrayBufferViewOrArrayBuffer arg0; | |||
23761 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23762 | return false; | |||
23763 | } | |||
23764 | // NOTE: This assert does NOT call the function. | |||
23765 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithTypedArrays(Constify(arg0)))>, "Should be returning void here"); | |||
23766 | MOZ_KnownLive(self)(self)->PassUnionWithTypedArrays(Constify(arg0)); | |||
23767 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23767); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23767; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23768 | args.rval().setUndefined(); | |||
23769 | return true; | |||
23770 | } | |||
23771 | ||||
23772 | static const JSJitInfo passUnionWithTypedArrays_methodinfo = { | |||
23773 | { (JSJitGetterOp)passUnionWithTypedArrays }, | |||
23774 | { prototypes::id::TestExampleInterface }, | |||
23775 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23776 | JSJitInfo::Method, | |||
23777 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23778 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23779 | false, /* isInfallible. False in setters. */ | |||
23780 | false, /* isMovable. Not relevant for setters. */ | |||
23781 | false, /* isEliminatable. Not relevant for setters. */ | |||
23782 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23783 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23784 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23785 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23786 | }; | |||
23787 | ||||
23788 | MOZ_CAN_RUN_SCRIPT static bool | |||
23789 | passUnionWithTypedArraysOrNull(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23790 | { | |||
23791 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithTypedArraysOrNull"); | |||
23792 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23795( cx, "TestExampleInterface" , "passUnionWithTypedArraysOrNull", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23793 | "TestExampleInterface", "passUnionWithTypedArraysOrNull", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23795( cx, "TestExampleInterface" , "passUnionWithTypedArraysOrNull", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23794 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23795( cx, "TestExampleInterface" , "passUnionWithTypedArraysOrNull", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23795 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23795( cx, "TestExampleInterface" , "passUnionWithTypedArraysOrNull", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23796 | ||||
23797 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23798 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithTypedArraysOrNull", 1)) { | |||
23799 | return false; | |||
23800 | } | |||
23801 | ArrayBufferViewOrArrayBufferOrNull arg0; | |||
23802 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23803 | return false; | |||
23804 | } | |||
23805 | // NOTE: This assert does NOT call the function. | |||
23806 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithTypedArraysOrNull(Constify(arg0)))>, "Should be returning void here"); | |||
23807 | MOZ_KnownLive(self)(self)->PassUnionWithTypedArraysOrNull(Constify(arg0)); | |||
23808 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23808); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23808; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23809 | args.rval().setUndefined(); | |||
23810 | return true; | |||
23811 | } | |||
23812 | ||||
23813 | static const JSJitInfo passUnionWithTypedArraysOrNull_methodinfo = { | |||
23814 | { (JSJitGetterOp)passUnionWithTypedArraysOrNull }, | |||
23815 | { prototypes::id::TestExampleInterface }, | |||
23816 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23817 | JSJitInfo::Method, | |||
23818 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23819 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23820 | false, /* isInfallible. False in setters. */ | |||
23821 | false, /* isMovable. Not relevant for setters. */ | |||
23822 | false, /* isEliminatable. Not relevant for setters. */ | |||
23823 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23824 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23825 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23826 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23827 | }; | |||
23828 | ||||
23829 | MOZ_CAN_RUN_SCRIPT static bool | |||
23830 | passUnionWithString(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23831 | { | |||
23832 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithString"); | |||
23833 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23836( cx, "TestExampleInterface" , "passUnionWithString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23834 | "TestExampleInterface", "passUnionWithString", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23836( cx, "TestExampleInterface" , "passUnionWithString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23835 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23836( cx, "TestExampleInterface" , "passUnionWithString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23836 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23836( cx, "TestExampleInterface" , "passUnionWithString", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23837 | ||||
23838 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23839 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithString", 1)) { | |||
23840 | return false; | |||
23841 | } | |||
23842 | StringOrObject arg0; | |||
23843 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23844 | return false; | |||
23845 | } | |||
23846 | // NOTE: This assert does NOT call the function. | |||
23847 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithString(cx, Constify(arg0)))>, "Should be returning void here"); | |||
23848 | MOZ_KnownLive(self)(self)->PassUnionWithString(cx, Constify(arg0)); | |||
23849 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23849); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23849; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23850 | args.rval().setUndefined(); | |||
23851 | return true; | |||
23852 | } | |||
23853 | ||||
23854 | static const JSJitInfo passUnionWithString_methodinfo = { | |||
23855 | { (JSJitGetterOp)passUnionWithString }, | |||
23856 | { prototypes::id::TestExampleInterface }, | |||
23857 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23858 | JSJitInfo::Method, | |||
23859 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23860 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23861 | false, /* isInfallible. False in setters. */ | |||
23862 | false, /* isMovable. Not relevant for setters. */ | |||
23863 | false, /* isEliminatable. Not relevant for setters. */ | |||
23864 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23865 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23866 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23867 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23868 | }; | |||
23869 | ||||
23870 | MOZ_CAN_RUN_SCRIPT static bool | |||
23871 | passUnionWithEnum(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23872 | { | |||
23873 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithEnum"); | |||
23874 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23877( cx, "TestExampleInterface" , "passUnionWithEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23875 | "TestExampleInterface", "passUnionWithEnum", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23877( cx, "TestExampleInterface" , "passUnionWithEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23876 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23877( cx, "TestExampleInterface" , "passUnionWithEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23877 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23877( cx, "TestExampleInterface" , "passUnionWithEnum", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23878 | ||||
23879 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23880 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithEnum", 1)) { | |||
23881 | return false; | |||
23882 | } | |||
23883 | SupportedTypeOrObject arg0; | |||
23884 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23885 | return false; | |||
23886 | } | |||
23887 | // NOTE: This assert does NOT call the function. | |||
23888 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithEnum(cx, Constify(arg0)))>, "Should be returning void here"); | |||
23889 | MOZ_KnownLive(self)(self)->PassUnionWithEnum(cx, Constify(arg0)); | |||
23890 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23890); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23890; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23891 | args.rval().setUndefined(); | |||
23892 | return true; | |||
23893 | } | |||
23894 | ||||
23895 | static const JSJitInfo passUnionWithEnum_methodinfo = { | |||
23896 | { (JSJitGetterOp)passUnionWithEnum }, | |||
23897 | { prototypes::id::TestExampleInterface }, | |||
23898 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23899 | JSJitInfo::Method, | |||
23900 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23901 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23902 | false, /* isInfallible. False in setters. */ | |||
23903 | false, /* isMovable. Not relevant for setters. */ | |||
23904 | false, /* isEliminatable. Not relevant for setters. */ | |||
23905 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23906 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23907 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23908 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23909 | }; | |||
23910 | ||||
23911 | MOZ_CAN_RUN_SCRIPT static bool | |||
23912 | passUnionWithObject(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23913 | { | |||
23914 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithObject"); | |||
23915 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23918( cx, "TestExampleInterface" , "passUnionWithObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23916 | "TestExampleInterface", "passUnionWithObject", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23918( cx, "TestExampleInterface" , "passUnionWithObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23917 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23918( cx, "TestExampleInterface" , "passUnionWithObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
23918 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23918( cx, "TestExampleInterface" , "passUnionWithObject", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
23919 | ||||
23920 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23921 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionWithObject", 1)) { | |||
23922 | return false; | |||
23923 | } | |||
23924 | ObjectOrLong arg0; | |||
23925 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23926 | return false; | |||
23927 | } | |||
23928 | // NOTE: This assert does NOT call the function. | |||
23929 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithObject(cx, Constify(arg0)))>, "Should be returning void here"); | |||
23930 | MOZ_KnownLive(self)(self)->PassUnionWithObject(cx, Constify(arg0)); | |||
23931 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23931); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23931; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23932 | args.rval().setUndefined(); | |||
23933 | return true; | |||
23934 | } | |||
23935 | ||||
23936 | static const JSJitInfo passUnionWithObject_methodinfo = { | |||
23937 | { (JSJitGetterOp)passUnionWithObject }, | |||
23938 | { prototypes::id::TestExampleInterface }, | |||
23939 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23940 | JSJitInfo::Method, | |||
23941 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23942 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23943 | false, /* isInfallible. False in setters. */ | |||
23944 | false, /* isMovable. Not relevant for setters. */ | |||
23945 | false, /* isEliminatable. Not relevant for setters. */ | |||
23946 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23947 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23948 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23949 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23950 | }; | |||
23951 | ||||
23952 | MOZ_CAN_RUN_SCRIPT static bool | |||
23953 | passUnionWithDefaultValue1(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23954 | { | |||
23955 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue1"); | |||
23956 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject23959( cx, "TestExampleInterface" , "passUnionWithDefaultValue1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23957 | "TestExampleInterface", "passUnionWithDefaultValue1", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject23959( cx, "TestExampleInterface" , "passUnionWithDefaultValue1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23958 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject23959( cx, "TestExampleInterface" , "passUnionWithDefaultValue1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23959 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject23959( cx, "TestExampleInterface" , "passUnionWithDefaultValue1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
23960 | ||||
23961 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
23962 | DoubleOrString arg0; | |||
23963 | if (!(args.hasDefined(0))) { | |||
23964 | arg0.SetStringLiteral(u""); | |||
23965 | } else { | |||
23966 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
23967 | return false; | |||
23968 | } | |||
23969 | } | |||
23970 | // NOTE: This assert does NOT call the function. | |||
23971 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue1(Constify(arg0)))>, "Should be returning void here"); | |||
23972 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue1(Constify(arg0)); | |||
23973 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 23973); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 23973; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
23974 | args.rval().setUndefined(); | |||
23975 | return true; | |||
23976 | } | |||
23977 | ||||
23978 | static const JSJitInfo passUnionWithDefaultValue1_methodinfo = { | |||
23979 | { (JSJitGetterOp)passUnionWithDefaultValue1 }, | |||
23980 | { prototypes::id::TestExampleInterface }, | |||
23981 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
23982 | JSJitInfo::Method, | |||
23983 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
23984 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
23985 | false, /* isInfallible. False in setters. */ | |||
23986 | false, /* isMovable. Not relevant for setters. */ | |||
23987 | false, /* isEliminatable. Not relevant for setters. */ | |||
23988 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
23989 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
23990 | false, /* isTypedMethod. Only relevant for methods. */ | |||
23991 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
23992 | }; | |||
23993 | ||||
23994 | MOZ_CAN_RUN_SCRIPT static bool | |||
23995 | passUnionWithDefaultValue2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
23996 | { | |||
23997 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue2"); | |||
23998 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24001( cx, "TestExampleInterface" , "passUnionWithDefaultValue2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
23999 | "TestExampleInterface", "passUnionWithDefaultValue2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24001( cx, "TestExampleInterface" , "passUnionWithDefaultValue2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24000 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24001( cx, "TestExampleInterface" , "passUnionWithDefaultValue2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24001 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24001( cx, "TestExampleInterface" , "passUnionWithDefaultValue2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24002 | ||||
24003 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24004 | DoubleOrString arg0; | |||
24005 | if (!(args.hasDefined(0))) { | |||
24006 | arg0.RawSetAsDouble() = 1.0; | |||
24007 | } else { | |||
24008 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24009 | return false; | |||
24010 | } | |||
24011 | } | |||
24012 | // NOTE: This assert does NOT call the function. | |||
24013 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue2(Constify(arg0)))>, "Should be returning void here"); | |||
24014 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue2(Constify(arg0)); | |||
24015 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24015); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24015; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24016 | args.rval().setUndefined(); | |||
24017 | return true; | |||
24018 | } | |||
24019 | ||||
24020 | static const JSJitInfo passUnionWithDefaultValue2_methodinfo = { | |||
24021 | { (JSJitGetterOp)passUnionWithDefaultValue2 }, | |||
24022 | { prototypes::id::TestExampleInterface }, | |||
24023 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24024 | JSJitInfo::Method, | |||
24025 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24026 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24027 | false, /* isInfallible. False in setters. */ | |||
24028 | false, /* isMovable. Not relevant for setters. */ | |||
24029 | false, /* isEliminatable. Not relevant for setters. */ | |||
24030 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24031 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24032 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24033 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24034 | }; | |||
24035 | ||||
24036 | MOZ_CAN_RUN_SCRIPT static bool | |||
24037 | passUnionWithDefaultValue3(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24038 | { | |||
24039 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue3"); | |||
24040 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24043( cx, "TestExampleInterface" , "passUnionWithDefaultValue3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24041 | "TestExampleInterface", "passUnionWithDefaultValue3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24043( cx, "TestExampleInterface" , "passUnionWithDefaultValue3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24042 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24043( cx, "TestExampleInterface" , "passUnionWithDefaultValue3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24043 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24043( cx, "TestExampleInterface" , "passUnionWithDefaultValue3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24044 | ||||
24045 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24046 | DoubleOrString arg0; | |||
24047 | if (!(args.hasDefined(0))) { | |||
24048 | arg0.RawSetAsDouble() = 1.5; | |||
24049 | } else { | |||
24050 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24051 | return false; | |||
24052 | } | |||
24053 | } | |||
24054 | // NOTE: This assert does NOT call the function. | |||
24055 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue3(Constify(arg0)))>, "Should be returning void here"); | |||
24056 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue3(Constify(arg0)); | |||
24057 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24057); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24057; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24058 | args.rval().setUndefined(); | |||
24059 | return true; | |||
24060 | } | |||
24061 | ||||
24062 | static const JSJitInfo passUnionWithDefaultValue3_methodinfo = { | |||
24063 | { (JSJitGetterOp)passUnionWithDefaultValue3 }, | |||
24064 | { prototypes::id::TestExampleInterface }, | |||
24065 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24066 | JSJitInfo::Method, | |||
24067 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24068 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24069 | false, /* isInfallible. False in setters. */ | |||
24070 | false, /* isMovable. Not relevant for setters. */ | |||
24071 | false, /* isEliminatable. Not relevant for setters. */ | |||
24072 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24073 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24074 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24075 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24076 | }; | |||
24077 | ||||
24078 | MOZ_CAN_RUN_SCRIPT static bool | |||
24079 | passUnionWithDefaultValue4(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24080 | { | |||
24081 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue4"); | |||
24082 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24085( cx, "TestExampleInterface" , "passUnionWithDefaultValue4", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24083 | "TestExampleInterface", "passUnionWithDefaultValue4", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24085( cx, "TestExampleInterface" , "passUnionWithDefaultValue4", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24084 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24085( cx, "TestExampleInterface" , "passUnionWithDefaultValue4", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24085 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24085( cx, "TestExampleInterface" , "passUnionWithDefaultValue4", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24086 | ||||
24087 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24088 | FloatOrString arg0; | |||
24089 | if (!(args.hasDefined(0))) { | |||
24090 | arg0.SetStringLiteral(u""); | |||
24091 | } else { | |||
24092 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24093 | return false; | |||
24094 | } | |||
24095 | } | |||
24096 | // NOTE: This assert does NOT call the function. | |||
24097 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue4(Constify(arg0)))>, "Should be returning void here"); | |||
24098 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue4(Constify(arg0)); | |||
24099 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24099); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24099; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24100 | args.rval().setUndefined(); | |||
24101 | return true; | |||
24102 | } | |||
24103 | ||||
24104 | static const JSJitInfo passUnionWithDefaultValue4_methodinfo = { | |||
24105 | { (JSJitGetterOp)passUnionWithDefaultValue4 }, | |||
24106 | { prototypes::id::TestExampleInterface }, | |||
24107 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24108 | JSJitInfo::Method, | |||
24109 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24110 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24111 | false, /* isInfallible. False in setters. */ | |||
24112 | false, /* isMovable. Not relevant for setters. */ | |||
24113 | false, /* isEliminatable. Not relevant for setters. */ | |||
24114 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24115 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24116 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24117 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24118 | }; | |||
24119 | ||||
24120 | MOZ_CAN_RUN_SCRIPT static bool | |||
24121 | passUnionWithDefaultValue5(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24122 | { | |||
24123 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue5"); | |||
24124 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24127( cx, "TestExampleInterface" , "passUnionWithDefaultValue5", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24125 | "TestExampleInterface", "passUnionWithDefaultValue5", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24127( cx, "TestExampleInterface" , "passUnionWithDefaultValue5", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24126 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24127( cx, "TestExampleInterface" , "passUnionWithDefaultValue5", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24127 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24127( cx, "TestExampleInterface" , "passUnionWithDefaultValue5", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24128 | ||||
24129 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24130 | FloatOrString arg0; | |||
24131 | if (!(args.hasDefined(0))) { | |||
24132 | arg0.RawSetAsFloat() = 1.0F; | |||
24133 | } else { | |||
24134 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24135 | return false; | |||
24136 | } | |||
24137 | } | |||
24138 | // NOTE: This assert does NOT call the function. | |||
24139 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue5(Constify(arg0)))>, "Should be returning void here"); | |||
24140 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue5(Constify(arg0)); | |||
24141 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24141); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24141; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24142 | args.rval().setUndefined(); | |||
24143 | return true; | |||
24144 | } | |||
24145 | ||||
24146 | static const JSJitInfo passUnionWithDefaultValue5_methodinfo = { | |||
24147 | { (JSJitGetterOp)passUnionWithDefaultValue5 }, | |||
24148 | { prototypes::id::TestExampleInterface }, | |||
24149 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24150 | JSJitInfo::Method, | |||
24151 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24152 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24153 | false, /* isInfallible. False in setters. */ | |||
24154 | false, /* isMovable. Not relevant for setters. */ | |||
24155 | false, /* isEliminatable. Not relevant for setters. */ | |||
24156 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24157 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24158 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24159 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24160 | }; | |||
24161 | ||||
24162 | MOZ_CAN_RUN_SCRIPT static bool | |||
24163 | passUnionWithDefaultValue6(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24164 | { | |||
24165 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue6"); | |||
24166 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24169( cx, "TestExampleInterface" , "passUnionWithDefaultValue6", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24167 | "TestExampleInterface", "passUnionWithDefaultValue6", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24169( cx, "TestExampleInterface" , "passUnionWithDefaultValue6", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24168 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24169( cx, "TestExampleInterface" , "passUnionWithDefaultValue6", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24169 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24169( cx, "TestExampleInterface" , "passUnionWithDefaultValue6", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24170 | ||||
24171 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24172 | FloatOrString arg0; | |||
24173 | if (!(args.hasDefined(0))) { | |||
24174 | arg0.RawSetAsFloat() = 1.5F; | |||
24175 | } else { | |||
24176 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24177 | return false; | |||
24178 | } | |||
24179 | } | |||
24180 | // NOTE: This assert does NOT call the function. | |||
24181 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue6(Constify(arg0)))>, "Should be returning void here"); | |||
24182 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue6(Constify(arg0)); | |||
24183 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24183); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24183; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24184 | args.rval().setUndefined(); | |||
24185 | return true; | |||
24186 | } | |||
24187 | ||||
24188 | static const JSJitInfo passUnionWithDefaultValue6_methodinfo = { | |||
24189 | { (JSJitGetterOp)passUnionWithDefaultValue6 }, | |||
24190 | { prototypes::id::TestExampleInterface }, | |||
24191 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24192 | JSJitInfo::Method, | |||
24193 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24194 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24195 | false, /* isInfallible. False in setters. */ | |||
24196 | false, /* isMovable. Not relevant for setters. */ | |||
24197 | false, /* isEliminatable. Not relevant for setters. */ | |||
24198 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24199 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24200 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24201 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24202 | }; | |||
24203 | ||||
24204 | MOZ_CAN_RUN_SCRIPT static bool | |||
24205 | passUnionWithDefaultValue7(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24206 | { | |||
24207 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue7"); | |||
24208 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24211( cx, "TestExampleInterface" , "passUnionWithDefaultValue7", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24209 | "TestExampleInterface", "passUnionWithDefaultValue7", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24211( cx, "TestExampleInterface" , "passUnionWithDefaultValue7", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24210 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24211( cx, "TestExampleInterface" , "passUnionWithDefaultValue7", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24211 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24211( cx, "TestExampleInterface" , "passUnionWithDefaultValue7", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24212 | ||||
24213 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24214 | UnrestrictedDoubleOrString arg0; | |||
24215 | if (!(args.hasDefined(0))) { | |||
24216 | arg0.SetStringLiteral(u""); | |||
24217 | } else { | |||
24218 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24219 | return false; | |||
24220 | } | |||
24221 | } | |||
24222 | // NOTE: This assert does NOT call the function. | |||
24223 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue7(Constify(arg0)))>, "Should be returning void here"); | |||
24224 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue7(Constify(arg0)); | |||
24225 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24225); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24225; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24226 | args.rval().setUndefined(); | |||
24227 | return true; | |||
24228 | } | |||
24229 | ||||
24230 | static const JSJitInfo passUnionWithDefaultValue7_methodinfo = { | |||
24231 | { (JSJitGetterOp)passUnionWithDefaultValue7 }, | |||
24232 | { prototypes::id::TestExampleInterface }, | |||
24233 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24234 | JSJitInfo::Method, | |||
24235 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24236 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24237 | false, /* isInfallible. False in setters. */ | |||
24238 | false, /* isMovable. Not relevant for setters. */ | |||
24239 | false, /* isEliminatable. Not relevant for setters. */ | |||
24240 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24241 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24242 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24243 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24244 | }; | |||
24245 | ||||
24246 | MOZ_CAN_RUN_SCRIPT static bool | |||
24247 | passUnionWithDefaultValue8(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24248 | { | |||
24249 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue8"); | |||
24250 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24253( cx, "TestExampleInterface" , "passUnionWithDefaultValue8", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24251 | "TestExampleInterface", "passUnionWithDefaultValue8", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24253( cx, "TestExampleInterface" , "passUnionWithDefaultValue8", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24252 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24253( cx, "TestExampleInterface" , "passUnionWithDefaultValue8", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24253 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24253( cx, "TestExampleInterface" , "passUnionWithDefaultValue8", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24254 | ||||
24255 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24256 | UnrestrictedDoubleOrString arg0; | |||
24257 | if (!(args.hasDefined(0))) { | |||
24258 | arg0.RawSetAsUnrestrictedDouble() = 1.0; | |||
24259 | } else { | |||
24260 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24261 | return false; | |||
24262 | } | |||
24263 | } | |||
24264 | // NOTE: This assert does NOT call the function. | |||
24265 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue8(Constify(arg0)))>, "Should be returning void here"); | |||
24266 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue8(Constify(arg0)); | |||
24267 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24267); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24267; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24268 | args.rval().setUndefined(); | |||
24269 | return true; | |||
24270 | } | |||
24271 | ||||
24272 | static const JSJitInfo passUnionWithDefaultValue8_methodinfo = { | |||
24273 | { (JSJitGetterOp)passUnionWithDefaultValue8 }, | |||
24274 | { prototypes::id::TestExampleInterface }, | |||
24275 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24276 | JSJitInfo::Method, | |||
24277 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24278 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24279 | false, /* isInfallible. False in setters. */ | |||
24280 | false, /* isMovable. Not relevant for setters. */ | |||
24281 | false, /* isEliminatable. Not relevant for setters. */ | |||
24282 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24283 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24284 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24285 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24286 | }; | |||
24287 | ||||
24288 | MOZ_CAN_RUN_SCRIPT static bool | |||
24289 | passUnionWithDefaultValue9(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24290 | { | |||
24291 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue9"); | |||
24292 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24295( cx, "TestExampleInterface" , "passUnionWithDefaultValue9", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24293 | "TestExampleInterface", "passUnionWithDefaultValue9", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24295( cx, "TestExampleInterface" , "passUnionWithDefaultValue9", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24294 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24295( cx, "TestExampleInterface" , "passUnionWithDefaultValue9", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24295 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24295( cx, "TestExampleInterface" , "passUnionWithDefaultValue9", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24296 | ||||
24297 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24298 | UnrestrictedDoubleOrString arg0; | |||
24299 | if (!(args.hasDefined(0))) { | |||
24300 | arg0.RawSetAsUnrestrictedDouble() = 1.5; | |||
24301 | } else { | |||
24302 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24303 | return false; | |||
24304 | } | |||
24305 | } | |||
24306 | // NOTE: This assert does NOT call the function. | |||
24307 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue9(Constify(arg0)))>, "Should be returning void here"); | |||
24308 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue9(Constify(arg0)); | |||
24309 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24309); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24309; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24310 | args.rval().setUndefined(); | |||
24311 | return true; | |||
24312 | } | |||
24313 | ||||
24314 | static const JSJitInfo passUnionWithDefaultValue9_methodinfo = { | |||
24315 | { (JSJitGetterOp)passUnionWithDefaultValue9 }, | |||
24316 | { prototypes::id::TestExampleInterface }, | |||
24317 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24318 | JSJitInfo::Method, | |||
24319 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24320 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24321 | false, /* isInfallible. False in setters. */ | |||
24322 | false, /* isMovable. Not relevant for setters. */ | |||
24323 | false, /* isEliminatable. Not relevant for setters. */ | |||
24324 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24325 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24326 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24327 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24328 | }; | |||
24329 | ||||
24330 | MOZ_CAN_RUN_SCRIPT static bool | |||
24331 | passUnionWithDefaultValue10(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24332 | { | |||
24333 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue10"); | |||
24334 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24337( cx, "TestExampleInterface" , "passUnionWithDefaultValue10", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24335 | "TestExampleInterface", "passUnionWithDefaultValue10", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24337( cx, "TestExampleInterface" , "passUnionWithDefaultValue10", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24336 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24337( cx, "TestExampleInterface" , "passUnionWithDefaultValue10", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24337 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24337( cx, "TestExampleInterface" , "passUnionWithDefaultValue10", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24338 | ||||
24339 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24340 | UnrestrictedDoubleOrString arg0; | |||
24341 | if (!(args.hasDefined(0))) { | |||
24342 | arg0.RawSetAsUnrestrictedDouble() = mozilla::PositiveInfinity<double>(); | |||
24343 | } else { | |||
24344 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24345 | return false; | |||
24346 | } | |||
24347 | } | |||
24348 | // NOTE: This assert does NOT call the function. | |||
24349 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue10(Constify(arg0)))>, "Should be returning void here"); | |||
24350 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue10(Constify(arg0)); | |||
24351 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24351); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24351; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24352 | args.rval().setUndefined(); | |||
24353 | return true; | |||
24354 | } | |||
24355 | ||||
24356 | static const JSJitInfo passUnionWithDefaultValue10_methodinfo = { | |||
24357 | { (JSJitGetterOp)passUnionWithDefaultValue10 }, | |||
24358 | { prototypes::id::TestExampleInterface }, | |||
24359 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24360 | JSJitInfo::Method, | |||
24361 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24362 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24363 | false, /* isInfallible. False in setters. */ | |||
24364 | false, /* isMovable. Not relevant for setters. */ | |||
24365 | false, /* isEliminatable. Not relevant for setters. */ | |||
24366 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24367 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24368 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24369 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24370 | }; | |||
24371 | ||||
24372 | MOZ_CAN_RUN_SCRIPT static bool | |||
24373 | passUnionWithDefaultValue11(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24374 | { | |||
24375 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue11"); | |||
24376 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24379( cx, "TestExampleInterface" , "passUnionWithDefaultValue11", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24377 | "TestExampleInterface", "passUnionWithDefaultValue11", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24379( cx, "TestExampleInterface" , "passUnionWithDefaultValue11", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24378 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24379( cx, "TestExampleInterface" , "passUnionWithDefaultValue11", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24379 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24379( cx, "TestExampleInterface" , "passUnionWithDefaultValue11", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24380 | ||||
24381 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24382 | UnrestrictedFloatOrString arg0; | |||
24383 | if (!(args.hasDefined(0))) { | |||
24384 | arg0.SetStringLiteral(u""); | |||
24385 | } else { | |||
24386 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24387 | return false; | |||
24388 | } | |||
24389 | } | |||
24390 | // NOTE: This assert does NOT call the function. | |||
24391 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue11(Constify(arg0)))>, "Should be returning void here"); | |||
24392 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue11(Constify(arg0)); | |||
24393 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24393); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24393; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24394 | args.rval().setUndefined(); | |||
24395 | return true; | |||
24396 | } | |||
24397 | ||||
24398 | static const JSJitInfo passUnionWithDefaultValue11_methodinfo = { | |||
24399 | { (JSJitGetterOp)passUnionWithDefaultValue11 }, | |||
24400 | { prototypes::id::TestExampleInterface }, | |||
24401 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24402 | JSJitInfo::Method, | |||
24403 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24404 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24405 | false, /* isInfallible. False in setters. */ | |||
24406 | false, /* isMovable. Not relevant for setters. */ | |||
24407 | false, /* isEliminatable. Not relevant for setters. */ | |||
24408 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24409 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24410 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24411 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24412 | }; | |||
24413 | ||||
24414 | MOZ_CAN_RUN_SCRIPT static bool | |||
24415 | passUnionWithDefaultValue12(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24416 | { | |||
24417 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue12"); | |||
24418 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24421( cx, "TestExampleInterface" , "passUnionWithDefaultValue12", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24419 | "TestExampleInterface", "passUnionWithDefaultValue12", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24421( cx, "TestExampleInterface" , "passUnionWithDefaultValue12", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24420 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24421( cx, "TestExampleInterface" , "passUnionWithDefaultValue12", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24421 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24421( cx, "TestExampleInterface" , "passUnionWithDefaultValue12", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24422 | ||||
24423 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24424 | UnrestrictedFloatOrString arg0; | |||
24425 | if (!(args.hasDefined(0))) { | |||
24426 | arg0.RawSetAsUnrestrictedFloat() = 1.0F; | |||
24427 | } else { | |||
24428 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24429 | return false; | |||
24430 | } | |||
24431 | } | |||
24432 | // NOTE: This assert does NOT call the function. | |||
24433 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue12(Constify(arg0)))>, "Should be returning void here"); | |||
24434 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue12(Constify(arg0)); | |||
24435 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24435); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24435; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24436 | args.rval().setUndefined(); | |||
24437 | return true; | |||
24438 | } | |||
24439 | ||||
24440 | static const JSJitInfo passUnionWithDefaultValue12_methodinfo = { | |||
24441 | { (JSJitGetterOp)passUnionWithDefaultValue12 }, | |||
24442 | { prototypes::id::TestExampleInterface }, | |||
24443 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24444 | JSJitInfo::Method, | |||
24445 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24446 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24447 | false, /* isInfallible. False in setters. */ | |||
24448 | false, /* isMovable. Not relevant for setters. */ | |||
24449 | false, /* isEliminatable. Not relevant for setters. */ | |||
24450 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24451 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24452 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24453 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24454 | }; | |||
24455 | ||||
24456 | MOZ_CAN_RUN_SCRIPT static bool | |||
24457 | passUnionWithDefaultValue13(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24458 | { | |||
24459 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue13"); | |||
24460 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24463( cx, "TestExampleInterface" , "passUnionWithDefaultValue13", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24461 | "TestExampleInterface", "passUnionWithDefaultValue13", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24463( cx, "TestExampleInterface" , "passUnionWithDefaultValue13", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24462 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24463( cx, "TestExampleInterface" , "passUnionWithDefaultValue13", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24463 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24463( cx, "TestExampleInterface" , "passUnionWithDefaultValue13", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24464 | ||||
24465 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24466 | UnrestrictedFloatOrString arg0; | |||
24467 | if (!(args.hasDefined(0))) { | |||
24468 | arg0.RawSetAsUnrestrictedFloat() = mozilla::PositiveInfinity<float>(); | |||
24469 | } else { | |||
24470 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24471 | return false; | |||
24472 | } | |||
24473 | } | |||
24474 | // NOTE: This assert does NOT call the function. | |||
24475 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue13(Constify(arg0)))>, "Should be returning void here"); | |||
24476 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue13(Constify(arg0)); | |||
24477 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24477); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24477; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24478 | args.rval().setUndefined(); | |||
24479 | return true; | |||
24480 | } | |||
24481 | ||||
24482 | static const JSJitInfo passUnionWithDefaultValue13_methodinfo = { | |||
24483 | { (JSJitGetterOp)passUnionWithDefaultValue13 }, | |||
24484 | { prototypes::id::TestExampleInterface }, | |||
24485 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24486 | JSJitInfo::Method, | |||
24487 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24488 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24489 | false, /* isInfallible. False in setters. */ | |||
24490 | false, /* isMovable. Not relevant for setters. */ | |||
24491 | false, /* isEliminatable. Not relevant for setters. */ | |||
24492 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24493 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24494 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24495 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24496 | }; | |||
24497 | ||||
24498 | MOZ_CAN_RUN_SCRIPT static bool | |||
24499 | passUnionWithDefaultValue14(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24500 | { | |||
24501 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue14"); | |||
24502 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24505( cx, "TestExampleInterface" , "passUnionWithDefaultValue14", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24503 | "TestExampleInterface", "passUnionWithDefaultValue14", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24505( cx, "TestExampleInterface" , "passUnionWithDefaultValue14", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24504 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24505( cx, "TestExampleInterface" , "passUnionWithDefaultValue14", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24505 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24505( cx, "TestExampleInterface" , "passUnionWithDefaultValue14", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24506 | ||||
24507 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24508 | DoubleOrByteString arg0; | |||
24509 | if (!(args.hasDefined(0))) { | |||
24510 | arg0.SetStringLiteral(""); | |||
24511 | } else { | |||
24512 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24513 | return false; | |||
24514 | } | |||
24515 | } | |||
24516 | // NOTE: This assert does NOT call the function. | |||
24517 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue14(Constify(arg0)))>, "Should be returning void here"); | |||
24518 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue14(Constify(arg0)); | |||
24519 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24519); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24519; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24520 | args.rval().setUndefined(); | |||
24521 | return true; | |||
24522 | } | |||
24523 | ||||
24524 | static const JSJitInfo passUnionWithDefaultValue14_methodinfo = { | |||
24525 | { (JSJitGetterOp)passUnionWithDefaultValue14 }, | |||
24526 | { prototypes::id::TestExampleInterface }, | |||
24527 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24528 | JSJitInfo::Method, | |||
24529 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24530 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24531 | false, /* isInfallible. False in setters. */ | |||
24532 | false, /* isMovable. Not relevant for setters. */ | |||
24533 | false, /* isEliminatable. Not relevant for setters. */ | |||
24534 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24535 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24536 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24537 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24538 | }; | |||
24539 | ||||
24540 | MOZ_CAN_RUN_SCRIPT static bool | |||
24541 | passUnionWithDefaultValue15(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24542 | { | |||
24543 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue15"); | |||
24544 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24547( cx, "TestExampleInterface" , "passUnionWithDefaultValue15", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24545 | "TestExampleInterface", "passUnionWithDefaultValue15", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24547( cx, "TestExampleInterface" , "passUnionWithDefaultValue15", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24546 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24547( cx, "TestExampleInterface" , "passUnionWithDefaultValue15", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24547 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24547( cx, "TestExampleInterface" , "passUnionWithDefaultValue15", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24548 | ||||
24549 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24550 | DoubleOrByteString arg0; | |||
24551 | if (!(args.hasDefined(0))) { | |||
24552 | arg0.RawSetAsDouble() = 1.0; | |||
24553 | } else { | |||
24554 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24555 | return false; | |||
24556 | } | |||
24557 | } | |||
24558 | // NOTE: This assert does NOT call the function. | |||
24559 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue15(Constify(arg0)))>, "Should be returning void here"); | |||
24560 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue15(Constify(arg0)); | |||
24561 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24561); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24561; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24562 | args.rval().setUndefined(); | |||
24563 | return true; | |||
24564 | } | |||
24565 | ||||
24566 | static const JSJitInfo passUnionWithDefaultValue15_methodinfo = { | |||
24567 | { (JSJitGetterOp)passUnionWithDefaultValue15 }, | |||
24568 | { prototypes::id::TestExampleInterface }, | |||
24569 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24570 | JSJitInfo::Method, | |||
24571 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24572 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24573 | false, /* isInfallible. False in setters. */ | |||
24574 | false, /* isMovable. Not relevant for setters. */ | |||
24575 | false, /* isEliminatable. Not relevant for setters. */ | |||
24576 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24577 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24578 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24579 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24580 | }; | |||
24581 | ||||
24582 | MOZ_CAN_RUN_SCRIPT static bool | |||
24583 | passUnionWithDefaultValue16(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24584 | { | |||
24585 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue16"); | |||
24586 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24589( cx, "TestExampleInterface" , "passUnionWithDefaultValue16", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24587 | "TestExampleInterface", "passUnionWithDefaultValue16", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24589( cx, "TestExampleInterface" , "passUnionWithDefaultValue16", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24588 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24589( cx, "TestExampleInterface" , "passUnionWithDefaultValue16", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24589 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24589( cx, "TestExampleInterface" , "passUnionWithDefaultValue16", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24590 | ||||
24591 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24592 | DoubleOrByteString arg0; | |||
24593 | if (!(args.hasDefined(0))) { | |||
24594 | arg0.RawSetAsDouble() = 1.5; | |||
24595 | } else { | |||
24596 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24597 | return false; | |||
24598 | } | |||
24599 | } | |||
24600 | // NOTE: This assert does NOT call the function. | |||
24601 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue16(Constify(arg0)))>, "Should be returning void here"); | |||
24602 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue16(Constify(arg0)); | |||
24603 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24603); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24603; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24604 | args.rval().setUndefined(); | |||
24605 | return true; | |||
24606 | } | |||
24607 | ||||
24608 | static const JSJitInfo passUnionWithDefaultValue16_methodinfo = { | |||
24609 | { (JSJitGetterOp)passUnionWithDefaultValue16 }, | |||
24610 | { prototypes::id::TestExampleInterface }, | |||
24611 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24612 | JSJitInfo::Method, | |||
24613 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24614 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24615 | false, /* isInfallible. False in setters. */ | |||
24616 | false, /* isMovable. Not relevant for setters. */ | |||
24617 | false, /* isEliminatable. Not relevant for setters. */ | |||
24618 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24619 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24620 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24621 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24622 | }; | |||
24623 | ||||
24624 | MOZ_CAN_RUN_SCRIPT static bool | |||
24625 | passUnionWithDefaultValue17(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24626 | { | |||
24627 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue17"); | |||
24628 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24631( cx, "TestExampleInterface" , "passUnionWithDefaultValue17", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24629 | "TestExampleInterface", "passUnionWithDefaultValue17", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24631( cx, "TestExampleInterface" , "passUnionWithDefaultValue17", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24630 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24631( cx, "TestExampleInterface" , "passUnionWithDefaultValue17", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24631 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24631( cx, "TestExampleInterface" , "passUnionWithDefaultValue17", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24632 | ||||
24633 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24634 | DoubleOrSupportedType arg0; | |||
24635 | if (!(args.hasDefined(0))) { | |||
24636 | arg0.RawSetAsSupportedType() = SupportedType::Text_html; | |||
24637 | } else { | |||
24638 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24639 | return false; | |||
24640 | } | |||
24641 | } | |||
24642 | // NOTE: This assert does NOT call the function. | |||
24643 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue17(Constify(arg0)))>, "Should be returning void here"); | |||
24644 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue17(Constify(arg0)); | |||
24645 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24645); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24645; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24646 | args.rval().setUndefined(); | |||
24647 | return true; | |||
24648 | } | |||
24649 | ||||
24650 | static const JSJitInfo passUnionWithDefaultValue17_methodinfo = { | |||
24651 | { (JSJitGetterOp)passUnionWithDefaultValue17 }, | |||
24652 | { prototypes::id::TestExampleInterface }, | |||
24653 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24654 | JSJitInfo::Method, | |||
24655 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24656 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24657 | false, /* isInfallible. False in setters. */ | |||
24658 | false, /* isMovable. Not relevant for setters. */ | |||
24659 | false, /* isEliminatable. Not relevant for setters. */ | |||
24660 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24661 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24662 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24663 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24664 | }; | |||
24665 | ||||
24666 | MOZ_CAN_RUN_SCRIPT static bool | |||
24667 | passUnionWithDefaultValue18(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24668 | { | |||
24669 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue18"); | |||
24670 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24673( cx, "TestExampleInterface" , "passUnionWithDefaultValue18", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24671 | "TestExampleInterface", "passUnionWithDefaultValue18", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24673( cx, "TestExampleInterface" , "passUnionWithDefaultValue18", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24672 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24673( cx, "TestExampleInterface" , "passUnionWithDefaultValue18", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24673 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24673( cx, "TestExampleInterface" , "passUnionWithDefaultValue18", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24674 | ||||
24675 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24676 | DoubleOrSupportedType arg0; | |||
24677 | if (!(args.hasDefined(0))) { | |||
24678 | arg0.RawSetAsDouble() = 1.0; | |||
24679 | } else { | |||
24680 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24681 | return false; | |||
24682 | } | |||
24683 | } | |||
24684 | // NOTE: This assert does NOT call the function. | |||
24685 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue18(Constify(arg0)))>, "Should be returning void here"); | |||
24686 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue18(Constify(arg0)); | |||
24687 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24687); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24687; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24688 | args.rval().setUndefined(); | |||
24689 | return true; | |||
24690 | } | |||
24691 | ||||
24692 | static const JSJitInfo passUnionWithDefaultValue18_methodinfo = { | |||
24693 | { (JSJitGetterOp)passUnionWithDefaultValue18 }, | |||
24694 | { prototypes::id::TestExampleInterface }, | |||
24695 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24696 | JSJitInfo::Method, | |||
24697 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24698 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24699 | false, /* isInfallible. False in setters. */ | |||
24700 | false, /* isMovable. Not relevant for setters. */ | |||
24701 | false, /* isEliminatable. Not relevant for setters. */ | |||
24702 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24703 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24704 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24705 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24706 | }; | |||
24707 | ||||
24708 | MOZ_CAN_RUN_SCRIPT static bool | |||
24709 | passUnionWithDefaultValue19(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24710 | { | |||
24711 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue19"); | |||
24712 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24715( cx, "TestExampleInterface" , "passUnionWithDefaultValue19", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24713 | "TestExampleInterface", "passUnionWithDefaultValue19", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24715( cx, "TestExampleInterface" , "passUnionWithDefaultValue19", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24714 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24715( cx, "TestExampleInterface" , "passUnionWithDefaultValue19", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24715 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24715( cx, "TestExampleInterface" , "passUnionWithDefaultValue19", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24716 | ||||
24717 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24718 | DoubleOrSupportedType arg0; | |||
24719 | if (!(args.hasDefined(0))) { | |||
24720 | arg0.RawSetAsDouble() = 1.5; | |||
24721 | } else { | |||
24722 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24723 | return false; | |||
24724 | } | |||
24725 | } | |||
24726 | // NOTE: This assert does NOT call the function. | |||
24727 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue19(Constify(arg0)))>, "Should be returning void here"); | |||
24728 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue19(Constify(arg0)); | |||
24729 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24729); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24729; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24730 | args.rval().setUndefined(); | |||
24731 | return true; | |||
24732 | } | |||
24733 | ||||
24734 | static const JSJitInfo passUnionWithDefaultValue19_methodinfo = { | |||
24735 | { (JSJitGetterOp)passUnionWithDefaultValue19 }, | |||
24736 | { prototypes::id::TestExampleInterface }, | |||
24737 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24738 | JSJitInfo::Method, | |||
24739 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24740 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24741 | false, /* isInfallible. False in setters. */ | |||
24742 | false, /* isMovable. Not relevant for setters. */ | |||
24743 | false, /* isEliminatable. Not relevant for setters. */ | |||
24744 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24745 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24746 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24747 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24748 | }; | |||
24749 | ||||
24750 | MOZ_CAN_RUN_SCRIPT static bool | |||
24751 | passUnionWithDefaultValue20(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24752 | { | |||
24753 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue20"); | |||
24754 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24757( cx, "TestExampleInterface" , "passUnionWithDefaultValue20", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24755 | "TestExampleInterface", "passUnionWithDefaultValue20", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24757( cx, "TestExampleInterface" , "passUnionWithDefaultValue20", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24756 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24757( cx, "TestExampleInterface" , "passUnionWithDefaultValue20", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24757 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24757( cx, "TestExampleInterface" , "passUnionWithDefaultValue20", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24758 | ||||
24759 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24760 | DoubleOrUSVString arg0; | |||
24761 | if (!(args.hasDefined(0))) { | |||
24762 | arg0.SetStringLiteral(u"abc"); | |||
24763 | } else { | |||
24764 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24765 | return false; | |||
24766 | } | |||
24767 | } | |||
24768 | // NOTE: This assert does NOT call the function. | |||
24769 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue20(Constify(arg0)))>, "Should be returning void here"); | |||
24770 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue20(Constify(arg0)); | |||
24771 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24771); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24771; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24772 | args.rval().setUndefined(); | |||
24773 | return true; | |||
24774 | } | |||
24775 | ||||
24776 | static const JSJitInfo passUnionWithDefaultValue20_methodinfo = { | |||
24777 | { (JSJitGetterOp)passUnionWithDefaultValue20 }, | |||
24778 | { prototypes::id::TestExampleInterface }, | |||
24779 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24780 | JSJitInfo::Method, | |||
24781 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24782 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24783 | false, /* isInfallible. False in setters. */ | |||
24784 | false, /* isMovable. Not relevant for setters. */ | |||
24785 | false, /* isEliminatable. Not relevant for setters. */ | |||
24786 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24787 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24788 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24789 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24790 | }; | |||
24791 | ||||
24792 | MOZ_CAN_RUN_SCRIPT static bool | |||
24793 | passUnionWithDefaultValue21(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24794 | { | |||
24795 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue21"); | |||
24796 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24799( cx, "TestExampleInterface" , "passUnionWithDefaultValue21", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24797 | "TestExampleInterface", "passUnionWithDefaultValue21", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24799( cx, "TestExampleInterface" , "passUnionWithDefaultValue21", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24798 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24799( cx, "TestExampleInterface" , "passUnionWithDefaultValue21", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24799 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24799( cx, "TestExampleInterface" , "passUnionWithDefaultValue21", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24800 | ||||
24801 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24802 | DoubleOrUSVString arg0; | |||
24803 | if (!(args.hasDefined(0))) { | |||
24804 | arg0.RawSetAsDouble() = 1.0; | |||
24805 | } else { | |||
24806 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24807 | return false; | |||
24808 | } | |||
24809 | } | |||
24810 | // NOTE: This assert does NOT call the function. | |||
24811 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue21(Constify(arg0)))>, "Should be returning void here"); | |||
24812 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue21(Constify(arg0)); | |||
24813 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24813); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24813; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24814 | args.rval().setUndefined(); | |||
24815 | return true; | |||
24816 | } | |||
24817 | ||||
24818 | static const JSJitInfo passUnionWithDefaultValue21_methodinfo = { | |||
24819 | { (JSJitGetterOp)passUnionWithDefaultValue21 }, | |||
24820 | { prototypes::id::TestExampleInterface }, | |||
24821 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24822 | JSJitInfo::Method, | |||
24823 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24824 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24825 | false, /* isInfallible. False in setters. */ | |||
24826 | false, /* isMovable. Not relevant for setters. */ | |||
24827 | false, /* isEliminatable. Not relevant for setters. */ | |||
24828 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24829 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24830 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24831 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24832 | }; | |||
24833 | ||||
24834 | MOZ_CAN_RUN_SCRIPT static bool | |||
24835 | passUnionWithDefaultValue22(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24836 | { | |||
24837 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue22"); | |||
24838 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24841( cx, "TestExampleInterface" , "passUnionWithDefaultValue22", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24839 | "TestExampleInterface", "passUnionWithDefaultValue22", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24841( cx, "TestExampleInterface" , "passUnionWithDefaultValue22", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24840 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24841( cx, "TestExampleInterface" , "passUnionWithDefaultValue22", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24841 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24841( cx, "TestExampleInterface" , "passUnionWithDefaultValue22", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24842 | ||||
24843 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24844 | DoubleOrUSVString arg0; | |||
24845 | if (!(args.hasDefined(0))) { | |||
24846 | arg0.RawSetAsDouble() = 1.5; | |||
24847 | } else { | |||
24848 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24849 | return false; | |||
24850 | } | |||
24851 | } | |||
24852 | // NOTE: This assert does NOT call the function. | |||
24853 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue22(Constify(arg0)))>, "Should be returning void here"); | |||
24854 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue22(Constify(arg0)); | |||
24855 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24855); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24855; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24856 | args.rval().setUndefined(); | |||
24857 | return true; | |||
24858 | } | |||
24859 | ||||
24860 | static const JSJitInfo passUnionWithDefaultValue22_methodinfo = { | |||
24861 | { (JSJitGetterOp)passUnionWithDefaultValue22 }, | |||
24862 | { prototypes::id::TestExampleInterface }, | |||
24863 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24864 | JSJitInfo::Method, | |||
24865 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24866 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24867 | false, /* isInfallible. False in setters. */ | |||
24868 | false, /* isMovable. Not relevant for setters. */ | |||
24869 | false, /* isEliminatable. Not relevant for setters. */ | |||
24870 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24871 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24872 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24873 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24874 | }; | |||
24875 | ||||
24876 | MOZ_CAN_RUN_SCRIPT static bool | |||
24877 | passUnionWithDefaultValue23(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24878 | { | |||
24879 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue23"); | |||
24880 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24883( cx, "TestExampleInterface" , "passUnionWithDefaultValue23", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24881 | "TestExampleInterface", "passUnionWithDefaultValue23", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24883( cx, "TestExampleInterface" , "passUnionWithDefaultValue23", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24882 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24883( cx, "TestExampleInterface" , "passUnionWithDefaultValue23", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24883 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24883( cx, "TestExampleInterface" , "passUnionWithDefaultValue23", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24884 | ||||
24885 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24886 | DoubleOrUTF8String arg0; | |||
24887 | if (!(args.hasDefined(0))) { | |||
24888 | arg0.SetStringLiteral(""); | |||
24889 | } else { | |||
24890 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24891 | return false; | |||
24892 | } | |||
24893 | } | |||
24894 | // NOTE: This assert does NOT call the function. | |||
24895 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue23(Constify(arg0)))>, "Should be returning void here"); | |||
24896 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue23(Constify(arg0)); | |||
24897 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24897); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24897; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24898 | args.rval().setUndefined(); | |||
24899 | return true; | |||
24900 | } | |||
24901 | ||||
24902 | static const JSJitInfo passUnionWithDefaultValue23_methodinfo = { | |||
24903 | { (JSJitGetterOp)passUnionWithDefaultValue23 }, | |||
24904 | { prototypes::id::TestExampleInterface }, | |||
24905 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24906 | JSJitInfo::Method, | |||
24907 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24908 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24909 | false, /* isInfallible. False in setters. */ | |||
24910 | false, /* isMovable. Not relevant for setters. */ | |||
24911 | false, /* isEliminatable. Not relevant for setters. */ | |||
24912 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24913 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24914 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24915 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24916 | }; | |||
24917 | ||||
24918 | MOZ_CAN_RUN_SCRIPT static bool | |||
24919 | passUnionWithDefaultValue24(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24920 | { | |||
24921 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue24"); | |||
24922 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24925( cx, "TestExampleInterface" , "passUnionWithDefaultValue24", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24923 | "TestExampleInterface", "passUnionWithDefaultValue24", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24925( cx, "TestExampleInterface" , "passUnionWithDefaultValue24", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24924 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24925( cx, "TestExampleInterface" , "passUnionWithDefaultValue24", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24925 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24925( cx, "TestExampleInterface" , "passUnionWithDefaultValue24", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24926 | ||||
24927 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24928 | DoubleOrUTF8String arg0; | |||
24929 | if (!(args.hasDefined(0))) { | |||
24930 | arg0.RawSetAsDouble() = 1.0; | |||
24931 | } else { | |||
24932 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24933 | return false; | |||
24934 | } | |||
24935 | } | |||
24936 | // NOTE: This assert does NOT call the function. | |||
24937 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue24(Constify(arg0)))>, "Should be returning void here"); | |||
24938 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue24(Constify(arg0)); | |||
24939 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24939); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24939; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24940 | args.rval().setUndefined(); | |||
24941 | return true; | |||
24942 | } | |||
24943 | ||||
24944 | static const JSJitInfo passUnionWithDefaultValue24_methodinfo = { | |||
24945 | { (JSJitGetterOp)passUnionWithDefaultValue24 }, | |||
24946 | { prototypes::id::TestExampleInterface }, | |||
24947 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24948 | JSJitInfo::Method, | |||
24949 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24950 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24951 | false, /* isInfallible. False in setters. */ | |||
24952 | false, /* isMovable. Not relevant for setters. */ | |||
24953 | false, /* isEliminatable. Not relevant for setters. */ | |||
24954 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24955 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24956 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24957 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
24958 | }; | |||
24959 | ||||
24960 | MOZ_CAN_RUN_SCRIPT static bool | |||
24961 | passUnionWithDefaultValue25(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
24962 | { | |||
24963 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionWithDefaultValue25"); | |||
24964 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject24967( cx, "TestExampleInterface" , "passUnionWithDefaultValue25", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24965 | "TestExampleInterface", "passUnionWithDefaultValue25", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject24967( cx, "TestExampleInterface" , "passUnionWithDefaultValue25", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24966 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject24967( cx, "TestExampleInterface" , "passUnionWithDefaultValue25", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
24967 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject24967( cx, "TestExampleInterface" , "passUnionWithDefaultValue25", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
24968 | ||||
24969 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
24970 | DoubleOrUTF8String arg0; | |||
24971 | if (!(args.hasDefined(0))) { | |||
24972 | arg0.RawSetAsDouble() = 1.5; | |||
24973 | } else { | |||
24974 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
24975 | return false; | |||
24976 | } | |||
24977 | } | |||
24978 | // NOTE: This assert does NOT call the function. | |||
24979 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue25(Constify(arg0)))>, "Should be returning void here"); | |||
24980 | MOZ_KnownLive(self)(self)->PassUnionWithDefaultValue25(Constify(arg0)); | |||
24981 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 24981); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 24981; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
24982 | args.rval().setUndefined(); | |||
24983 | return true; | |||
24984 | } | |||
24985 | ||||
24986 | static const JSJitInfo passUnionWithDefaultValue25_methodinfo = { | |||
24987 | { (JSJitGetterOp)passUnionWithDefaultValue25 }, | |||
24988 | { prototypes::id::TestExampleInterface }, | |||
24989 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
24990 | JSJitInfo::Method, | |||
24991 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
24992 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
24993 | false, /* isInfallible. False in setters. */ | |||
24994 | false, /* isMovable. Not relevant for setters. */ | |||
24995 | false, /* isEliminatable. Not relevant for setters. */ | |||
24996 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
24997 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
24998 | false, /* isTypedMethod. Only relevant for methods. */ | |||
24999 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25000 | }; | |||
25001 | ||||
25002 | MOZ_CAN_RUN_SCRIPT static bool | |||
25003 | passNullableUnionWithDefaultValue1(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25004 | { | |||
25005 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue1"); | |||
25006 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25009( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue1", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25007 | "TestExampleInterface", "passNullableUnionWithDefaultValue1", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25009( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue1", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25008 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25009( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue1", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25009 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25009( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue1", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25010 | ||||
25011 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25012 | Nullable<DoubleOrString > arg0; | |||
25013 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25014 | arg0.SetNull(); | |||
25015 | } else { | |||
25016 | if (!(args.hasDefined(0))) { | |||
25017 | arg0.SetValue().SetStringLiteral(u""); | |||
25018 | } else { | |||
25019 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25020 | return false; | |||
25021 | } | |||
25022 | } | |||
25023 | } | |||
25024 | // NOTE: This assert does NOT call the function. | |||
25025 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue1(Constify(arg0)))>, "Should be returning void here"); | |||
25026 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue1(Constify(arg0)); | |||
25027 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25027); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25027; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25028 | args.rval().setUndefined(); | |||
25029 | return true; | |||
25030 | } | |||
25031 | ||||
25032 | static const JSJitInfo passNullableUnionWithDefaultValue1_methodinfo = { | |||
25033 | { (JSJitGetterOp)passNullableUnionWithDefaultValue1 }, | |||
25034 | { prototypes::id::TestExampleInterface }, | |||
25035 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25036 | JSJitInfo::Method, | |||
25037 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25038 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25039 | false, /* isInfallible. False in setters. */ | |||
25040 | false, /* isMovable. Not relevant for setters. */ | |||
25041 | false, /* isEliminatable. Not relevant for setters. */ | |||
25042 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25043 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25044 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25045 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25046 | }; | |||
25047 | ||||
25048 | MOZ_CAN_RUN_SCRIPT static bool | |||
25049 | passNullableUnionWithDefaultValue2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25050 | { | |||
25051 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue2"); | |||
25052 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25055( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25053 | "TestExampleInterface", "passNullableUnionWithDefaultValue2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25055( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25054 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25055( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25055 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25055( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue2", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25056 | ||||
25057 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25058 | Nullable<DoubleOrString > arg0; | |||
25059 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25060 | arg0.SetNull(); | |||
25061 | } else { | |||
25062 | if (!(args.hasDefined(0))) { | |||
25063 | arg0.SetValue().RawSetAsDouble() = 1.0; | |||
25064 | } else { | |||
25065 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25066 | return false; | |||
25067 | } | |||
25068 | } | |||
25069 | } | |||
25070 | // NOTE: This assert does NOT call the function. | |||
25071 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue2(Constify(arg0)))>, "Should be returning void here"); | |||
25072 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue2(Constify(arg0)); | |||
25073 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25073); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25073; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25074 | args.rval().setUndefined(); | |||
25075 | return true; | |||
25076 | } | |||
25077 | ||||
25078 | static const JSJitInfo passNullableUnionWithDefaultValue2_methodinfo = { | |||
25079 | { (JSJitGetterOp)passNullableUnionWithDefaultValue2 }, | |||
25080 | { prototypes::id::TestExampleInterface }, | |||
25081 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25082 | JSJitInfo::Method, | |||
25083 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25084 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25085 | false, /* isInfallible. False in setters. */ | |||
25086 | false, /* isMovable. Not relevant for setters. */ | |||
25087 | false, /* isEliminatable. Not relevant for setters. */ | |||
25088 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25089 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25090 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25091 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25092 | }; | |||
25093 | ||||
25094 | MOZ_CAN_RUN_SCRIPT static bool | |||
25095 | passNullableUnionWithDefaultValue3(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25096 | { | |||
25097 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue3"); | |||
25098 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25101( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue3", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25099 | "TestExampleInterface", "passNullableUnionWithDefaultValue3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25101( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue3", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25100 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25101( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue3", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25101 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25101( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue3", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25102 | ||||
25103 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25104 | Nullable<DoubleOrString > arg0; | |||
25105 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
25106 | arg0.SetNull(); | |||
25107 | } else { | |||
25108 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25109 | return false; | |||
25110 | } | |||
25111 | } | |||
25112 | // NOTE: This assert does NOT call the function. | |||
25113 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue3(Constify(arg0)))>, "Should be returning void here"); | |||
25114 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue3(Constify(arg0)); | |||
25115 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25115); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25115; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25116 | args.rval().setUndefined(); | |||
25117 | return true; | |||
25118 | } | |||
25119 | ||||
25120 | static const JSJitInfo passNullableUnionWithDefaultValue3_methodinfo = { | |||
25121 | { (JSJitGetterOp)passNullableUnionWithDefaultValue3 }, | |||
25122 | { prototypes::id::TestExampleInterface }, | |||
25123 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25124 | JSJitInfo::Method, | |||
25125 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25126 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25127 | false, /* isInfallible. False in setters. */ | |||
25128 | false, /* isMovable. Not relevant for setters. */ | |||
25129 | false, /* isEliminatable. Not relevant for setters. */ | |||
25130 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25131 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25132 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25133 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25134 | }; | |||
25135 | ||||
25136 | MOZ_CAN_RUN_SCRIPT static bool | |||
25137 | passNullableUnionWithDefaultValue4(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25138 | { | |||
25139 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue4"); | |||
25140 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25143( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue4", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25141 | "TestExampleInterface", "passNullableUnionWithDefaultValue4", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25143( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue4", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25142 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25143( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue4", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25143 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25143( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue4", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25144 | ||||
25145 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25146 | Nullable<FloatOrString > arg0; | |||
25147 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25148 | arg0.SetNull(); | |||
25149 | } else { | |||
25150 | if (!(args.hasDefined(0))) { | |||
25151 | arg0.SetValue().SetStringLiteral(u""); | |||
25152 | } else { | |||
25153 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25154 | return false; | |||
25155 | } | |||
25156 | } | |||
25157 | } | |||
25158 | // NOTE: This assert does NOT call the function. | |||
25159 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue4(Constify(arg0)))>, "Should be returning void here"); | |||
25160 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue4(Constify(arg0)); | |||
25161 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25161); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25161; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25162 | args.rval().setUndefined(); | |||
25163 | return true; | |||
25164 | } | |||
25165 | ||||
25166 | static const JSJitInfo passNullableUnionWithDefaultValue4_methodinfo = { | |||
25167 | { (JSJitGetterOp)passNullableUnionWithDefaultValue4 }, | |||
25168 | { prototypes::id::TestExampleInterface }, | |||
25169 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25170 | JSJitInfo::Method, | |||
25171 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25172 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25173 | false, /* isInfallible. False in setters. */ | |||
25174 | false, /* isMovable. Not relevant for setters. */ | |||
25175 | false, /* isEliminatable. Not relevant for setters. */ | |||
25176 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25177 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25178 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25179 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25180 | }; | |||
25181 | ||||
25182 | MOZ_CAN_RUN_SCRIPT static bool | |||
25183 | passNullableUnionWithDefaultValue5(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25184 | { | |||
25185 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue5"); | |||
25186 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25189( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue5", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25187 | "TestExampleInterface", "passNullableUnionWithDefaultValue5", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25189( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue5", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25188 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25189( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue5", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25189 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25189( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue5", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25190 | ||||
25191 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25192 | Nullable<FloatOrString > arg0; | |||
25193 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25194 | arg0.SetNull(); | |||
25195 | } else { | |||
25196 | if (!(args.hasDefined(0))) { | |||
25197 | arg0.SetValue().RawSetAsFloat() = 1.0F; | |||
25198 | } else { | |||
25199 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25200 | return false; | |||
25201 | } | |||
25202 | } | |||
25203 | } | |||
25204 | // NOTE: This assert does NOT call the function. | |||
25205 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue5(Constify(arg0)))>, "Should be returning void here"); | |||
25206 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue5(Constify(arg0)); | |||
25207 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25207); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25207; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25208 | args.rval().setUndefined(); | |||
25209 | return true; | |||
25210 | } | |||
25211 | ||||
25212 | static const JSJitInfo passNullableUnionWithDefaultValue5_methodinfo = { | |||
25213 | { (JSJitGetterOp)passNullableUnionWithDefaultValue5 }, | |||
25214 | { prototypes::id::TestExampleInterface }, | |||
25215 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25216 | JSJitInfo::Method, | |||
25217 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25218 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25219 | false, /* isInfallible. False in setters. */ | |||
25220 | false, /* isMovable. Not relevant for setters. */ | |||
25221 | false, /* isEliminatable. Not relevant for setters. */ | |||
25222 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25223 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25224 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25225 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25226 | }; | |||
25227 | ||||
25228 | MOZ_CAN_RUN_SCRIPT static bool | |||
25229 | passNullableUnionWithDefaultValue6(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25230 | { | |||
25231 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue6"); | |||
25232 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25235( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue6", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25233 | "TestExampleInterface", "passNullableUnionWithDefaultValue6", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25235( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue6", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25234 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25235( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue6", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25235 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25235( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue6", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25236 | ||||
25237 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25238 | Nullable<FloatOrString > arg0; | |||
25239 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
25240 | arg0.SetNull(); | |||
25241 | } else { | |||
25242 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25243 | return false; | |||
25244 | } | |||
25245 | } | |||
25246 | // NOTE: This assert does NOT call the function. | |||
25247 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue6(Constify(arg0)))>, "Should be returning void here"); | |||
25248 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue6(Constify(arg0)); | |||
25249 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25249); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25249; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25250 | args.rval().setUndefined(); | |||
25251 | return true; | |||
25252 | } | |||
25253 | ||||
25254 | static const JSJitInfo passNullableUnionWithDefaultValue6_methodinfo = { | |||
25255 | { (JSJitGetterOp)passNullableUnionWithDefaultValue6 }, | |||
25256 | { prototypes::id::TestExampleInterface }, | |||
25257 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25258 | JSJitInfo::Method, | |||
25259 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25260 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25261 | false, /* isInfallible. False in setters. */ | |||
25262 | false, /* isMovable. Not relevant for setters. */ | |||
25263 | false, /* isEliminatable. Not relevant for setters. */ | |||
25264 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25265 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25266 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25267 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25268 | }; | |||
25269 | ||||
25270 | MOZ_CAN_RUN_SCRIPT static bool | |||
25271 | passNullableUnionWithDefaultValue7(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25272 | { | |||
25273 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue7"); | |||
25274 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25277( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue7", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25275 | "TestExampleInterface", "passNullableUnionWithDefaultValue7", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25277( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue7", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25276 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25277( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue7", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25277 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25277( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue7", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25278 | ||||
25279 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25280 | Nullable<UnrestrictedDoubleOrString > arg0; | |||
25281 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25282 | arg0.SetNull(); | |||
25283 | } else { | |||
25284 | if (!(args.hasDefined(0))) { | |||
25285 | arg0.SetValue().SetStringLiteral(u""); | |||
25286 | } else { | |||
25287 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25288 | return false; | |||
25289 | } | |||
25290 | } | |||
25291 | } | |||
25292 | // NOTE: This assert does NOT call the function. | |||
25293 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue7(Constify(arg0)))>, "Should be returning void here"); | |||
25294 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue7(Constify(arg0)); | |||
25295 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25295); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25295; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25296 | args.rval().setUndefined(); | |||
25297 | return true; | |||
25298 | } | |||
25299 | ||||
25300 | static const JSJitInfo passNullableUnionWithDefaultValue7_methodinfo = { | |||
25301 | { (JSJitGetterOp)passNullableUnionWithDefaultValue7 }, | |||
25302 | { prototypes::id::TestExampleInterface }, | |||
25303 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25304 | JSJitInfo::Method, | |||
25305 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25306 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25307 | false, /* isInfallible. False in setters. */ | |||
25308 | false, /* isMovable. Not relevant for setters. */ | |||
25309 | false, /* isEliminatable. Not relevant for setters. */ | |||
25310 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25311 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25312 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25313 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25314 | }; | |||
25315 | ||||
25316 | MOZ_CAN_RUN_SCRIPT static bool | |||
25317 | passNullableUnionWithDefaultValue8(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25318 | { | |||
25319 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue8"); | |||
25320 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25323( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue8", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25321 | "TestExampleInterface", "passNullableUnionWithDefaultValue8", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25323( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue8", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25322 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25323( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue8", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25323 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25323( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue8", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25324 | ||||
25325 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25326 | Nullable<UnrestrictedDoubleOrString > arg0; | |||
25327 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25328 | arg0.SetNull(); | |||
25329 | } else { | |||
25330 | if (!(args.hasDefined(0))) { | |||
25331 | arg0.SetValue().RawSetAsUnrestrictedDouble() = 1.0; | |||
25332 | } else { | |||
25333 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25334 | return false; | |||
25335 | } | |||
25336 | } | |||
25337 | } | |||
25338 | // NOTE: This assert does NOT call the function. | |||
25339 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue8(Constify(arg0)))>, "Should be returning void here"); | |||
25340 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue8(Constify(arg0)); | |||
25341 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25341); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25341; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25342 | args.rval().setUndefined(); | |||
25343 | return true; | |||
25344 | } | |||
25345 | ||||
25346 | static const JSJitInfo passNullableUnionWithDefaultValue8_methodinfo = { | |||
25347 | { (JSJitGetterOp)passNullableUnionWithDefaultValue8 }, | |||
25348 | { prototypes::id::TestExampleInterface }, | |||
25349 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25350 | JSJitInfo::Method, | |||
25351 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25352 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25353 | false, /* isInfallible. False in setters. */ | |||
25354 | false, /* isMovable. Not relevant for setters. */ | |||
25355 | false, /* isEliminatable. Not relevant for setters. */ | |||
25356 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25357 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25358 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25359 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25360 | }; | |||
25361 | ||||
25362 | MOZ_CAN_RUN_SCRIPT static bool | |||
25363 | passNullableUnionWithDefaultValue9(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25364 | { | |||
25365 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue9"); | |||
25366 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25369( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue9", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25367 | "TestExampleInterface", "passNullableUnionWithDefaultValue9", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25369( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue9", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25368 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25369( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue9", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25369 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25369( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue9", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25370 | ||||
25371 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25372 | Nullable<UnrestrictedDoubleOrString > arg0; | |||
25373 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
25374 | arg0.SetNull(); | |||
25375 | } else { | |||
25376 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25377 | return false; | |||
25378 | } | |||
25379 | } | |||
25380 | // NOTE: This assert does NOT call the function. | |||
25381 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue9(Constify(arg0)))>, "Should be returning void here"); | |||
25382 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue9(Constify(arg0)); | |||
25383 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25383); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25383; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25384 | args.rval().setUndefined(); | |||
25385 | return true; | |||
25386 | } | |||
25387 | ||||
25388 | static const JSJitInfo passNullableUnionWithDefaultValue9_methodinfo = { | |||
25389 | { (JSJitGetterOp)passNullableUnionWithDefaultValue9 }, | |||
25390 | { prototypes::id::TestExampleInterface }, | |||
25391 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25392 | JSJitInfo::Method, | |||
25393 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25394 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25395 | false, /* isInfallible. False in setters. */ | |||
25396 | false, /* isMovable. Not relevant for setters. */ | |||
25397 | false, /* isEliminatable. Not relevant for setters. */ | |||
25398 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25399 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25400 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25401 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25402 | }; | |||
25403 | ||||
25404 | MOZ_CAN_RUN_SCRIPT static bool | |||
25405 | passNullableUnionWithDefaultValue10(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25406 | { | |||
25407 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue10"); | |||
25408 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25411( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue10", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25409 | "TestExampleInterface", "passNullableUnionWithDefaultValue10", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25411( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue10", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25410 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25411( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue10", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25411 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25411( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue10", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25412 | ||||
25413 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25414 | Nullable<UnrestrictedFloatOrString > arg0; | |||
25415 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25416 | arg0.SetNull(); | |||
25417 | } else { | |||
25418 | if (!(args.hasDefined(0))) { | |||
25419 | arg0.SetValue().SetStringLiteral(u""); | |||
25420 | } else { | |||
25421 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25422 | return false; | |||
25423 | } | |||
25424 | } | |||
25425 | } | |||
25426 | // NOTE: This assert does NOT call the function. | |||
25427 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue10(Constify(arg0)))>, "Should be returning void here"); | |||
25428 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue10(Constify(arg0)); | |||
25429 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25429); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25429; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25430 | args.rval().setUndefined(); | |||
25431 | return true; | |||
25432 | } | |||
25433 | ||||
25434 | static const JSJitInfo passNullableUnionWithDefaultValue10_methodinfo = { | |||
25435 | { (JSJitGetterOp)passNullableUnionWithDefaultValue10 }, | |||
25436 | { prototypes::id::TestExampleInterface }, | |||
25437 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25438 | JSJitInfo::Method, | |||
25439 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25440 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25441 | false, /* isInfallible. False in setters. */ | |||
25442 | false, /* isMovable. Not relevant for setters. */ | |||
25443 | false, /* isEliminatable. Not relevant for setters. */ | |||
25444 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25445 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25446 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25447 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25448 | }; | |||
25449 | ||||
25450 | MOZ_CAN_RUN_SCRIPT static bool | |||
25451 | passNullableUnionWithDefaultValue11(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25452 | { | |||
25453 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue11"); | |||
25454 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25457( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue11", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25455 | "TestExampleInterface", "passNullableUnionWithDefaultValue11", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25457( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue11", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25456 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25457( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue11", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25457 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25457( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue11", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25458 | ||||
25459 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25460 | Nullable<UnrestrictedFloatOrString > arg0; | |||
25461 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25462 | arg0.SetNull(); | |||
25463 | } else { | |||
25464 | if (!(args.hasDefined(0))) { | |||
25465 | arg0.SetValue().RawSetAsUnrestrictedFloat() = 1.0F; | |||
25466 | } else { | |||
25467 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25468 | return false; | |||
25469 | } | |||
25470 | } | |||
25471 | } | |||
25472 | // NOTE: This assert does NOT call the function. | |||
25473 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue11(Constify(arg0)))>, "Should be returning void here"); | |||
25474 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue11(Constify(arg0)); | |||
25475 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25475); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25475; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25476 | args.rval().setUndefined(); | |||
25477 | return true; | |||
25478 | } | |||
25479 | ||||
25480 | static const JSJitInfo passNullableUnionWithDefaultValue11_methodinfo = { | |||
25481 | { (JSJitGetterOp)passNullableUnionWithDefaultValue11 }, | |||
25482 | { prototypes::id::TestExampleInterface }, | |||
25483 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25484 | JSJitInfo::Method, | |||
25485 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25486 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25487 | false, /* isInfallible. False in setters. */ | |||
25488 | false, /* isMovable. Not relevant for setters. */ | |||
25489 | false, /* isEliminatable. Not relevant for setters. */ | |||
25490 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25491 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25492 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25493 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25494 | }; | |||
25495 | ||||
25496 | MOZ_CAN_RUN_SCRIPT static bool | |||
25497 | passNullableUnionWithDefaultValue12(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25498 | { | |||
25499 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue12"); | |||
25500 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25503( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue12", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25501 | "TestExampleInterface", "passNullableUnionWithDefaultValue12", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25503( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue12", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25502 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25503( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue12", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25503 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25503( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue12", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25504 | ||||
25505 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25506 | Nullable<UnrestrictedFloatOrString > arg0; | |||
25507 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
25508 | arg0.SetNull(); | |||
25509 | } else { | |||
25510 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25511 | return false; | |||
25512 | } | |||
25513 | } | |||
25514 | // NOTE: This assert does NOT call the function. | |||
25515 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue12(Constify(arg0)))>, "Should be returning void here"); | |||
25516 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue12(Constify(arg0)); | |||
25517 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25517); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25517; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25518 | args.rval().setUndefined(); | |||
25519 | return true; | |||
25520 | } | |||
25521 | ||||
25522 | static const JSJitInfo passNullableUnionWithDefaultValue12_methodinfo = { | |||
25523 | { (JSJitGetterOp)passNullableUnionWithDefaultValue12 }, | |||
25524 | { prototypes::id::TestExampleInterface }, | |||
25525 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25526 | JSJitInfo::Method, | |||
25527 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25528 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25529 | false, /* isInfallible. False in setters. */ | |||
25530 | false, /* isMovable. Not relevant for setters. */ | |||
25531 | false, /* isEliminatable. Not relevant for setters. */ | |||
25532 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25533 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25534 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25535 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25536 | }; | |||
25537 | ||||
25538 | MOZ_CAN_RUN_SCRIPT static bool | |||
25539 | passNullableUnionWithDefaultValue13(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25540 | { | |||
25541 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue13"); | |||
25542 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25545( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue13", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25543 | "TestExampleInterface", "passNullableUnionWithDefaultValue13", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25545( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue13", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25544 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25545( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue13", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25545 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25545( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue13", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25546 | ||||
25547 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25548 | Nullable<DoubleOrByteString > arg0; | |||
25549 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25550 | arg0.SetNull(); | |||
25551 | } else { | |||
25552 | if (!(args.hasDefined(0))) { | |||
25553 | arg0.SetValue().SetStringLiteral(""); | |||
25554 | } else { | |||
25555 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25556 | return false; | |||
25557 | } | |||
25558 | } | |||
25559 | } | |||
25560 | // NOTE: This assert does NOT call the function. | |||
25561 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue13(Constify(arg0)))>, "Should be returning void here"); | |||
25562 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue13(Constify(arg0)); | |||
25563 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25563); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25563; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25564 | args.rval().setUndefined(); | |||
25565 | return true; | |||
25566 | } | |||
25567 | ||||
25568 | static const JSJitInfo passNullableUnionWithDefaultValue13_methodinfo = { | |||
25569 | { (JSJitGetterOp)passNullableUnionWithDefaultValue13 }, | |||
25570 | { prototypes::id::TestExampleInterface }, | |||
25571 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25572 | JSJitInfo::Method, | |||
25573 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25574 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25575 | false, /* isInfallible. False in setters. */ | |||
25576 | false, /* isMovable. Not relevant for setters. */ | |||
25577 | false, /* isEliminatable. Not relevant for setters. */ | |||
25578 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25579 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25580 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25581 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25582 | }; | |||
25583 | ||||
25584 | MOZ_CAN_RUN_SCRIPT static bool | |||
25585 | passNullableUnionWithDefaultValue14(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25586 | { | |||
25587 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue14"); | |||
25588 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25591( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue14", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25589 | "TestExampleInterface", "passNullableUnionWithDefaultValue14", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25591( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue14", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25590 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25591( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue14", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25591 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25591( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue14", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25592 | ||||
25593 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25594 | Nullable<DoubleOrByteString > arg0; | |||
25595 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25596 | arg0.SetNull(); | |||
25597 | } else { | |||
25598 | if (!(args.hasDefined(0))) { | |||
25599 | arg0.SetValue().RawSetAsDouble() = 1.0; | |||
25600 | } else { | |||
25601 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25602 | return false; | |||
25603 | } | |||
25604 | } | |||
25605 | } | |||
25606 | // NOTE: This assert does NOT call the function. | |||
25607 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue14(Constify(arg0)))>, "Should be returning void here"); | |||
25608 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue14(Constify(arg0)); | |||
25609 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25609); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25609; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25610 | args.rval().setUndefined(); | |||
25611 | return true; | |||
25612 | } | |||
25613 | ||||
25614 | static const JSJitInfo passNullableUnionWithDefaultValue14_methodinfo = { | |||
25615 | { (JSJitGetterOp)passNullableUnionWithDefaultValue14 }, | |||
25616 | { prototypes::id::TestExampleInterface }, | |||
25617 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25618 | JSJitInfo::Method, | |||
25619 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25620 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25621 | false, /* isInfallible. False in setters. */ | |||
25622 | false, /* isMovable. Not relevant for setters. */ | |||
25623 | false, /* isEliminatable. Not relevant for setters. */ | |||
25624 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25625 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25626 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25627 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25628 | }; | |||
25629 | ||||
25630 | MOZ_CAN_RUN_SCRIPT static bool | |||
25631 | passNullableUnionWithDefaultValue15(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25632 | { | |||
25633 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue15"); | |||
25634 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25637( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue15", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25635 | "TestExampleInterface", "passNullableUnionWithDefaultValue15", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25637( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue15", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25636 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25637( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue15", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25637 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25637( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue15", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25638 | ||||
25639 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25640 | Nullable<DoubleOrByteString > arg0; | |||
25641 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25642 | arg0.SetNull(); | |||
25643 | } else { | |||
25644 | if (!(args.hasDefined(0))) { | |||
25645 | arg0.SetValue().RawSetAsDouble() = 1.5; | |||
25646 | } else { | |||
25647 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25648 | return false; | |||
25649 | } | |||
25650 | } | |||
25651 | } | |||
25652 | // NOTE: This assert does NOT call the function. | |||
25653 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue15(Constify(arg0)))>, "Should be returning void here"); | |||
25654 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue15(Constify(arg0)); | |||
25655 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25655); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25655; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25656 | args.rval().setUndefined(); | |||
25657 | return true; | |||
25658 | } | |||
25659 | ||||
25660 | static const JSJitInfo passNullableUnionWithDefaultValue15_methodinfo = { | |||
25661 | { (JSJitGetterOp)passNullableUnionWithDefaultValue15 }, | |||
25662 | { prototypes::id::TestExampleInterface }, | |||
25663 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25664 | JSJitInfo::Method, | |||
25665 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25666 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25667 | false, /* isInfallible. False in setters. */ | |||
25668 | false, /* isMovable. Not relevant for setters. */ | |||
25669 | false, /* isEliminatable. Not relevant for setters. */ | |||
25670 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25671 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25672 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25673 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25674 | }; | |||
25675 | ||||
25676 | MOZ_CAN_RUN_SCRIPT static bool | |||
25677 | passNullableUnionWithDefaultValue16(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25678 | { | |||
25679 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue16"); | |||
25680 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25683( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue16", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25681 | "TestExampleInterface", "passNullableUnionWithDefaultValue16", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25683( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue16", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25682 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25683( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue16", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25683 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25683( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue16", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25684 | ||||
25685 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25686 | Nullable<DoubleOrByteString > arg0; | |||
25687 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
25688 | arg0.SetNull(); | |||
25689 | } else { | |||
25690 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25691 | return false; | |||
25692 | } | |||
25693 | } | |||
25694 | // NOTE: This assert does NOT call the function. | |||
25695 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue16(Constify(arg0)))>, "Should be returning void here"); | |||
25696 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue16(Constify(arg0)); | |||
25697 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25697); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25697; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25698 | args.rval().setUndefined(); | |||
25699 | return true; | |||
25700 | } | |||
25701 | ||||
25702 | static const JSJitInfo passNullableUnionWithDefaultValue16_methodinfo = { | |||
25703 | { (JSJitGetterOp)passNullableUnionWithDefaultValue16 }, | |||
25704 | { prototypes::id::TestExampleInterface }, | |||
25705 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25706 | JSJitInfo::Method, | |||
25707 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25708 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25709 | false, /* isInfallible. False in setters. */ | |||
25710 | false, /* isMovable. Not relevant for setters. */ | |||
25711 | false, /* isEliminatable. Not relevant for setters. */ | |||
25712 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25713 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25714 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25715 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25716 | }; | |||
25717 | ||||
25718 | MOZ_CAN_RUN_SCRIPT static bool | |||
25719 | passNullableUnionWithDefaultValue17(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25720 | { | |||
25721 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue17"); | |||
25722 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25725( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue17", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25723 | "TestExampleInterface", "passNullableUnionWithDefaultValue17", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25725( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue17", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25724 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25725( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue17", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25725 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25725( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue17", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25726 | ||||
25727 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25728 | Nullable<DoubleOrSupportedType > arg0; | |||
25729 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25730 | arg0.SetNull(); | |||
25731 | } else { | |||
25732 | if (!(args.hasDefined(0))) { | |||
25733 | arg0.SetValue().RawSetAsSupportedType() = SupportedType::Text_html; | |||
25734 | } else { | |||
25735 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25736 | return false; | |||
25737 | } | |||
25738 | } | |||
25739 | } | |||
25740 | // NOTE: This assert does NOT call the function. | |||
25741 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue17(Constify(arg0)))>, "Should be returning void here"); | |||
25742 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue17(Constify(arg0)); | |||
25743 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25743); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25743; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25744 | args.rval().setUndefined(); | |||
25745 | return true; | |||
25746 | } | |||
25747 | ||||
25748 | static const JSJitInfo passNullableUnionWithDefaultValue17_methodinfo = { | |||
25749 | { (JSJitGetterOp)passNullableUnionWithDefaultValue17 }, | |||
25750 | { prototypes::id::TestExampleInterface }, | |||
25751 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25752 | JSJitInfo::Method, | |||
25753 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25754 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25755 | false, /* isInfallible. False in setters. */ | |||
25756 | false, /* isMovable. Not relevant for setters. */ | |||
25757 | false, /* isEliminatable. Not relevant for setters. */ | |||
25758 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25759 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25760 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25761 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25762 | }; | |||
25763 | ||||
25764 | MOZ_CAN_RUN_SCRIPT static bool | |||
25765 | passNullableUnionWithDefaultValue18(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25766 | { | |||
25767 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue18"); | |||
25768 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25771( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue18", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25769 | "TestExampleInterface", "passNullableUnionWithDefaultValue18", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25771( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue18", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25770 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25771( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue18", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25771 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25771( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue18", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25772 | ||||
25773 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25774 | Nullable<DoubleOrSupportedType > arg0; | |||
25775 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25776 | arg0.SetNull(); | |||
25777 | } else { | |||
25778 | if (!(args.hasDefined(0))) { | |||
25779 | arg0.SetValue().RawSetAsDouble() = 1.0; | |||
25780 | } else { | |||
25781 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25782 | return false; | |||
25783 | } | |||
25784 | } | |||
25785 | } | |||
25786 | // NOTE: This assert does NOT call the function. | |||
25787 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue18(Constify(arg0)))>, "Should be returning void here"); | |||
25788 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue18(Constify(arg0)); | |||
25789 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25789); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25789; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25790 | args.rval().setUndefined(); | |||
25791 | return true; | |||
25792 | } | |||
25793 | ||||
25794 | static const JSJitInfo passNullableUnionWithDefaultValue18_methodinfo = { | |||
25795 | { (JSJitGetterOp)passNullableUnionWithDefaultValue18 }, | |||
25796 | { prototypes::id::TestExampleInterface }, | |||
25797 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25798 | JSJitInfo::Method, | |||
25799 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25800 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25801 | false, /* isInfallible. False in setters. */ | |||
25802 | false, /* isMovable. Not relevant for setters. */ | |||
25803 | false, /* isEliminatable. Not relevant for setters. */ | |||
25804 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25805 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25806 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25807 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25808 | }; | |||
25809 | ||||
25810 | MOZ_CAN_RUN_SCRIPT static bool | |||
25811 | passNullableUnionWithDefaultValue19(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25812 | { | |||
25813 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue19"); | |||
25814 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25817( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue19", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25815 | "TestExampleInterface", "passNullableUnionWithDefaultValue19", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25817( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue19", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25816 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25817( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue19", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25817 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25817( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue19", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25818 | ||||
25819 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25820 | Nullable<DoubleOrSupportedType > arg0; | |||
25821 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25822 | arg0.SetNull(); | |||
25823 | } else { | |||
25824 | if (!(args.hasDefined(0))) { | |||
25825 | arg0.SetValue().RawSetAsDouble() = 1.5; | |||
25826 | } else { | |||
25827 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25828 | return false; | |||
25829 | } | |||
25830 | } | |||
25831 | } | |||
25832 | // NOTE: This assert does NOT call the function. | |||
25833 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue19(Constify(arg0)))>, "Should be returning void here"); | |||
25834 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue19(Constify(arg0)); | |||
25835 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25835); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25835; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25836 | args.rval().setUndefined(); | |||
25837 | return true; | |||
25838 | } | |||
25839 | ||||
25840 | static const JSJitInfo passNullableUnionWithDefaultValue19_methodinfo = { | |||
25841 | { (JSJitGetterOp)passNullableUnionWithDefaultValue19 }, | |||
25842 | { prototypes::id::TestExampleInterface }, | |||
25843 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25844 | JSJitInfo::Method, | |||
25845 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25846 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25847 | false, /* isInfallible. False in setters. */ | |||
25848 | false, /* isMovable. Not relevant for setters. */ | |||
25849 | false, /* isEliminatable. Not relevant for setters. */ | |||
25850 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25851 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25852 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25853 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25854 | }; | |||
25855 | ||||
25856 | MOZ_CAN_RUN_SCRIPT static bool | |||
25857 | passNullableUnionWithDefaultValue20(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25858 | { | |||
25859 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue20"); | |||
25860 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25863( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue20", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25861 | "TestExampleInterface", "passNullableUnionWithDefaultValue20", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25863( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue20", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25862 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25863( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue20", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25863 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25863( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue20", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25864 | ||||
25865 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25866 | Nullable<DoubleOrSupportedType > arg0; | |||
25867 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
25868 | arg0.SetNull(); | |||
25869 | } else { | |||
25870 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25871 | return false; | |||
25872 | } | |||
25873 | } | |||
25874 | // NOTE: This assert does NOT call the function. | |||
25875 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue20(Constify(arg0)))>, "Should be returning void here"); | |||
25876 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue20(Constify(arg0)); | |||
25877 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25877); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25877; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25878 | args.rval().setUndefined(); | |||
25879 | return true; | |||
25880 | } | |||
25881 | ||||
25882 | static const JSJitInfo passNullableUnionWithDefaultValue20_methodinfo = { | |||
25883 | { (JSJitGetterOp)passNullableUnionWithDefaultValue20 }, | |||
25884 | { prototypes::id::TestExampleInterface }, | |||
25885 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25886 | JSJitInfo::Method, | |||
25887 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25888 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25889 | false, /* isInfallible. False in setters. */ | |||
25890 | false, /* isMovable. Not relevant for setters. */ | |||
25891 | false, /* isEliminatable. Not relevant for setters. */ | |||
25892 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25893 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25894 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25895 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25896 | }; | |||
25897 | ||||
25898 | MOZ_CAN_RUN_SCRIPT static bool | |||
25899 | passNullableUnionWithDefaultValue21(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25900 | { | |||
25901 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue21"); | |||
25902 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25905( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue21", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25903 | "TestExampleInterface", "passNullableUnionWithDefaultValue21", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25905( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue21", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25904 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25905( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue21", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25905 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25905( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue21", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25906 | ||||
25907 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25908 | Nullable<DoubleOrUSVString > arg0; | |||
25909 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25910 | arg0.SetNull(); | |||
25911 | } else { | |||
25912 | if (!(args.hasDefined(0))) { | |||
25913 | arg0.SetValue().SetStringLiteral(u"abc"); | |||
25914 | } else { | |||
25915 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25916 | return false; | |||
25917 | } | |||
25918 | } | |||
25919 | } | |||
25920 | // NOTE: This assert does NOT call the function. | |||
25921 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue21(Constify(arg0)))>, "Should be returning void here"); | |||
25922 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue21(Constify(arg0)); | |||
25923 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25923); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25923; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25924 | args.rval().setUndefined(); | |||
25925 | return true; | |||
25926 | } | |||
25927 | ||||
25928 | static const JSJitInfo passNullableUnionWithDefaultValue21_methodinfo = { | |||
25929 | { (JSJitGetterOp)passNullableUnionWithDefaultValue21 }, | |||
25930 | { prototypes::id::TestExampleInterface }, | |||
25931 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25932 | JSJitInfo::Method, | |||
25933 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25934 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25935 | false, /* isInfallible. False in setters. */ | |||
25936 | false, /* isMovable. Not relevant for setters. */ | |||
25937 | false, /* isEliminatable. Not relevant for setters. */ | |||
25938 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25939 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25940 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25941 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25942 | }; | |||
25943 | ||||
25944 | MOZ_CAN_RUN_SCRIPT static bool | |||
25945 | passNullableUnionWithDefaultValue22(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25946 | { | |||
25947 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue22"); | |||
25948 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25951( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue22", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25949 | "TestExampleInterface", "passNullableUnionWithDefaultValue22", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25951( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue22", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25950 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25951( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue22", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25951 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25951( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue22", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25952 | ||||
25953 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
25954 | Nullable<DoubleOrUSVString > arg0; | |||
25955 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
25956 | arg0.SetNull(); | |||
25957 | } else { | |||
25958 | if (!(args.hasDefined(0))) { | |||
25959 | arg0.SetValue().RawSetAsDouble() = 1.0; | |||
25960 | } else { | |||
25961 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
25962 | return false; | |||
25963 | } | |||
25964 | } | |||
25965 | } | |||
25966 | // NOTE: This assert does NOT call the function. | |||
25967 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue22(Constify(arg0)))>, "Should be returning void here"); | |||
25968 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue22(Constify(arg0)); | |||
25969 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 25969); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 25969; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
25970 | args.rval().setUndefined(); | |||
25971 | return true; | |||
25972 | } | |||
25973 | ||||
25974 | static const JSJitInfo passNullableUnionWithDefaultValue22_methodinfo = { | |||
25975 | { (JSJitGetterOp)passNullableUnionWithDefaultValue22 }, | |||
25976 | { prototypes::id::TestExampleInterface }, | |||
25977 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
25978 | JSJitInfo::Method, | |||
25979 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
25980 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
25981 | false, /* isInfallible. False in setters. */ | |||
25982 | false, /* isMovable. Not relevant for setters. */ | |||
25983 | false, /* isEliminatable. Not relevant for setters. */ | |||
25984 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
25985 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
25986 | false, /* isTypedMethod. Only relevant for methods. */ | |||
25987 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
25988 | }; | |||
25989 | ||||
25990 | MOZ_CAN_RUN_SCRIPT static bool | |||
25991 | passNullableUnionWithDefaultValue23(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
25992 | { | |||
25993 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue23"); | |||
25994 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject25997( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue23", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25995 | "TestExampleInterface", "passNullableUnionWithDefaultValue23", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject25997( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue23", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25996 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject25997( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue23", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
25997 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject25997( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue23", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
25998 | ||||
25999 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26000 | Nullable<DoubleOrUSVString > arg0; | |||
26001 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
26002 | arg0.SetNull(); | |||
26003 | } else { | |||
26004 | if (!(args.hasDefined(0))) { | |||
26005 | arg0.SetValue().RawSetAsDouble() = 1.5; | |||
26006 | } else { | |||
26007 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
26008 | return false; | |||
26009 | } | |||
26010 | } | |||
26011 | } | |||
26012 | // NOTE: This assert does NOT call the function. | |||
26013 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue23(Constify(arg0)))>, "Should be returning void here"); | |||
26014 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue23(Constify(arg0)); | |||
26015 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26015); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26015; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26016 | args.rval().setUndefined(); | |||
26017 | return true; | |||
26018 | } | |||
26019 | ||||
26020 | static const JSJitInfo passNullableUnionWithDefaultValue23_methodinfo = { | |||
26021 | { (JSJitGetterOp)passNullableUnionWithDefaultValue23 }, | |||
26022 | { prototypes::id::TestExampleInterface }, | |||
26023 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26024 | JSJitInfo::Method, | |||
26025 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26026 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26027 | false, /* isInfallible. False in setters. */ | |||
26028 | false, /* isMovable. Not relevant for setters. */ | |||
26029 | false, /* isEliminatable. Not relevant for setters. */ | |||
26030 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26031 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26032 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26033 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26034 | }; | |||
26035 | ||||
26036 | MOZ_CAN_RUN_SCRIPT static bool | |||
26037 | passNullableUnionWithDefaultValue24(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26038 | { | |||
26039 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue24"); | |||
26040 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26043( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue24", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26041 | "TestExampleInterface", "passNullableUnionWithDefaultValue24", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26043( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue24", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26042 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26043( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue24", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26043 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26043( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue24", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26044 | ||||
26045 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26046 | Nullable<DoubleOrUSVString > arg0; | |||
26047 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
26048 | arg0.SetNull(); | |||
26049 | } else { | |||
26050 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
26051 | return false; | |||
26052 | } | |||
26053 | } | |||
26054 | // NOTE: This assert does NOT call the function. | |||
26055 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue24(Constify(arg0)))>, "Should be returning void here"); | |||
26056 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue24(Constify(arg0)); | |||
26057 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26057); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26057; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26058 | args.rval().setUndefined(); | |||
26059 | return true; | |||
26060 | } | |||
26061 | ||||
26062 | static const JSJitInfo passNullableUnionWithDefaultValue24_methodinfo = { | |||
26063 | { (JSJitGetterOp)passNullableUnionWithDefaultValue24 }, | |||
26064 | { prototypes::id::TestExampleInterface }, | |||
26065 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26066 | JSJitInfo::Method, | |||
26067 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26068 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26069 | false, /* isInfallible. False in setters. */ | |||
26070 | false, /* isMovable. Not relevant for setters. */ | |||
26071 | false, /* isEliminatable. Not relevant for setters. */ | |||
26072 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26073 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26074 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26075 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26076 | }; | |||
26077 | ||||
26078 | MOZ_CAN_RUN_SCRIPT static bool | |||
26079 | passNullableUnionWithDefaultValue25(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26080 | { | |||
26081 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue25"); | |||
26082 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26085( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue25", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26083 | "TestExampleInterface", "passNullableUnionWithDefaultValue25", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26085( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue25", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26084 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26085( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue25", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26085 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26085( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue25", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26086 | ||||
26087 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26088 | Nullable<DoubleOrUTF8String > arg0; | |||
26089 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
26090 | arg0.SetNull(); | |||
26091 | } else { | |||
26092 | if (!(args.hasDefined(0))) { | |||
26093 | arg0.SetValue().SetStringLiteral(""); | |||
26094 | } else { | |||
26095 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
26096 | return false; | |||
26097 | } | |||
26098 | } | |||
26099 | } | |||
26100 | // NOTE: This assert does NOT call the function. | |||
26101 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue25(Constify(arg0)))>, "Should be returning void here"); | |||
26102 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue25(Constify(arg0)); | |||
26103 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26103); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26103; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26104 | args.rval().setUndefined(); | |||
26105 | return true; | |||
26106 | } | |||
26107 | ||||
26108 | static const JSJitInfo passNullableUnionWithDefaultValue25_methodinfo = { | |||
26109 | { (JSJitGetterOp)passNullableUnionWithDefaultValue25 }, | |||
26110 | { prototypes::id::TestExampleInterface }, | |||
26111 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26112 | JSJitInfo::Method, | |||
26113 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26114 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26115 | false, /* isInfallible. False in setters. */ | |||
26116 | false, /* isMovable. Not relevant for setters. */ | |||
26117 | false, /* isEliminatable. Not relevant for setters. */ | |||
26118 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26119 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26120 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26121 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26122 | }; | |||
26123 | ||||
26124 | MOZ_CAN_RUN_SCRIPT static bool | |||
26125 | passNullableUnionWithDefaultValue26(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26126 | { | |||
26127 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue26"); | |||
26128 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26131( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue26", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26129 | "TestExampleInterface", "passNullableUnionWithDefaultValue26", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26131( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue26", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26130 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26131( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue26", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26131 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26131( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue26", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26132 | ||||
26133 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26134 | Nullable<DoubleOrUTF8String > arg0; | |||
26135 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
26136 | arg0.SetNull(); | |||
26137 | } else { | |||
26138 | if (!(args.hasDefined(0))) { | |||
26139 | arg0.SetValue().RawSetAsDouble() = 1.0; | |||
26140 | } else { | |||
26141 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
26142 | return false; | |||
26143 | } | |||
26144 | } | |||
26145 | } | |||
26146 | // NOTE: This assert does NOT call the function. | |||
26147 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue26(Constify(arg0)))>, "Should be returning void here"); | |||
26148 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue26(Constify(arg0)); | |||
26149 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26149); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26149; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26150 | args.rval().setUndefined(); | |||
26151 | return true; | |||
26152 | } | |||
26153 | ||||
26154 | static const JSJitInfo passNullableUnionWithDefaultValue26_methodinfo = { | |||
26155 | { (JSJitGetterOp)passNullableUnionWithDefaultValue26 }, | |||
26156 | { prototypes::id::TestExampleInterface }, | |||
26157 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26158 | JSJitInfo::Method, | |||
26159 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26160 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26161 | false, /* isInfallible. False in setters. */ | |||
26162 | false, /* isMovable. Not relevant for setters. */ | |||
26163 | false, /* isEliminatable. Not relevant for setters. */ | |||
26164 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26165 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26166 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26167 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26168 | }; | |||
26169 | ||||
26170 | MOZ_CAN_RUN_SCRIPT static bool | |||
26171 | passNullableUnionWithDefaultValue27(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26172 | { | |||
26173 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue27"); | |||
26174 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26177( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue27", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26175 | "TestExampleInterface", "passNullableUnionWithDefaultValue27", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26177( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue27", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26176 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26177( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue27", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26177 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26177( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue27", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26178 | ||||
26179 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26180 | Nullable<DoubleOrUTF8String > arg0; | |||
26181 | if ((args.hasDefined(0)) && args[0].isNullOrUndefined()) { | |||
26182 | arg0.SetNull(); | |||
26183 | } else { | |||
26184 | if (!(args.hasDefined(0))) { | |||
26185 | arg0.SetValue().RawSetAsDouble() = 1.5; | |||
26186 | } else { | |||
26187 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
26188 | return false; | |||
26189 | } | |||
26190 | } | |||
26191 | } | |||
26192 | // NOTE: This assert does NOT call the function. | |||
26193 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue27(Constify(arg0)))>, "Should be returning void here"); | |||
26194 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue27(Constify(arg0)); | |||
26195 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26195); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26195; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26196 | args.rval().setUndefined(); | |||
26197 | return true; | |||
26198 | } | |||
26199 | ||||
26200 | static const JSJitInfo passNullableUnionWithDefaultValue27_methodinfo = { | |||
26201 | { (JSJitGetterOp)passNullableUnionWithDefaultValue27 }, | |||
26202 | { prototypes::id::TestExampleInterface }, | |||
26203 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26204 | JSJitInfo::Method, | |||
26205 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26206 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26207 | false, /* isInfallible. False in setters. */ | |||
26208 | false, /* isMovable. Not relevant for setters. */ | |||
26209 | false, /* isEliminatable. Not relevant for setters. */ | |||
26210 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26211 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26212 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26213 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26214 | }; | |||
26215 | ||||
26216 | MOZ_CAN_RUN_SCRIPT static bool | |||
26217 | passNullableUnionWithDefaultValue28(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26218 | { | |||
26219 | BindingCallContext cx(cx_, "TestExampleInterface.passNullableUnionWithDefaultValue28"); | |||
26220 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26223( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue28", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26221 | "TestExampleInterface", "passNullableUnionWithDefaultValue28", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26223( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue28", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26222 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26223( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue28", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26223 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26223( cx, "TestExampleInterface" , "passNullableUnionWithDefaultValue28", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26224 | ||||
26225 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26226 | Nullable<DoubleOrUTF8String > arg0; | |||
26227 | if (!(args.hasDefined(0)) || args[0].isNullOrUndefined()) { | |||
26228 | arg0.SetNull(); | |||
26229 | } else { | |||
26230 | if (!arg0.SetValue().Init(cx, args[0], "Argument 1", false)) { | |||
26231 | return false; | |||
26232 | } | |||
26233 | } | |||
26234 | // NOTE: This assert does NOT call the function. | |||
26235 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue28(Constify(arg0)))>, "Should be returning void here"); | |||
26236 | MOZ_KnownLive(self)(self)->PassNullableUnionWithDefaultValue28(Constify(arg0)); | |||
26237 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26237); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26237; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26238 | args.rval().setUndefined(); | |||
26239 | return true; | |||
26240 | } | |||
26241 | ||||
26242 | static const JSJitInfo passNullableUnionWithDefaultValue28_methodinfo = { | |||
26243 | { (JSJitGetterOp)passNullableUnionWithDefaultValue28 }, | |||
26244 | { prototypes::id::TestExampleInterface }, | |||
26245 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26246 | JSJitInfo::Method, | |||
26247 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26248 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26249 | false, /* isInfallible. False in setters. */ | |||
26250 | false, /* isMovable. Not relevant for setters. */ | |||
26251 | false, /* isEliminatable. Not relevant for setters. */ | |||
26252 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26253 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26254 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26255 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26256 | }; | |||
26257 | ||||
26258 | MOZ_CAN_RUN_SCRIPT static bool | |||
26259 | passSequenceOfUnions(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26260 | { | |||
26261 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfUnions"); | |||
26262 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26265( cx, "TestExampleInterface" , "passSequenceOfUnions", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26263 | "TestExampleInterface", "passSequenceOfUnions", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26265( cx, "TestExampleInterface" , "passSequenceOfUnions", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26264 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26265( cx, "TestExampleInterface" , "passSequenceOfUnions", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26265 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26265( cx, "TestExampleInterface" , "passSequenceOfUnions", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
26266 | ||||
26267 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26268 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfUnions", 1)) { | |||
26269 | return false; | |||
26270 | } | |||
26271 | binding_detail::AutoSequence<OwningCanvasPatternOrCanvasGradient> arg0; | |||
26272 | if (args[0].isObject()) { | |||
26273 | JS::ForOfIterator iter(cx); | |||
26274 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
26275 | return false; | |||
26276 | } | |||
26277 | if (!iter.valueIsIterable()) { | |||
26278 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
26279 | return false; | |||
26280 | } | |||
26281 | binding_detail::AutoSequence<OwningCanvasPatternOrCanvasGradient> &arr = arg0; | |||
26282 | JS::Rooted<JS::Value> temp(cx); | |||
26283 | while (true) { | |||
26284 | bool done; | |||
26285 | if (!iter.next(&temp, &done)) { | |||
26286 | return false; | |||
26287 | } | |||
26288 | if (done) { | |||
26289 | break; | |||
26290 | } | |||
26291 | OwningCanvasPatternOrCanvasGradient* slotPtr = arr.AppendElement(mozilla::fallible); | |||
26292 | if (!slotPtr) { | |||
26293 | JS_ReportOutOfMemory(cx); | |||
26294 | return false; | |||
26295 | } | |||
26296 | OwningCanvasPatternOrCanvasGradient& slot = *slotPtr; | |||
26297 | if (!slot.Init(cx, temp, "Element of argument 1", false)) { | |||
26298 | return false; | |||
26299 | } | |||
26300 | } | |||
26301 | } else { | |||
26302 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
26303 | return false; | |||
26304 | } | |||
26305 | // NOTE: This assert does NOT call the function. | |||
26306 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfUnions(Constify(arg0)))>, "Should be returning void here"); | |||
26307 | MOZ_KnownLive(self)(self)->PassSequenceOfUnions(Constify(arg0)); | |||
26308 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26308); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26308; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26309 | args.rval().setUndefined(); | |||
26310 | return true; | |||
26311 | } | |||
26312 | ||||
26313 | static const JSJitInfo passSequenceOfUnions_methodinfo = { | |||
26314 | { (JSJitGetterOp)passSequenceOfUnions }, | |||
26315 | { prototypes::id::TestExampleInterface }, | |||
26316 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26317 | JSJitInfo::Method, | |||
26318 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26319 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26320 | false, /* isInfallible. False in setters. */ | |||
26321 | false, /* isMovable. Not relevant for setters. */ | |||
26322 | false, /* isEliminatable. Not relevant for setters. */ | |||
26323 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26324 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26325 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26326 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26327 | }; | |||
26328 | ||||
26329 | MOZ_CAN_RUN_SCRIPT static bool | |||
26330 | passSequenceOfUnions2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26331 | { | |||
26332 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfUnions2"); | |||
26333 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26336( cx, "TestExampleInterface" , "passSequenceOfUnions2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26334 | "TestExampleInterface", "passSequenceOfUnions2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26336( cx, "TestExampleInterface" , "passSequenceOfUnions2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26335 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26336( cx, "TestExampleInterface" , "passSequenceOfUnions2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26336 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26336( cx, "TestExampleInterface" , "passSequenceOfUnions2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
26337 | ||||
26338 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26339 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfUnions2", 1)) { | |||
26340 | return false; | |||
26341 | } | |||
26342 | binding_detail::AutoSequence<OwningObjectOrLong> arg0; | |||
26343 | SequenceRooter<OwningObjectOrLong> arg0_holder(cx, &arg0); | |||
26344 | if (args[0].isObject()) { | |||
26345 | JS::ForOfIterator iter(cx); | |||
26346 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
26347 | return false; | |||
26348 | } | |||
26349 | if (!iter.valueIsIterable()) { | |||
26350 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
26351 | return false; | |||
26352 | } | |||
26353 | binding_detail::AutoSequence<OwningObjectOrLong> &arr = arg0; | |||
26354 | JS::Rooted<JS::Value> temp(cx); | |||
26355 | while (true) { | |||
26356 | bool done; | |||
26357 | if (!iter.next(&temp, &done)) { | |||
26358 | return false; | |||
26359 | } | |||
26360 | if (done) { | |||
26361 | break; | |||
26362 | } | |||
26363 | OwningObjectOrLong* slotPtr = arr.AppendElement(mozilla::fallible); | |||
26364 | if (!slotPtr) { | |||
26365 | JS_ReportOutOfMemory(cx); | |||
26366 | return false; | |||
26367 | } | |||
26368 | OwningObjectOrLong& slot = *slotPtr; | |||
26369 | if (!slot.Init(cx, temp, "Element of argument 1", false)) { | |||
26370 | return false; | |||
26371 | } | |||
26372 | } | |||
26373 | } else { | |||
26374 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
26375 | return false; | |||
26376 | } | |||
26377 | // NOTE: This assert does NOT call the function. | |||
26378 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfUnions2(cx, Constify(arg0)))>, "Should be returning void here"); | |||
26379 | MOZ_KnownLive(self)(self)->PassSequenceOfUnions2(cx, Constify(arg0)); | |||
26380 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26380); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26380; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26381 | args.rval().setUndefined(); | |||
26382 | return true; | |||
26383 | } | |||
26384 | ||||
26385 | static const JSJitInfo passSequenceOfUnions2_methodinfo = { | |||
26386 | { (JSJitGetterOp)passSequenceOfUnions2 }, | |||
26387 | { prototypes::id::TestExampleInterface }, | |||
26388 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26389 | JSJitInfo::Method, | |||
26390 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26391 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26392 | false, /* isInfallible. False in setters. */ | |||
26393 | false, /* isMovable. Not relevant for setters. */ | |||
26394 | false, /* isEliminatable. Not relevant for setters. */ | |||
26395 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26396 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26397 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26398 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26399 | }; | |||
26400 | ||||
26401 | MOZ_CAN_RUN_SCRIPT static bool | |||
26402 | passVariadicUnion(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26403 | { | |||
26404 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicUnion"); | |||
26405 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26408( cx, "TestExampleInterface" , "passVariadicUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26406 | "TestExampleInterface", "passVariadicUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26408( cx, "TestExampleInterface" , "passVariadicUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26407 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26408( cx, "TestExampleInterface" , "passVariadicUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26408 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26408( cx, "TestExampleInterface" , "passVariadicUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
26409 | ||||
26410 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26411 | AutoSequence<OwningCanvasPatternOrCanvasGradient> arg0; | |||
26412 | if (args.length() > 0) { | |||
26413 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
26414 | JS_ReportOutOfMemory(cx); | |||
26415 | return false; | |||
26416 | } | |||
26417 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
26418 | // OK to do infallible append here, since we ensured capacity already. | |||
26419 | OwningCanvasPatternOrCanvasGradient& slot = *arg0.AppendElement(); | |||
26420 | if (!slot.Init(cx, args[variadicArg], "Argument 1", false)) { | |||
26421 | return false; | |||
26422 | } | |||
26423 | } | |||
26424 | } | |||
26425 | // NOTE: This assert does NOT call the function. | |||
26426 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicUnion(Constify(arg0)))>, "Should be returning void here"); | |||
26427 | MOZ_KnownLive(self)(self)->PassVariadicUnion(Constify(arg0)); | |||
26428 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26428); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26428; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26429 | args.rval().setUndefined(); | |||
26430 | return true; | |||
26431 | } | |||
26432 | ||||
26433 | static const JSJitInfo passVariadicUnion_methodinfo = { | |||
26434 | { (JSJitGetterOp)passVariadicUnion }, | |||
26435 | { prototypes::id::TestExampleInterface }, | |||
26436 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26437 | JSJitInfo::Method, | |||
26438 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26439 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26440 | false, /* isInfallible. False in setters. */ | |||
26441 | false, /* isMovable. Not relevant for setters. */ | |||
26442 | false, /* isEliminatable. Not relevant for setters. */ | |||
26443 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26444 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26445 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26446 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26447 | }; | |||
26448 | ||||
26449 | MOZ_CAN_RUN_SCRIPT static bool | |||
26450 | passSequenceOfNullableUnions(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26451 | { | |||
26452 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfNullableUnions"); | |||
26453 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26456( cx, "TestExampleInterface" , "passSequenceOfNullableUnions", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26454 | "TestExampleInterface", "passSequenceOfNullableUnions", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26456( cx, "TestExampleInterface" , "passSequenceOfNullableUnions", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26455 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26456( cx, "TestExampleInterface" , "passSequenceOfNullableUnions", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26456 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26456( cx, "TestExampleInterface" , "passSequenceOfNullableUnions", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26457 | ||||
26458 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26459 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfNullableUnions", 1)) { | |||
26460 | return false; | |||
26461 | } | |||
26462 | binding_detail::AutoSequence<Nullable<OwningCanvasPatternOrCanvasGradient >> arg0; | |||
26463 | if (args[0].isObject()) { | |||
26464 | JS::ForOfIterator iter(cx); | |||
26465 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
26466 | return false; | |||
26467 | } | |||
26468 | if (!iter.valueIsIterable()) { | |||
26469 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
26470 | return false; | |||
26471 | } | |||
26472 | binding_detail::AutoSequence<Nullable<OwningCanvasPatternOrCanvasGradient >> &arr = arg0; | |||
26473 | JS::Rooted<JS::Value> temp(cx); | |||
26474 | while (true) { | |||
26475 | bool done; | |||
26476 | if (!iter.next(&temp, &done)) { | |||
26477 | return false; | |||
26478 | } | |||
26479 | if (done) { | |||
26480 | break; | |||
26481 | } | |||
26482 | Nullable<OwningCanvasPatternOrCanvasGradient >* slotPtr = arr.AppendElement(mozilla::fallible); | |||
26483 | if (!slotPtr) { | |||
26484 | JS_ReportOutOfMemory(cx); | |||
26485 | return false; | |||
26486 | } | |||
26487 | Nullable<OwningCanvasPatternOrCanvasGradient >& slot = *slotPtr; | |||
26488 | if (temp.isNullOrUndefined()) { | |||
26489 | slot.SetNull(); | |||
26490 | } else { | |||
26491 | if (!slot.SetValue().Init(cx, temp, "Element of argument 1", false)) { | |||
26492 | return false; | |||
26493 | } | |||
26494 | } | |||
26495 | } | |||
26496 | } else { | |||
26497 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
26498 | return false; | |||
26499 | } | |||
26500 | // NOTE: This assert does NOT call the function. | |||
26501 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfNullableUnions(Constify(arg0)))>, "Should be returning void here"); | |||
26502 | MOZ_KnownLive(self)(self)->PassSequenceOfNullableUnions(Constify(arg0)); | |||
26503 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26503); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26503; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26504 | args.rval().setUndefined(); | |||
26505 | return true; | |||
26506 | } | |||
26507 | ||||
26508 | static const JSJitInfo passSequenceOfNullableUnions_methodinfo = { | |||
26509 | { (JSJitGetterOp)passSequenceOfNullableUnions }, | |||
26510 | { prototypes::id::TestExampleInterface }, | |||
26511 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26512 | JSJitInfo::Method, | |||
26513 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26514 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26515 | false, /* isInfallible. False in setters. */ | |||
26516 | false, /* isMovable. Not relevant for setters. */ | |||
26517 | false, /* isEliminatable. Not relevant for setters. */ | |||
26518 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26519 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26520 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26521 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26522 | }; | |||
26523 | ||||
26524 | MOZ_CAN_RUN_SCRIPT static bool | |||
26525 | passVariadicNullableUnion(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26526 | { | |||
26527 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicNullableUnion"); | |||
26528 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26531( cx, "TestExampleInterface" , "passVariadicNullableUnion", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26529 | "TestExampleInterface", "passVariadicNullableUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26531( cx, "TestExampleInterface" , "passVariadicNullableUnion", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26530 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26531( cx, "TestExampleInterface" , "passVariadicNullableUnion", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26531 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26531( cx, "TestExampleInterface" , "passVariadicNullableUnion", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26532 | ||||
26533 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26534 | AutoSequence<Nullable<OwningCanvasPatternOrCanvasGradient >> arg0; | |||
26535 | if (args.length() > 0) { | |||
26536 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
26537 | JS_ReportOutOfMemory(cx); | |||
26538 | return false; | |||
26539 | } | |||
26540 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
26541 | // OK to do infallible append here, since we ensured capacity already. | |||
26542 | Nullable<OwningCanvasPatternOrCanvasGradient >& slot = *arg0.AppendElement(); | |||
26543 | if (args[variadicArg].isNullOrUndefined()) { | |||
26544 | slot.SetNull(); | |||
26545 | } else { | |||
26546 | if (!slot.SetValue().Init(cx, args[variadicArg], "Argument 1", false)) { | |||
26547 | return false; | |||
26548 | } | |||
26549 | } | |||
26550 | } | |||
26551 | } | |||
26552 | // NOTE: This assert does NOT call the function. | |||
26553 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicNullableUnion(Constify(arg0)))>, "Should be returning void here"); | |||
26554 | MOZ_KnownLive(self)(self)->PassVariadicNullableUnion(Constify(arg0)); | |||
26555 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26555); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26555; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26556 | args.rval().setUndefined(); | |||
26557 | return true; | |||
26558 | } | |||
26559 | ||||
26560 | static const JSJitInfo passVariadicNullableUnion_methodinfo = { | |||
26561 | { (JSJitGetterOp)passVariadicNullableUnion }, | |||
26562 | { prototypes::id::TestExampleInterface }, | |||
26563 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26564 | JSJitInfo::Method, | |||
26565 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26566 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26567 | false, /* isInfallible. False in setters. */ | |||
26568 | false, /* isMovable. Not relevant for setters. */ | |||
26569 | false, /* isEliminatable. Not relevant for setters. */ | |||
26570 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26571 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26572 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26573 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26574 | }; | |||
26575 | ||||
26576 | MOZ_CAN_RUN_SCRIPT static bool | |||
26577 | passRecordOfUnions(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26578 | { | |||
26579 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfUnions"); | |||
26580 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26583( cx, "TestExampleInterface" , "passRecordOfUnions", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26581 | "TestExampleInterface", "passRecordOfUnions", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26583( cx, "TestExampleInterface" , "passRecordOfUnions", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26582 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26583( cx, "TestExampleInterface" , "passRecordOfUnions", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26583 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26583( cx, "TestExampleInterface" , "passRecordOfUnions", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
26584 | ||||
26585 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26586 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfUnions", 1)) { | |||
26587 | return false; | |||
26588 | } | |||
26589 | Record<nsString, OwningCanvasPatternOrCanvasGradient> arg0; | |||
26590 | if (args[0].isObject()) { | |||
26591 | auto& recordEntries = arg0.Entries(); | |||
26592 | ||||
26593 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
26594 | JS::RootedVector<jsid> ids(cx); | |||
26595 | if (!js::GetPropertyKeys(cx, recordObj, | |||
26596 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
26597 | return false; | |||
26598 | } | |||
26599 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
26600 | JS_ReportOutOfMemory(cx); | |||
26601 | return false; | |||
26602 | } | |||
26603 | JS::Rooted<JS::Value> propNameValue(cx); | |||
26604 | JS::Rooted<JS::Value> temp(cx); | |||
26605 | JS::Rooted<jsid> curId(cx); | |||
26606 | JS::Rooted<JS::Value> idVal(cx); | |||
26607 | // Use a hashset to keep track of ids seen, to avoid | |||
26608 | // introducing nasty O(N^2) behavior scanning for them all the | |||
26609 | // time. Ideally we'd use a data structure with O(1) lookup | |||
26610 | // _and_ ordering for the MozMap, but we don't have one lying | |||
26611 | // around. | |||
26612 | nsTHashtable<nsStringHashKey> idsSeen; | |||
26613 | for (size_t i = 0; i < ids.length(); ++i) { | |||
26614 | curId = ids[i]; | |||
26615 | ||||
26616 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
26617 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
26618 | &desc)) { | |||
26619 | return false; | |||
26620 | } | |||
26621 | ||||
26622 | if (desc.isNothing() || !desc->enumerable()) { | |||
26623 | continue; | |||
26624 | } | |||
26625 | ||||
26626 | idVal = js::IdToValue(curId); | |||
26627 | nsString propName; | |||
26628 | // This will just throw if idVal is a Symbol, like the spec says | |||
26629 | // to do. | |||
26630 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
26631 | return false; | |||
26632 | } | |||
26633 | ||||
26634 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
26635 | return false; | |||
26636 | } | |||
26637 | ||||
26638 | Record<nsString, OwningCanvasPatternOrCanvasGradient>::EntryType* entry; | |||
26639 | if (!idsSeen.EnsureInserted(propName)) { | |||
26640 | // Find the existing entry. | |||
26641 | auto idx = recordEntries.IndexOf(propName); | |||
26642 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 26643); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 26643; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
26643 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 26643); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 26643; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
26644 | // Now blow it away to make it look like it was just added | |||
26645 | // to the array, because it's not obvious that it's | |||
26646 | // safe to write to its already-initialized mValue via our | |||
26647 | // normal codegen conversions. For example, the value | |||
26648 | // could be a union and this would change its type, but | |||
26649 | // codegen assumes we won't do that. | |||
26650 | entry = recordEntries.ReconstructElementAt(idx); | |||
26651 | } else { | |||
26652 | // Safe to do an infallible append here, because we did a | |||
26653 | // SetCapacity above to the right capacity. | |||
26654 | entry = recordEntries.AppendElement(); | |||
26655 | } | |||
26656 | entry->mKey = propName; | |||
26657 | OwningCanvasPatternOrCanvasGradient& slot = entry->mValue; | |||
26658 | if (!slot.Init(cx, temp, "Value in argument 1", false)) { | |||
26659 | return false; | |||
26660 | } | |||
26661 | } | |||
26662 | } else { | |||
26663 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
26664 | return false; | |||
26665 | } | |||
26666 | // NOTE: This assert does NOT call the function. | |||
26667 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfUnions(Constify(arg0)))>, "Should be returning void here"); | |||
26668 | MOZ_KnownLive(self)(self)->PassRecordOfUnions(Constify(arg0)); | |||
26669 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26669); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26669; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26670 | args.rval().setUndefined(); | |||
26671 | return true; | |||
26672 | } | |||
26673 | ||||
26674 | static const JSJitInfo passRecordOfUnions_methodinfo = { | |||
26675 | { (JSJitGetterOp)passRecordOfUnions }, | |||
26676 | { prototypes::id::TestExampleInterface }, | |||
26677 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26678 | JSJitInfo::Method, | |||
26679 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26680 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
26681 | false, /* isInfallible. False in setters. */ | |||
26682 | false, /* isMovable. Not relevant for setters. */ | |||
26683 | false, /* isEliminatable. Not relevant for setters. */ | |||
26684 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26685 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26686 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26687 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26688 | }; | |||
26689 | ||||
26690 | MOZ_CAN_RUN_SCRIPT static bool | |||
26691 | receiveUnion(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26692 | { | |||
26693 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26696( cx, "TestExampleInterface" , "receiveUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26694 | "TestExampleInterface", "receiveUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26696( cx, "TestExampleInterface" , "receiveUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26695 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26696( cx, "TestExampleInterface" , "receiveUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26696 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26696( cx, "TestExampleInterface" , "receiveUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
26697 | ||||
26698 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26699 | OwningCanvasPatternOrCanvasGradient result; | |||
26700 | // NOTE: This assert does NOT call the function. | |||
26701 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveUnion(result))>, "Should be returning void here"); | |||
26702 | MOZ_KnownLive(self)(self)->ReceiveUnion(result); | |||
26703 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26703); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26703; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26704 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
26705 | return false; | |||
26706 | } | |||
26707 | return true; | |||
26708 | } | |||
26709 | ||||
26710 | static const JSJitInfo receiveUnion_methodinfo = { | |||
26711 | { (JSJitGetterOp)receiveUnion }, | |||
26712 | { prototypes::id::TestExampleInterface }, | |||
26713 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26714 | JSJitInfo::Method, | |||
26715 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26716 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
26717 | false, /* isInfallible. False in setters. */ | |||
26718 | false, /* isMovable. Not relevant for setters. */ | |||
26719 | false, /* isEliminatable. Not relevant for setters. */ | |||
26720 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26721 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26722 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26723 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26724 | }; | |||
26725 | ||||
26726 | MOZ_CAN_RUN_SCRIPT static bool | |||
26727 | receiveUnion2(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26728 | { | |||
26729 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26732( cx, "TestExampleInterface" , "receiveUnion2", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26730 | "TestExampleInterface", "receiveUnion2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26732( cx, "TestExampleInterface" , "receiveUnion2", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26731 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26732( cx, "TestExampleInterface" , "receiveUnion2", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26732 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26732( cx, "TestExampleInterface" , "receiveUnion2", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
26733 | ||||
26734 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26735 | RootedUnion<OwningObjectOrLong> result(cx); | |||
26736 | // NOTE: This assert does NOT call the function. | |||
26737 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveUnion2(cx, result))>, "Should be returning void here"); | |||
26738 | MOZ_KnownLive(self)(self)->ReceiveUnion2(cx, result); | |||
26739 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26739); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26739; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26740 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
26741 | return false; | |||
26742 | } | |||
26743 | return true; | |||
26744 | } | |||
26745 | ||||
26746 | static const JSJitInfo receiveUnion2_methodinfo = { | |||
26747 | { (JSJitGetterOp)receiveUnion2 }, | |||
26748 | { prototypes::id::TestExampleInterface }, | |||
26749 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26750 | JSJitInfo::Method, | |||
26751 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26752 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
26753 | false, /* isInfallible. False in setters. */ | |||
26754 | false, /* isMovable. Not relevant for setters. */ | |||
26755 | false, /* isEliminatable. Not relevant for setters. */ | |||
26756 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26757 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26758 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26759 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26760 | }; | |||
26761 | ||||
26762 | MOZ_CAN_RUN_SCRIPT static bool | |||
26763 | receiveUnionContainingNull(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26764 | { | |||
26765 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26768( cx, "TestExampleInterface" , "receiveUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26766 | "TestExampleInterface", "receiveUnionContainingNull", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26768( cx, "TestExampleInterface" , "receiveUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26767 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26768( cx, "TestExampleInterface" , "receiveUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26768 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26768( cx, "TestExampleInterface" , "receiveUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26769 | ||||
26770 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26771 | OwningCanvasPatternOrNullOrCanvasGradient result; | |||
26772 | // NOTE: This assert does NOT call the function. | |||
26773 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveUnionContainingNull(result))>, "Should be returning void here"); | |||
26774 | MOZ_KnownLive(self)(self)->ReceiveUnionContainingNull(result); | |||
26775 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26775); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26775; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26776 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
26777 | return false; | |||
26778 | } | |||
26779 | return true; | |||
26780 | } | |||
26781 | ||||
26782 | static const JSJitInfo receiveUnionContainingNull_methodinfo = { | |||
26783 | { (JSJitGetterOp)receiveUnionContainingNull }, | |||
26784 | { prototypes::id::TestExampleInterface }, | |||
26785 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26786 | JSJitInfo::Method, | |||
26787 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26788 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
26789 | false, /* isInfallible. False in setters. */ | |||
26790 | false, /* isMovable. Not relevant for setters. */ | |||
26791 | false, /* isEliminatable. Not relevant for setters. */ | |||
26792 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26793 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26794 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26795 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26796 | }; | |||
26797 | ||||
26798 | MOZ_CAN_RUN_SCRIPT static bool | |||
26799 | receiveNullableUnion(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26800 | { | |||
26801 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26804( cx, "TestExampleInterface" , "receiveNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26802 | "TestExampleInterface", "receiveNullableUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26804( cx, "TestExampleInterface" , "receiveNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26803 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26804( cx, "TestExampleInterface" , "receiveNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26804 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26804( cx, "TestExampleInterface" , "receiveNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
26805 | ||||
26806 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26807 | Nullable<OwningCanvasPatternOrCanvasGradient> result; | |||
26808 | // NOTE: This assert does NOT call the function. | |||
26809 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableUnion(result))>, "Should be returning void here"); | |||
26810 | MOZ_KnownLive(self)(self)->ReceiveNullableUnion(result); | |||
26811 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26811); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26811; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26812 | if (result.IsNull()) { | |||
26813 | args.rval().setNull(); | |||
26814 | return true; | |||
26815 | } | |||
26816 | if (!result.Value().ToJSVal(cx, obj, args.rval())) { | |||
26817 | return false; | |||
26818 | } | |||
26819 | return true; | |||
26820 | } | |||
26821 | ||||
26822 | static const JSJitInfo receiveNullableUnion_methodinfo = { | |||
26823 | { (JSJitGetterOp)receiveNullableUnion }, | |||
26824 | { prototypes::id::TestExampleInterface }, | |||
26825 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26826 | JSJitInfo::Method, | |||
26827 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26828 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
26829 | false, /* isInfallible. False in setters. */ | |||
26830 | false, /* isMovable. Not relevant for setters. */ | |||
26831 | false, /* isEliminatable. Not relevant for setters. */ | |||
26832 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26833 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26834 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26835 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26836 | }; | |||
26837 | ||||
26838 | MOZ_CAN_RUN_SCRIPT static bool | |||
26839 | receiveNullableUnion2(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26840 | { | |||
26841 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26844( cx, "TestExampleInterface" , "receiveNullableUnion2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26842 | "TestExampleInterface", "receiveNullableUnion2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26844( cx, "TestExampleInterface" , "receiveNullableUnion2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26843 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26844( cx, "TestExampleInterface" , "receiveNullableUnion2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
26844 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26844( cx, "TestExampleInterface" , "receiveNullableUnion2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
26845 | ||||
26846 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26847 | NullableRootedUnion<OwningObjectOrLong> result(cx); | |||
26848 | // NOTE: This assert does NOT call the function. | |||
26849 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableUnion2(cx, result))>, "Should be returning void here"); | |||
26850 | MOZ_KnownLive(self)(self)->ReceiveNullableUnion2(cx, result); | |||
26851 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26851); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26851; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26852 | if (result.IsNull()) { | |||
26853 | args.rval().setNull(); | |||
26854 | return true; | |||
26855 | } | |||
26856 | if (!result.Value().ToJSVal(cx, obj, args.rval())) { | |||
26857 | return false; | |||
26858 | } | |||
26859 | return true; | |||
26860 | } | |||
26861 | ||||
26862 | static const JSJitInfo receiveNullableUnion2_methodinfo = { | |||
26863 | { (JSJitGetterOp)receiveNullableUnion2 }, | |||
26864 | { prototypes::id::TestExampleInterface }, | |||
26865 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26866 | JSJitInfo::Method, | |||
26867 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26868 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
26869 | false, /* isInfallible. False in setters. */ | |||
26870 | false, /* isMovable. Not relevant for setters. */ | |||
26871 | false, /* isEliminatable. Not relevant for setters. */ | |||
26872 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26873 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26874 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26875 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26876 | }; | |||
26877 | ||||
26878 | MOZ_CAN_RUN_SCRIPT static bool | |||
26879 | receiveUnionWithUndefined(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26880 | { | |||
26881 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26884( cx, "TestExampleInterface" , "receiveUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26882 | "TestExampleInterface", "receiveUnionWithUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26884( cx, "TestExampleInterface" , "receiveUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26883 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26884( cx, "TestExampleInterface" , "receiveUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26884 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26884( cx, "TestExampleInterface" , "receiveUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26885 | ||||
26886 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26887 | OwningUndefinedOrCanvasPattern result; | |||
26888 | // NOTE: This assert does NOT call the function. | |||
26889 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveUnionWithUndefined(result))>, "Should be returning void here"); | |||
26890 | MOZ_KnownLive(self)(self)->ReceiveUnionWithUndefined(result); | |||
26891 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26891); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26891; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26892 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
26893 | return false; | |||
26894 | } | |||
26895 | return true; | |||
26896 | } | |||
26897 | ||||
26898 | static const JSJitInfo receiveUnionWithUndefined_methodinfo = { | |||
26899 | { (JSJitGetterOp)receiveUnionWithUndefined }, | |||
26900 | { prototypes::id::TestExampleInterface }, | |||
26901 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26902 | JSJitInfo::Method, | |||
26903 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26904 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
26905 | false, /* isInfallible. False in setters. */ | |||
26906 | false, /* isMovable. Not relevant for setters. */ | |||
26907 | false, /* isEliminatable. Not relevant for setters. */ | |||
26908 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26909 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26910 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26911 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26912 | }; | |||
26913 | ||||
26914 | MOZ_CAN_RUN_SCRIPT static bool | |||
26915 | receiveUnionWithNullableUndefined(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26916 | { | |||
26917 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26920( cx, "TestExampleInterface" , "receiveUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26918 | "TestExampleInterface", "receiveUnionWithNullableUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26920( cx, "TestExampleInterface" , "receiveUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26919 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26920( cx, "TestExampleInterface" , "receiveUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26920 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26920( cx, "TestExampleInterface" , "receiveUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26921 | ||||
26922 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26923 | OwningUndefinedOrNullOrCanvasPattern result; | |||
26924 | // NOTE: This assert does NOT call the function. | |||
26925 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveUnionWithNullableUndefined(result))>, "Should be returning void here"); | |||
26926 | MOZ_KnownLive(self)(self)->ReceiveUnionWithNullableUndefined(result); | |||
26927 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26927); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26927; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26928 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
26929 | return false; | |||
26930 | } | |||
26931 | return true; | |||
26932 | } | |||
26933 | ||||
26934 | static const JSJitInfo receiveUnionWithNullableUndefined_methodinfo = { | |||
26935 | { (JSJitGetterOp)receiveUnionWithNullableUndefined }, | |||
26936 | { prototypes::id::TestExampleInterface }, | |||
26937 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26938 | JSJitInfo::Method, | |||
26939 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26940 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
26941 | false, /* isInfallible. False in setters. */ | |||
26942 | false, /* isMovable. Not relevant for setters. */ | |||
26943 | false, /* isEliminatable. Not relevant for setters. */ | |||
26944 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26945 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26946 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26947 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26948 | }; | |||
26949 | ||||
26950 | MOZ_CAN_RUN_SCRIPT static bool | |||
26951 | receiveUnionWithUndefinedAndNullable(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26952 | { | |||
26953 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26956( cx, "TestExampleInterface" , "receiveUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26954 | "TestExampleInterface", "receiveUnionWithUndefinedAndNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26956( cx, "TestExampleInterface" , "receiveUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26955 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26956( cx, "TestExampleInterface" , "receiveUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26956 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26956( cx, "TestExampleInterface" , "receiveUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26957 | ||||
26958 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26959 | OwningUndefinedOrCanvasPatternOrNull result; | |||
26960 | // NOTE: This assert does NOT call the function. | |||
26961 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveUnionWithUndefinedAndNullable(result))>, "Should be returning void here"); | |||
26962 | MOZ_KnownLive(self)(self)->ReceiveUnionWithUndefinedAndNullable(result); | |||
26963 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26963); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26963; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
26964 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
26965 | return false; | |||
26966 | } | |||
26967 | return true; | |||
26968 | } | |||
26969 | ||||
26970 | static const JSJitInfo receiveUnionWithUndefinedAndNullable_methodinfo = { | |||
26971 | { (JSJitGetterOp)receiveUnionWithUndefinedAndNullable }, | |||
26972 | { prototypes::id::TestExampleInterface }, | |||
26973 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
26974 | JSJitInfo::Method, | |||
26975 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
26976 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
26977 | false, /* isInfallible. False in setters. */ | |||
26978 | false, /* isMovable. Not relevant for setters. */ | |||
26979 | false, /* isEliminatable. Not relevant for setters. */ | |||
26980 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
26981 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
26982 | false, /* isTypedMethod. Only relevant for methods. */ | |||
26983 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
26984 | }; | |||
26985 | ||||
26986 | MOZ_CAN_RUN_SCRIPT static bool | |||
26987 | receiveNullableUnionWithUndefined(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
26988 | { | |||
26989 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject26992( cx, "TestExampleInterface" , "receiveNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26990 | "TestExampleInterface", "receiveNullableUnionWithUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject26992( cx, "TestExampleInterface" , "receiveNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26991 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject26992( cx, "TestExampleInterface" , "receiveNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
26992 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject26992( cx, "TestExampleInterface" , "receiveNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
26993 | ||||
26994 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
26995 | Nullable<OwningUndefinedOrCanvasPattern> result; | |||
26996 | // NOTE: This assert does NOT call the function. | |||
26997 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableUnionWithUndefined(result))>, "Should be returning void here"); | |||
26998 | MOZ_KnownLive(self)(self)->ReceiveNullableUnionWithUndefined(result); | |||
26999 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 26999); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 26999; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27000 | if (result.IsNull()) { | |||
27001 | args.rval().setNull(); | |||
27002 | return true; | |||
27003 | } | |||
27004 | if (!result.Value().ToJSVal(cx, obj, args.rval())) { | |||
27005 | return false; | |||
27006 | } | |||
27007 | return true; | |||
27008 | } | |||
27009 | ||||
27010 | static const JSJitInfo receiveNullableUnionWithUndefined_methodinfo = { | |||
27011 | { (JSJitGetterOp)receiveNullableUnionWithUndefined }, | |||
27012 | { prototypes::id::TestExampleInterface }, | |||
27013 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27014 | JSJitInfo::Method, | |||
27015 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27016 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
27017 | false, /* isInfallible. False in setters. */ | |||
27018 | false, /* isMovable. Not relevant for setters. */ | |||
27019 | false, /* isEliminatable. Not relevant for setters. */ | |||
27020 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27021 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27022 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27023 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27024 | }; | |||
27025 | ||||
27026 | MOZ_CAN_RUN_SCRIPT static bool | |||
27027 | get_writableUnion(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
27028 | { | |||
27029 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27032( cx, "TestExampleInterface" , "writableUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27030 | "TestExampleInterface", "writableUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27032( cx, "TestExampleInterface" , "writableUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27031 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject27032( cx, "TestExampleInterface" , "writableUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27032 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27032( cx, "TestExampleInterface" , "writableUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27033 | ||||
27034 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27035 | OwningCanvasPatternOrCanvasGradient result; | |||
27036 | // NOTE: This assert does NOT call the function. | |||
27037 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableUnion(result))>, "Should be returning void here"); | |||
27038 | MOZ_KnownLive(self)(self)->GetWritableUnion(result); | |||
27039 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27039); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27039; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27040 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
27041 | return false; | |||
27042 | } | |||
27043 | return true; | |||
27044 | } | |||
27045 | ||||
27046 | MOZ_CAN_RUN_SCRIPT static bool | |||
27047 | set_writableUnion(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
27048 | { | |||
27049 | BindingCallContext cx(cx_, "TestExampleInterface.writableUnion setter"); | |||
27050 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27053( cx, "TestExampleInterface" , "writableUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27051 | "TestExampleInterface", "writableUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27053( cx, "TestExampleInterface" , "writableUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27052 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject27053( cx, "TestExampleInterface" , "writableUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27053 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27053( cx, "TestExampleInterface" , "writableUnion", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27054 | ||||
27055 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27056 | CanvasPatternOrCanvasGradient arg0; | |||
27057 | if (!arg0.Init(cx, args[0], "Value being assigned", false)) { | |||
27058 | return false; | |||
27059 | } | |||
27060 | // NOTE: This assert does NOT call the function. | |||
27061 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnion(Constify(arg0)))>, "Should be returning void here"); | |||
27062 | MOZ_KnownLive(self)(self)->SetWritableUnion(Constify(arg0)); | |||
27063 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27063); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27063; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27064 | ||||
27065 | return true; | |||
27066 | } | |||
27067 | ||||
27068 | static const JSJitInfo writableUnion_getterinfo = { | |||
27069 | { get_writableUnion }, | |||
27070 | { prototypes::id::TestExampleInterface }, | |||
27071 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27072 | JSJitInfo::Getter, | |||
27073 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27074 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
27075 | false, /* isInfallible. False in setters. */ | |||
27076 | false, /* isMovable. Not relevant for setters. */ | |||
27077 | false, /* isEliminatable. Not relevant for setters. */ | |||
27078 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27079 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27080 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27081 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27082 | }; | |||
27083 | static const JSJitInfo writableUnion_setterinfo = { | |||
27084 | { (JSJitGetterOp)set_writableUnion }, | |||
27085 | { prototypes::id::TestExampleInterface }, | |||
27086 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27087 | JSJitInfo::Setter, | |||
27088 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27089 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27090 | false, /* isInfallible. False in setters. */ | |||
27091 | false, /* isMovable. Not relevant for setters. */ | |||
27092 | false, /* isEliminatable. Not relevant for setters. */ | |||
27093 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27094 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27095 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27096 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27097 | }; | |||
27098 | ||||
27099 | MOZ_CAN_RUN_SCRIPT static bool | |||
27100 | get_writableUnionContainingNull(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
27101 | { | |||
27102 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27105( cx, "TestExampleInterface" , "writableUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27103 | "TestExampleInterface", "writableUnionContainingNull", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27105( cx, "TestExampleInterface" , "writableUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27104 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject27105( cx, "TestExampleInterface" , "writableUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27105 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27105( cx, "TestExampleInterface" , "writableUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27106 | ||||
27107 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27108 | OwningCanvasPatternOrNullOrCanvasGradient result; | |||
27109 | // NOTE: This assert does NOT call the function. | |||
27110 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableUnionContainingNull(result))>, "Should be returning void here"); | |||
27111 | MOZ_KnownLive(self)(self)->GetWritableUnionContainingNull(result); | |||
27112 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27112); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27112; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27113 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
27114 | return false; | |||
27115 | } | |||
27116 | return true; | |||
27117 | } | |||
27118 | ||||
27119 | MOZ_CAN_RUN_SCRIPT static bool | |||
27120 | set_writableUnionContainingNull(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
27121 | { | |||
27122 | BindingCallContext cx(cx_, "TestExampleInterface.writableUnionContainingNull setter"); | |||
27123 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27126( cx, "TestExampleInterface" , "writableUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27124 | "TestExampleInterface", "writableUnionContainingNull", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27126( cx, "TestExampleInterface" , "writableUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27125 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject27126( cx, "TestExampleInterface" , "writableUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27126 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27126( cx, "TestExampleInterface" , "writableUnionContainingNull", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27127 | ||||
27128 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27129 | CanvasPatternOrNullOrCanvasGradient arg0; | |||
27130 | if (!arg0.Init(cx, args[0], "Value being assigned", false)) { | |||
27131 | return false; | |||
27132 | } | |||
27133 | // NOTE: This assert does NOT call the function. | |||
27134 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnionContainingNull(Constify(arg0)))>, "Should be returning void here"); | |||
27135 | MOZ_KnownLive(self)(self)->SetWritableUnionContainingNull(Constify(arg0)); | |||
27136 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27136); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27136; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27137 | ||||
27138 | return true; | |||
27139 | } | |||
27140 | ||||
27141 | static const JSJitInfo writableUnionContainingNull_getterinfo = { | |||
27142 | { get_writableUnionContainingNull }, | |||
27143 | { prototypes::id::TestExampleInterface }, | |||
27144 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27145 | JSJitInfo::Getter, | |||
27146 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27147 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
27148 | false, /* isInfallible. False in setters. */ | |||
27149 | false, /* isMovable. Not relevant for setters. */ | |||
27150 | false, /* isEliminatable. Not relevant for setters. */ | |||
27151 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27152 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27153 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27154 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27155 | }; | |||
27156 | static const JSJitInfo writableUnionContainingNull_setterinfo = { | |||
27157 | { (JSJitGetterOp)set_writableUnionContainingNull }, | |||
27158 | { prototypes::id::TestExampleInterface }, | |||
27159 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27160 | JSJitInfo::Setter, | |||
27161 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27162 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27163 | false, /* isInfallible. False in setters. */ | |||
27164 | false, /* isMovable. Not relevant for setters. */ | |||
27165 | false, /* isEliminatable. Not relevant for setters. */ | |||
27166 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27167 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27168 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27169 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27170 | }; | |||
27171 | ||||
27172 | MOZ_CAN_RUN_SCRIPT static bool | |||
27173 | get_writableNullableUnion(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
27174 | { | |||
27175 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27178( cx, "TestExampleInterface" , "writableNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27176 | "TestExampleInterface", "writableNullableUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27178( cx, "TestExampleInterface" , "writableNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27177 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject27178( cx, "TestExampleInterface" , "writableNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27178 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27178( cx, "TestExampleInterface" , "writableNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27179 | ||||
27180 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27181 | Nullable<OwningCanvasPatternOrCanvasGradient> result; | |||
27182 | // NOTE: This assert does NOT call the function. | |||
27183 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableNullableUnion(result))>, "Should be returning void here"); | |||
27184 | MOZ_KnownLive(self)(self)->GetWritableNullableUnion(result); | |||
27185 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27185); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27185; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27186 | if (result.IsNull()) { | |||
27187 | args.rval().setNull(); | |||
27188 | return true; | |||
27189 | } | |||
27190 | if (!result.Value().ToJSVal(cx, obj, args.rval())) { | |||
27191 | return false; | |||
27192 | } | |||
27193 | return true; | |||
27194 | } | |||
27195 | ||||
27196 | MOZ_CAN_RUN_SCRIPT static bool | |||
27197 | set_writableNullableUnion(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
27198 | { | |||
27199 | BindingCallContext cx(cx_, "TestExampleInterface.writableNullableUnion setter"); | |||
27200 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27203( cx, "TestExampleInterface" , "writableNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27201 | "TestExampleInterface", "writableNullableUnion", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27203( cx, "TestExampleInterface" , "writableNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27202 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject27203( cx, "TestExampleInterface" , "writableNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27203 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27203( cx, "TestExampleInterface" , "writableNullableUnion", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27204 | ||||
27205 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27206 | Nullable<CanvasPatternOrCanvasGradient > arg0; | |||
27207 | if (args[0].isNullOrUndefined()) { | |||
27208 | arg0.SetNull(); | |||
27209 | } else { | |||
27210 | if (!arg0.SetValue().Init(cx, args[0], "Value being assigned", false)) { | |||
27211 | return false; | |||
27212 | } | |||
27213 | } | |||
27214 | // NOTE: This assert does NOT call the function. | |||
27215 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableNullableUnion(Constify(arg0)))>, "Should be returning void here"); | |||
27216 | MOZ_KnownLive(self)(self)->SetWritableNullableUnion(Constify(arg0)); | |||
27217 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27217); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27217; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27218 | ||||
27219 | return true; | |||
27220 | } | |||
27221 | ||||
27222 | static const JSJitInfo writableNullableUnion_getterinfo = { | |||
27223 | { get_writableNullableUnion }, | |||
27224 | { prototypes::id::TestExampleInterface }, | |||
27225 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27226 | JSJitInfo::Getter, | |||
27227 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27228 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
27229 | false, /* isInfallible. False in setters. */ | |||
27230 | false, /* isMovable. Not relevant for setters. */ | |||
27231 | false, /* isEliminatable. Not relevant for setters. */ | |||
27232 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27233 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27234 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27235 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27236 | }; | |||
27237 | static const JSJitInfo writableNullableUnion_setterinfo = { | |||
27238 | { (JSJitGetterOp)set_writableNullableUnion }, | |||
27239 | { prototypes::id::TestExampleInterface }, | |||
27240 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27241 | JSJitInfo::Setter, | |||
27242 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27243 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27244 | false, /* isInfallible. False in setters. */ | |||
27245 | false, /* isMovable. Not relevant for setters. */ | |||
27246 | false, /* isEliminatable. Not relevant for setters. */ | |||
27247 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27248 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27249 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27250 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27251 | }; | |||
27252 | ||||
27253 | MOZ_CAN_RUN_SCRIPT static bool | |||
27254 | get_writableUnionWithUndefined(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
27255 | { | |||
27256 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27259( cx, "TestExampleInterface" , "writableUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27257 | "TestExampleInterface", "writableUnionWithUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27259( cx, "TestExampleInterface" , "writableUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27258 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject27259( cx, "TestExampleInterface" , "writableUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27259 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27259( cx, "TestExampleInterface" , "writableUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27260 | ||||
27261 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27262 | OwningUndefinedOrCanvasPattern result; | |||
27263 | // NOTE: This assert does NOT call the function. | |||
27264 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableUnionWithUndefined(result))>, "Should be returning void here"); | |||
27265 | MOZ_KnownLive(self)(self)->GetWritableUnionWithUndefined(result); | |||
27266 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27266); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27266; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27267 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
27268 | return false; | |||
27269 | } | |||
27270 | return true; | |||
27271 | } | |||
27272 | ||||
27273 | MOZ_CAN_RUN_SCRIPT static bool | |||
27274 | set_writableUnionWithUndefined(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
27275 | { | |||
27276 | BindingCallContext cx(cx_, "TestExampleInterface.writableUnionWithUndefined setter"); | |||
27277 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27280( cx, "TestExampleInterface" , "writableUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27278 | "TestExampleInterface", "writableUnionWithUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27280( cx, "TestExampleInterface" , "writableUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27279 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject27280( cx, "TestExampleInterface" , "writableUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27280 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27280( cx, "TestExampleInterface" , "writableUnionWithUndefined", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27281 | ||||
27282 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27283 | UndefinedOrCanvasPattern arg0; | |||
27284 | if (!arg0.Init(cx, args[0], "Value being assigned", false)) { | |||
27285 | return false; | |||
27286 | } | |||
27287 | // NOTE: This assert does NOT call the function. | |||
27288 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnionWithUndefined(Constify(arg0)))>, "Should be returning void here"); | |||
27289 | MOZ_KnownLive(self)(self)->SetWritableUnionWithUndefined(Constify(arg0)); | |||
27290 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27290); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27290; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27291 | ||||
27292 | return true; | |||
27293 | } | |||
27294 | ||||
27295 | static const JSJitInfo writableUnionWithUndefined_getterinfo = { | |||
27296 | { get_writableUnionWithUndefined }, | |||
27297 | { prototypes::id::TestExampleInterface }, | |||
27298 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27299 | JSJitInfo::Getter, | |||
27300 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27301 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
27302 | false, /* isInfallible. False in setters. */ | |||
27303 | false, /* isMovable. Not relevant for setters. */ | |||
27304 | false, /* isEliminatable. Not relevant for setters. */ | |||
27305 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27306 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27307 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27308 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27309 | }; | |||
27310 | static const JSJitInfo writableUnionWithUndefined_setterinfo = { | |||
27311 | { (JSJitGetterOp)set_writableUnionWithUndefined }, | |||
27312 | { prototypes::id::TestExampleInterface }, | |||
27313 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27314 | JSJitInfo::Setter, | |||
27315 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27316 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27317 | false, /* isInfallible. False in setters. */ | |||
27318 | false, /* isMovable. Not relevant for setters. */ | |||
27319 | false, /* isEliminatable. Not relevant for setters. */ | |||
27320 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27321 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27322 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27323 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27324 | }; | |||
27325 | ||||
27326 | MOZ_CAN_RUN_SCRIPT static bool | |||
27327 | get_writableUnionWithNullableUndefined(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
27328 | { | |||
27329 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27332( cx, "TestExampleInterface" , "writableUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27330 | "TestExampleInterface", "writableUnionWithNullableUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27332( cx, "TestExampleInterface" , "writableUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27331 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject27332( cx, "TestExampleInterface" , "writableUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27332 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27332( cx, "TestExampleInterface" , "writableUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27333 | ||||
27334 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27335 | OwningUndefinedOrNullOrCanvasPattern result; | |||
27336 | // NOTE: This assert does NOT call the function. | |||
27337 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableUnionWithNullableUndefined(result))>, "Should be returning void here"); | |||
27338 | MOZ_KnownLive(self)(self)->GetWritableUnionWithNullableUndefined(result); | |||
27339 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27339); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27339; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27340 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
27341 | return false; | |||
27342 | } | |||
27343 | return true; | |||
27344 | } | |||
27345 | ||||
27346 | MOZ_CAN_RUN_SCRIPT static bool | |||
27347 | set_writableUnionWithNullableUndefined(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
27348 | { | |||
27349 | BindingCallContext cx(cx_, "TestExampleInterface.writableUnionWithNullableUndefined setter"); | |||
27350 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27353( cx, "TestExampleInterface" , "writableUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27351 | "TestExampleInterface", "writableUnionWithNullableUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27353( cx, "TestExampleInterface" , "writableUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27352 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject27353( cx, "TestExampleInterface" , "writableUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27353 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27353( cx, "TestExampleInterface" , "writableUnionWithNullableUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27354 | ||||
27355 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27356 | UndefinedOrNullOrCanvasPattern arg0; | |||
27357 | if (!arg0.Init(cx, args[0], "Value being assigned", false)) { | |||
27358 | return false; | |||
27359 | } | |||
27360 | // NOTE: This assert does NOT call the function. | |||
27361 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnionWithNullableUndefined(Constify(arg0)))>, "Should be returning void here"); | |||
27362 | MOZ_KnownLive(self)(self)->SetWritableUnionWithNullableUndefined(Constify(arg0)); | |||
27363 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27363); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27363; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27364 | ||||
27365 | return true; | |||
27366 | } | |||
27367 | ||||
27368 | static const JSJitInfo writableUnionWithNullableUndefined_getterinfo = { | |||
27369 | { get_writableUnionWithNullableUndefined }, | |||
27370 | { prototypes::id::TestExampleInterface }, | |||
27371 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27372 | JSJitInfo::Getter, | |||
27373 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27374 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
27375 | false, /* isInfallible. False in setters. */ | |||
27376 | false, /* isMovable. Not relevant for setters. */ | |||
27377 | false, /* isEliminatable. Not relevant for setters. */ | |||
27378 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27379 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27380 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27381 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27382 | }; | |||
27383 | static const JSJitInfo writableUnionWithNullableUndefined_setterinfo = { | |||
27384 | { (JSJitGetterOp)set_writableUnionWithNullableUndefined }, | |||
27385 | { prototypes::id::TestExampleInterface }, | |||
27386 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27387 | JSJitInfo::Setter, | |||
27388 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27389 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27390 | false, /* isInfallible. False in setters. */ | |||
27391 | false, /* isMovable. Not relevant for setters. */ | |||
27392 | false, /* isEliminatable. Not relevant for setters. */ | |||
27393 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27394 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27395 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27396 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27397 | }; | |||
27398 | ||||
27399 | MOZ_CAN_RUN_SCRIPT static bool | |||
27400 | get_writableUnionWithUndefinedAndNullable(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
27401 | { | |||
27402 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27405( cx, "TestExampleInterface" , "writableUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27403 | "TestExampleInterface", "writableUnionWithUndefinedAndNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27405( cx, "TestExampleInterface" , "writableUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27404 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject27405( cx, "TestExampleInterface" , "writableUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27405 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27405( cx, "TestExampleInterface" , "writableUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27406 | ||||
27407 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27408 | OwningUndefinedOrCanvasPatternOrNull result; | |||
27409 | // NOTE: This assert does NOT call the function. | |||
27410 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableUnionWithUndefinedAndNullable(result))>, "Should be returning void here"); | |||
27411 | MOZ_KnownLive(self)(self)->GetWritableUnionWithUndefinedAndNullable(result); | |||
27412 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27412); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27412; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27413 | if (!result.ToJSVal(cx, obj, args.rval())) { | |||
27414 | return false; | |||
27415 | } | |||
27416 | return true; | |||
27417 | } | |||
27418 | ||||
27419 | MOZ_CAN_RUN_SCRIPT static bool | |||
27420 | set_writableUnionWithUndefinedAndNullable(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
27421 | { | |||
27422 | BindingCallContext cx(cx_, "TestExampleInterface.writableUnionWithUndefinedAndNullable setter"); | |||
27423 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27426( cx, "TestExampleInterface" , "writableUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27424 | "TestExampleInterface", "writableUnionWithUndefinedAndNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27426( cx, "TestExampleInterface" , "writableUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27425 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject27426( cx, "TestExampleInterface" , "writableUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27426 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27426( cx, "TestExampleInterface" , "writableUnionWithUndefinedAndNullable", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27427 | ||||
27428 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27429 | UndefinedOrCanvasPatternOrNull arg0; | |||
27430 | if (!arg0.Init(cx, args[0], "Value being assigned", false)) { | |||
27431 | return false; | |||
27432 | } | |||
27433 | // NOTE: This assert does NOT call the function. | |||
27434 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableUnionWithUndefinedAndNullable(Constify(arg0)))>, "Should be returning void here"); | |||
27435 | MOZ_KnownLive(self)(self)->SetWritableUnionWithUndefinedAndNullable(Constify(arg0)); | |||
27436 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27436); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27436; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27437 | ||||
27438 | return true; | |||
27439 | } | |||
27440 | ||||
27441 | static const JSJitInfo writableUnionWithUndefinedAndNullable_getterinfo = { | |||
27442 | { get_writableUnionWithUndefinedAndNullable }, | |||
27443 | { prototypes::id::TestExampleInterface }, | |||
27444 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27445 | JSJitInfo::Getter, | |||
27446 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27447 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
27448 | false, /* isInfallible. False in setters. */ | |||
27449 | false, /* isMovable. Not relevant for setters. */ | |||
27450 | false, /* isEliminatable. Not relevant for setters. */ | |||
27451 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27452 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27453 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27454 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27455 | }; | |||
27456 | static const JSJitInfo writableUnionWithUndefinedAndNullable_setterinfo = { | |||
27457 | { (JSJitGetterOp)set_writableUnionWithUndefinedAndNullable }, | |||
27458 | { prototypes::id::TestExampleInterface }, | |||
27459 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27460 | JSJitInfo::Setter, | |||
27461 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27462 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27463 | false, /* isInfallible. False in setters. */ | |||
27464 | false, /* isMovable. Not relevant for setters. */ | |||
27465 | false, /* isEliminatable. Not relevant for setters. */ | |||
27466 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27467 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27468 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27469 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27470 | }; | |||
27471 | ||||
27472 | MOZ_CAN_RUN_SCRIPT static bool | |||
27473 | get_writableNullableUnionWithUndefined(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
27474 | { | |||
27475 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27478( cx, "TestExampleInterface" , "writableNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27476 | "TestExampleInterface", "writableNullableUnionWithUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27478( cx, "TestExampleInterface" , "writableNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27477 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject27478( cx, "TestExampleInterface" , "writableNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27478 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27478( cx, "TestExampleInterface" , "writableNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27479 | ||||
27480 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27481 | Nullable<OwningUndefinedOrCanvasPattern> result; | |||
27482 | // NOTE: This assert does NOT call the function. | |||
27483 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableNullableUnionWithUndefined(result))>, "Should be returning void here"); | |||
27484 | MOZ_KnownLive(self)(self)->GetWritableNullableUnionWithUndefined(result); | |||
27485 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27485); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27485; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27486 | if (result.IsNull()) { | |||
27487 | args.rval().setNull(); | |||
27488 | return true; | |||
27489 | } | |||
27490 | if (!result.Value().ToJSVal(cx, obj, args.rval())) { | |||
27491 | return false; | |||
27492 | } | |||
27493 | return true; | |||
27494 | } | |||
27495 | ||||
27496 | MOZ_CAN_RUN_SCRIPT static bool | |||
27497 | set_writableNullableUnionWithUndefined(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
27498 | { | |||
27499 | BindingCallContext cx(cx_, "TestExampleInterface.writableNullableUnionWithUndefined setter"); | |||
27500 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27503( cx, "TestExampleInterface" , "writableNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27501 | "TestExampleInterface", "writableNullableUnionWithUndefined", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27503( cx, "TestExampleInterface" , "writableNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27502 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject27503( cx, "TestExampleInterface" , "writableNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
27503 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27503( cx, "TestExampleInterface" , "writableNullableUnionWithUndefined", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
27504 | ||||
27505 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27506 | Nullable<UndefinedOrCanvasPattern > arg0; | |||
27507 | if (args[0].isNull()) { | |||
27508 | arg0.SetNull(); | |||
27509 | } else { | |||
27510 | if (!arg0.SetValue().Init(cx, args[0], "Value being assigned", false)) { | |||
27511 | return false; | |||
27512 | } | |||
27513 | } | |||
27514 | // NOTE: This assert does NOT call the function. | |||
27515 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableNullableUnionWithUndefined(Constify(arg0)))>, "Should be returning void here"); | |||
27516 | MOZ_KnownLive(self)(self)->SetWritableNullableUnionWithUndefined(Constify(arg0)); | |||
27517 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27517); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27517; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27518 | ||||
27519 | return true; | |||
27520 | } | |||
27521 | ||||
27522 | static const JSJitInfo writableNullableUnionWithUndefined_getterinfo = { | |||
27523 | { get_writableNullableUnionWithUndefined }, | |||
27524 | { prototypes::id::TestExampleInterface }, | |||
27525 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27526 | JSJitInfo::Getter, | |||
27527 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27528 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
27529 | false, /* isInfallible. False in setters. */ | |||
27530 | false, /* isMovable. Not relevant for setters. */ | |||
27531 | false, /* isEliminatable. Not relevant for setters. */ | |||
27532 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27533 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27534 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27535 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27536 | }; | |||
27537 | static const JSJitInfo writableNullableUnionWithUndefined_setterinfo = { | |||
27538 | { (JSJitGetterOp)set_writableNullableUnionWithUndefined }, | |||
27539 | { prototypes::id::TestExampleInterface }, | |||
27540 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27541 | JSJitInfo::Setter, | |||
27542 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27543 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27544 | false, /* isInfallible. False in setters. */ | |||
27545 | false, /* isMovable. Not relevant for setters. */ | |||
27546 | false, /* isEliminatable. Not relevant for setters. */ | |||
27547 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27548 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27549 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27550 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27551 | }; | |||
27552 | ||||
27553 | MOZ_CAN_RUN_SCRIPT static bool | |||
27554 | passPromise(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
27555 | { | |||
27556 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27559( cx, "TestExampleInterface" , "passPromise", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27557 | "TestExampleInterface", "passPromise", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27559( cx, "TestExampleInterface" , "passPromise", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27558 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject27559( cx, "TestExampleInterface" , "passPromise", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27559 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27559( cx, "TestExampleInterface" , "passPromise", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27560 | ||||
27561 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27562 | if (!args.requireAtLeast(cx, "TestExampleInterface.passPromise", 1)) { | |||
27563 | return false; | |||
27564 | } | |||
27565 | OwningNonNull<Promise> arg0; | |||
27566 | { // Scope for our GlobalObject, FastErrorResult, JSAutoRealm, | |||
27567 | // etc. | |||
27568 | ||||
27569 | JS::Rooted<JSObject*> globalObj(cx); | |||
27570 | globalObj = JS::CurrentGlobalOrNull(cx); | |||
27571 | JSAutoRealm ar(cx, globalObj); | |||
27572 | GlobalObject promiseGlobal(cx, globalObj); | |||
27573 | if (promiseGlobal.Failed()) { | |||
27574 | return false; | |||
27575 | } | |||
27576 | ||||
27577 | JS::Rooted<JS::Value> valueToResolve(cx, args[0]); | |||
27578 | if (!JS_WrapValue(cx, &valueToResolve)) { | |||
27579 | return false; | |||
27580 | } | |||
27581 | binding_detail::FastErrorResult promiseRv; | |||
27582 | nsCOMPtr<nsIGlobalObject> global = | |||
27583 | do_QueryInterface(promiseGlobal.GetAsSupports()); | |||
27584 | if (!global) { | |||
27585 | promiseRv.Throw(NS_ERROR_UNEXPECTED); | |||
27586 | MOZ_ALWAYS_TRUE(promiseRv.MaybeSetPendingException(cx))do { if ((__builtin_expect(!!(promiseRv.MaybeSetPendingException (cx)), 1))) { } else { do { static_assert( mozilla::detail::AssertionConditionType <decltype(false)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("false" " (" "promiseRv.MaybeSetPendingException(cx)" ")", "../TestExampleGenBinding.cpp", 27586); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "false" ") (" "promiseRv.MaybeSetPendingException(cx)" ")"); do { *((volatile int*)__null) = 27586; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); } } while (false); | |||
27587 | return false; | |||
27588 | } | |||
27589 | arg0 = Promise::Resolve(global, cx, valueToResolve, | |||
27590 | promiseRv); | |||
27591 | if (promiseRv.MaybeSetPendingException(cx)) { | |||
27592 | return false; | |||
27593 | } | |||
27594 | } | |||
27595 | // NOTE: This assert does NOT call the function. | |||
27596 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassPromise(NonNullHelper(arg0)))>, "Should be returning void here"); | |||
27597 | MOZ_KnownLive(self)(self)->PassPromise(NonNullHelper(arg0)); | |||
27598 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27598); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27598; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27599 | args.rval().setUndefined(); | |||
27600 | return true; | |||
27601 | } | |||
27602 | ||||
27603 | static const JSJitInfo passPromise_methodinfo = { | |||
27604 | { (JSJitGetterOp)passPromise }, | |||
27605 | { prototypes::id::TestExampleInterface }, | |||
27606 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27607 | JSJitInfo::Method, | |||
27608 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27609 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27610 | false, /* isInfallible. False in setters. */ | |||
27611 | false, /* isMovable. Not relevant for setters. */ | |||
27612 | false, /* isEliminatable. Not relevant for setters. */ | |||
27613 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27614 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27615 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27616 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27617 | }; | |||
27618 | ||||
27619 | MOZ_CAN_RUN_SCRIPT static bool | |||
27620 | passOptionalPromise(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
27621 | { | |||
27622 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27625( cx, "TestExampleInterface" , "passOptionalPromise", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27623 | "TestExampleInterface", "passOptionalPromise", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27625( cx, "TestExampleInterface" , "passOptionalPromise", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27624 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject27625( cx, "TestExampleInterface" , "passOptionalPromise", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27625 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27625( cx, "TestExampleInterface" , "passOptionalPromise", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27626 | ||||
27627 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27628 | Optional<OwningNonNull<Promise>> arg0; | |||
27629 | if (args.hasDefined(0)) { | |||
27630 | arg0.Construct(); | |||
27631 | { // Scope for our GlobalObject, FastErrorResult, JSAutoRealm, | |||
27632 | // etc. | |||
27633 | ||||
27634 | JS::Rooted<JSObject*> globalObj(cx); | |||
27635 | globalObj = JS::CurrentGlobalOrNull(cx); | |||
27636 | JSAutoRealm ar(cx, globalObj); | |||
27637 | GlobalObject promiseGlobal(cx, globalObj); | |||
27638 | if (promiseGlobal.Failed()) { | |||
27639 | return false; | |||
27640 | } | |||
27641 | ||||
27642 | JS::Rooted<JS::Value> valueToResolve(cx, args[0]); | |||
27643 | if (!JS_WrapValue(cx, &valueToResolve)) { | |||
27644 | return false; | |||
27645 | } | |||
27646 | binding_detail::FastErrorResult promiseRv; | |||
27647 | nsCOMPtr<nsIGlobalObject> global = | |||
27648 | do_QueryInterface(promiseGlobal.GetAsSupports()); | |||
27649 | if (!global) { | |||
27650 | promiseRv.Throw(NS_ERROR_UNEXPECTED); | |||
27651 | MOZ_ALWAYS_TRUE(promiseRv.MaybeSetPendingException(cx))do { if ((__builtin_expect(!!(promiseRv.MaybeSetPendingException (cx)), 1))) { } else { do { static_assert( mozilla::detail::AssertionConditionType <decltype(false)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("false" " (" "promiseRv.MaybeSetPendingException(cx)" ")", "../TestExampleGenBinding.cpp", 27651); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "false" ") (" "promiseRv.MaybeSetPendingException(cx)" ")"); do { *((volatile int*)__null) = 27651; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); } } while (false); | |||
27652 | return false; | |||
27653 | } | |||
27654 | arg0.Value() = Promise::Resolve(global, cx, valueToResolve, | |||
27655 | promiseRv); | |||
27656 | if (promiseRv.MaybeSetPendingException(cx)) { | |||
27657 | return false; | |||
27658 | } | |||
27659 | } | |||
27660 | } | |||
27661 | // NOTE: This assert does NOT call the function. | |||
27662 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOptionalPromise(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
27663 | MOZ_KnownLive(self)(self)->PassOptionalPromise(NonNullHelper(Constify(arg0))); | |||
27664 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27664); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27664; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27665 | args.rval().setUndefined(); | |||
27666 | return true; | |||
27667 | } | |||
27668 | ||||
27669 | static const JSJitInfo passOptionalPromise_methodinfo = { | |||
27670 | { (JSJitGetterOp)passOptionalPromise }, | |||
27671 | { prototypes::id::TestExampleInterface }, | |||
27672 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27673 | JSJitInfo::Method, | |||
27674 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27675 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27676 | false, /* isInfallible. False in setters. */ | |||
27677 | false, /* isMovable. Not relevant for setters. */ | |||
27678 | false, /* isEliminatable. Not relevant for setters. */ | |||
27679 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27680 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27681 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27682 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27683 | }; | |||
27684 | ||||
27685 | MOZ_CAN_RUN_SCRIPT static bool | |||
27686 | passPromiseSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
27687 | { | |||
27688 | BindingCallContext cx(cx_, "TestExampleInterface.passPromiseSequence"); | |||
27689 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27692( cx, "TestExampleInterface" , "passPromiseSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27690 | "TestExampleInterface", "passPromiseSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27692( cx, "TestExampleInterface" , "passPromiseSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27691 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject27692( cx, "TestExampleInterface" , "passPromiseSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27692 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27692( cx, "TestExampleInterface" , "passPromiseSequence", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27693 | ||||
27694 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27695 | if (!args.requireAtLeast(cx, "TestExampleInterface.passPromiseSequence", 1)) { | |||
27696 | return false; | |||
27697 | } | |||
27698 | binding_detail::AutoSequence<OwningNonNull<Promise>> arg0; | |||
27699 | if (args[0].isObject()) { | |||
27700 | JS::ForOfIterator iter(cx); | |||
27701 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
27702 | return false; | |||
27703 | } | |||
27704 | if (!iter.valueIsIterable()) { | |||
27705 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
27706 | return false; | |||
27707 | } | |||
27708 | binding_detail::AutoSequence<OwningNonNull<Promise>> &arr = arg0; | |||
27709 | JS::Rooted<JS::Value> temp(cx); | |||
27710 | while (true) { | |||
27711 | bool done; | |||
27712 | if (!iter.next(&temp, &done)) { | |||
27713 | return false; | |||
27714 | } | |||
27715 | if (done) { | |||
27716 | break; | |||
27717 | } | |||
27718 | OwningNonNull<Promise>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
27719 | if (!slotPtr) { | |||
27720 | JS_ReportOutOfMemory(cx); | |||
27721 | return false; | |||
27722 | } | |||
27723 | OwningNonNull<Promise>& slot = *slotPtr; | |||
27724 | { // Scope for our GlobalObject, FastErrorResult, JSAutoRealm, | |||
27725 | // etc. | |||
27726 | ||||
27727 | JS::Rooted<JSObject*> globalObj(cx); | |||
27728 | globalObj = JS::CurrentGlobalOrNull(cx); | |||
27729 | JSAutoRealm ar(cx, globalObj); | |||
27730 | GlobalObject promiseGlobal(cx, globalObj); | |||
27731 | if (promiseGlobal.Failed()) { | |||
27732 | return false; | |||
27733 | } | |||
27734 | ||||
27735 | JS::Rooted<JS::Value> valueToResolve(cx, temp); | |||
27736 | if (!JS_WrapValue(cx, &valueToResolve)) { | |||
27737 | return false; | |||
27738 | } | |||
27739 | binding_detail::FastErrorResult promiseRv; | |||
27740 | nsCOMPtr<nsIGlobalObject> global = | |||
27741 | do_QueryInterface(promiseGlobal.GetAsSupports()); | |||
27742 | if (!global) { | |||
27743 | promiseRv.Throw(NS_ERROR_UNEXPECTED); | |||
27744 | MOZ_ALWAYS_TRUE(promiseRv.MaybeSetPendingException(cx))do { if ((__builtin_expect(!!(promiseRv.MaybeSetPendingException (cx)), 1))) { } else { do { static_assert( mozilla::detail::AssertionConditionType <decltype(false)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("false" " (" "promiseRv.MaybeSetPendingException(cx)" ")", "../TestExampleGenBinding.cpp", 27744); AnnotateMozCrashReason ("MOZ_DIAGNOSTIC_ASSERT" "(" "false" ") (" "promiseRv.MaybeSetPendingException(cx)" ")"); do { *((volatile int*)__null) = 27744; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); } } while (false); | |||
27745 | return false; | |||
27746 | } | |||
27747 | slot = Promise::Resolve(global, cx, valueToResolve, | |||
27748 | promiseRv); | |||
27749 | if (promiseRv.MaybeSetPendingException(cx)) { | |||
27750 | return false; | |||
27751 | } | |||
27752 | } | |||
27753 | } | |||
27754 | } else { | |||
27755 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
27756 | return false; | |||
27757 | } | |||
27758 | // NOTE: This assert does NOT call the function. | |||
27759 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassPromiseSequence(Constify(arg0)))>, "Should be returning void here"); | |||
27760 | MOZ_KnownLive(self)(self)->PassPromiseSequence(Constify(arg0)); | |||
27761 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27761); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27761; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27762 | args.rval().setUndefined(); | |||
27763 | return true; | |||
27764 | } | |||
27765 | ||||
27766 | static const JSJitInfo passPromiseSequence_methodinfo = { | |||
27767 | { (JSJitGetterOp)passPromiseSequence }, | |||
27768 | { prototypes::id::TestExampleInterface }, | |||
27769 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27770 | JSJitInfo::Method, | |||
27771 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27772 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
27773 | false, /* isInfallible. False in setters. */ | |||
27774 | false, /* isMovable. Not relevant for setters. */ | |||
27775 | false, /* isEliminatable. Not relevant for setters. */ | |||
27776 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27777 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27778 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27779 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27780 | }; | |||
27781 | ||||
27782 | MOZ_CAN_RUN_SCRIPT static bool | |||
27783 | receivePromise(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
27784 | { | |||
27785 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27788( cx, "TestExampleInterface" , "receivePromise", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27786 | "TestExampleInterface", "receivePromise", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27788( cx, "TestExampleInterface" , "receivePromise", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27787 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject27788( cx, "TestExampleInterface" , "receivePromise", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27788 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27788( cx, "TestExampleInterface" , "receivePromise", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27789 | ||||
27790 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27791 | auto result(StrongOrRawPtr<Promise>(MOZ_KnownLive(self)(self)->ReceivePromise())); | |||
27792 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27792); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27792; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27793 | if (!ToJSValue(cx, result, args.rval())) { | |||
27794 | return false; | |||
27795 | } | |||
27796 | return true; | |||
27797 | } | |||
27798 | ||||
27799 | MOZ_CAN_RUN_SCRIPT static bool | |||
27800 | receivePromise_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
27801 | { | |||
27802 | bool ok = receivePromise(cx, obj, void_self, args); | |||
27803 | if (ok) { | |||
27804 | return true; | |||
27805 | } | |||
27806 | return ConvertExceptionToPromise(cx, args.rval()); | |||
27807 | } | |||
27808 | ||||
27809 | static const JSJitInfo receivePromise_methodinfo = { | |||
27810 | { (JSJitGetterOp)receivePromise_promiseWrapper }, | |||
27811 | { prototypes::id::TestExampleInterface }, | |||
27812 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27813 | JSJitInfo::Method, | |||
27814 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27815 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
27816 | false, /* isInfallible. False in setters. */ | |||
27817 | false, /* isMovable. Not relevant for setters. */ | |||
27818 | false, /* isEliminatable. Not relevant for setters. */ | |||
27819 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27820 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27821 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27822 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27823 | }; | |||
27824 | ||||
27825 | MOZ_CAN_RUN_SCRIPT static bool | |||
27826 | receiveAddrefedPromise(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
27827 | { | |||
27828 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject27831( cx, "TestExampleInterface" , "receiveAddrefedPromise", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27829 | "TestExampleInterface", "receiveAddrefedPromise", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject27831( cx, "TestExampleInterface" , "receiveAddrefedPromise", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27830 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject27831( cx, "TestExampleInterface" , "receiveAddrefedPromise", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
27831 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject27831( cx, "TestExampleInterface" , "receiveAddrefedPromise", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
27832 | ||||
27833 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
27834 | auto result(StrongOrRawPtr<Promise>(MOZ_KnownLive(self)(self)->ReceiveAddrefedPromise())); | |||
27835 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 27835); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 27835; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
27836 | if (!ToJSValue(cx, result, args.rval())) { | |||
27837 | return false; | |||
27838 | } | |||
27839 | return true; | |||
27840 | } | |||
27841 | ||||
27842 | MOZ_CAN_RUN_SCRIPT static bool | |||
27843 | receiveAddrefedPromise_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
27844 | { | |||
27845 | bool ok = receiveAddrefedPromise(cx, obj, void_self, args); | |||
27846 | if (ok) { | |||
27847 | return true; | |||
27848 | } | |||
27849 | return ConvertExceptionToPromise(cx, args.rval()); | |||
27850 | } | |||
27851 | ||||
27852 | static const JSJitInfo receiveAddrefedPromise_methodinfo = { | |||
27853 | { (JSJitGetterOp)receiveAddrefedPromise_promiseWrapper }, | |||
27854 | { prototypes::id::TestExampleInterface }, | |||
27855 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
27856 | JSJitInfo::Method, | |||
27857 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
27858 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
27859 | false, /* isInfallible. False in setters. */ | |||
27860 | false, /* isMovable. Not relevant for setters. */ | |||
27861 | false, /* isEliminatable. Not relevant for setters. */ | |||
27862 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
27863 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
27864 | false, /* isTypedMethod. Only relevant for methods. */ | |||
27865 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
27866 | }; | |||
27867 | ||||
27868 | namespace BooleanObservableArray_Binding { | |||
27869 | class ObservableArrayProxyHandler : public mozilla::dom::ObservableArrayProxyHandler | |||
27870 | { | |||
27871 | protected: | |||
27872 | bool | |||
27873 | OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const override; | |||
27874 | ||||
27875 | bool | |||
27876 | SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const override; | |||
27877 | ||||
27878 | public: | |||
27879 | static const ObservableArrayProxyHandler* | |||
27880 | getInstance(); | |||
27881 | }; | |||
27882 | ||||
27883 | bool | |||
27884 | ObservableArrayProxyHandler::OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const | |||
27885 | { | |||
27886 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 27886); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 27886; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
27887 | ||||
27888 | BindingCallContext cx(aCx, "ObservableArray OnDeleteItem"); | |||
27889 | bool decl; | |||
27890 | if (!ValueToPrimitive<bool, eDefault>(cx, aValue, "Element in ObservableArray backing list", &decl)) { | |||
27891 | MOZ_ASSERT_UNREACHABLE("The item in ObservableArray backing list is not Boolean?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(false)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("false" " (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not Boolean?" ")" , "../TestExampleGenBinding.cpp", 27891); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "false" ") (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not Boolean?" ")"); do { *((volatile int*)__null) = 27891; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
27892 | return false; | |||
27893 | } | |||
27894 | ||||
27895 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
27896 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
27897 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 27897); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 27897; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
27898 | ||||
27899 | ErrorResult rv; | |||
27900 | MOZ_KnownLive(interface)(interface)->OnDeleteBooleanObservableArray(decl, aIndex, rv); | |||
27901 | return !rv.MaybeSetPendingException(cx); | |||
27902 | } | |||
27903 | ||||
27904 | bool | |||
27905 | ObservableArrayProxyHandler::SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const | |||
27906 | { | |||
27907 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 27907); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 27907; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
27908 | uint32_t oldLen; | |||
27909 | if (!JS::GetArrayLength(aCx, aBackingList, &oldLen)) { | |||
27910 | return false; | |||
27911 | } | |||
27912 | ||||
27913 | if (aIndex > oldLen) { | |||
27914 | return aResult.failBadIndex(); | |||
27915 | } | |||
27916 | ||||
27917 | BindingCallContext cx(aCx, "ObservableArray SetIndexedValue"); | |||
27918 | bool decl; | |||
27919 | if (!ValueToPrimitive<bool, eDefault>(cx, aValue, "Element in ObservableArray backing list", &decl)) { | |||
27920 | return false; | |||
27921 | } | |||
27922 | ||||
27923 | if (aIndex < oldLen) { | |||
27924 | JS::Rooted<JS::Value> value(aCx); | |||
27925 | if (!JS_GetElement(aCx, aBackingList, aIndex, &value)) { | |||
27926 | return false; | |||
27927 | } | |||
27928 | ||||
27929 | if (!OnDeleteItem(aCx, aProxy, value, aIndex)) { | |||
27930 | return false; | |||
27931 | } | |||
27932 | } | |||
27933 | ||||
27934 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
27935 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
27936 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 27936); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 27936; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
27937 | ||||
27938 | ErrorResult rv; | |||
27939 | MOZ_KnownLive(interface)(interface)->OnSetBooleanObservableArray(decl, aIndex, rv); | |||
27940 | if (rv.MaybeSetPendingException(cx)) { | |||
27941 | return false; | |||
27942 | } | |||
27943 | ||||
27944 | if (!JS_SetElement(aCx, aBackingList, aIndex, aValue)) { | |||
27945 | return false; | |||
27946 | } | |||
27947 | ||||
27948 | return aResult.succeed(); | |||
27949 | } | |||
27950 | ||||
27951 | const ObservableArrayProxyHandler* | |||
27952 | ObservableArrayProxyHandler::getInstance() | |||
27953 | { | |||
27954 | static const ObservableArrayProxyHandler instance; | |||
27955 | return &instance; | |||
27956 | } | |||
27957 | } // namespace BooleanObservableArray_Binding | |||
27958 | ||||
27959 | namespace BooleanObservableArrayHelpers { | |||
27960 | bool | |||
27961 | ElementAt(mozilla::dom::TestExampleInterface* self, uint32_t aIndex, ErrorResult& aRv) | |||
27962 | { | |||
27963 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 27963); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 27963; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
27964 | AutoJSAPI jsapi; | |||
27965 | jsapi.Init(); | |||
27966 | JSContext* cx = jsapi.cx(); | |||
27967 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
27968 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
27969 | // the reflector, and wrapping has no side-effects. | |||
27970 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
27971 | if (!scope) { | |||
27972 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
27973 | return bool(0); | |||
27974 | } | |||
27975 | JSAutoRealm tempRealm(cx, scope); | |||
27976 | JS::Rooted<JS::Value> v(cx); | |||
27977 | if(!ToJSValue(cx, self, &v)) { | |||
27978 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
27979 | return bool(0); | |||
27980 | } | |||
27981 | // This is a reflector, but due to trying to name things | |||
27982 | // similarly across method generators, it's called obj here. | |||
27983 | JS::Rooted<JSObject*> obj(cx); | |||
27984 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
27985 | JSAutoRealm reflectorRealm(cx, obj); | |||
27986 | ||||
27987 | JS::Rooted<JSObject*> backingObj(cx); | |||
27988 | bool created = false; | |||
27989 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9), | |||
27990 | &backingObj, &created, BooleanObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
27991 | self)) { | |||
27992 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
27993 | return bool(0); | |||
27994 | } | |||
27995 | if (created) { | |||
27996 | PreserveWrapper(self); | |||
27997 | } | |||
27998 | JS::Rooted<JS::Value> result(cx); | |||
27999 | aRv.MightThrowJSException(); | |||
28000 | if (!JS_GetElement(cx, backingObj, aIndex, &result)) { | |||
28001 | aRv.StealExceptionFromJSContext(cx); | |||
28002 | return bool(0); | |||
28003 | } | |||
28004 | if (result.isUndefined()) { | |||
28005 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
28006 | return bool(0); | |||
28007 | } | |||
28008 | bool rvalDecl; | |||
28009 | if (!ValueToPrimitive<bool, eDefault>(cx, result, "Return value of ElementAt", &rvalDecl)) { | |||
28010 | aRv.NoteJSContextException(cx); | |||
28011 | return bool(0); | |||
28012 | } | |||
28013 | return rvalDecl; | |||
28014 | } | |||
28015 | ||||
28016 | void | |||
28017 | ReplaceElementAt(mozilla::dom::TestExampleInterface* self, uint32_t aIndex, bool aValue, ErrorResult& aRv) | |||
28018 | { | |||
28019 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28019); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28019; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28020 | AutoJSAPI jsapi; | |||
28021 | jsapi.Init(); | |||
28022 | JSContext* cx = jsapi.cx(); | |||
28023 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
28024 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
28025 | // the reflector, and wrapping has no side-effects. | |||
28026 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
28027 | if (!scope) { | |||
28028 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28029 | return; | |||
28030 | } | |||
28031 | JSAutoRealm tempRealm(cx, scope); | |||
28032 | JS::Rooted<JS::Value> v(cx); | |||
28033 | if(!ToJSValue(cx, self, &v)) { | |||
28034 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28035 | return; | |||
28036 | } | |||
28037 | // This is a reflector, but due to trying to name things | |||
28038 | // similarly across method generators, it's called obj here. | |||
28039 | JS::Rooted<JSObject*> obj(cx); | |||
28040 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28041 | JSAutoRealm reflectorRealm(cx, obj); | |||
28042 | JS::RootedVector<JS::Value> argv(cx); | |||
28043 | if (!argv.resize(1)) { | |||
28044 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28045 | return; | |||
28046 | } | |||
28047 | do { | |||
28048 | argv[0].setBoolean(aValue); | |||
28049 | break; | |||
28050 | } while (false); | |||
28051 | ||||
28052 | JS::Rooted<JSObject*> backingObj(cx); | |||
28053 | bool created = false; | |||
28054 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9), | |||
28055 | &backingObj, &created, BooleanObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28056 | self)) { | |||
28057 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28058 | return; | |||
28059 | } | |||
28060 | if (created) { | |||
28061 | PreserveWrapper(self); | |||
28062 | } | |||
28063 | uint32_t length; | |||
28064 | aRv.MightThrowJSException(); | |||
28065 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
28066 | aRv.StealExceptionFromJSContext(cx); | |||
28067 | return; | |||
28068 | } | |||
28069 | if (aIndex > length) { | |||
28070 | aRv.ThrowRangeError("Invalid index"); | |||
28071 | return; | |||
28072 | } | |||
28073 | aRv.MightThrowJSException(); | |||
28074 | if (!JS_SetElement(cx, backingObj, aIndex, argv[0])) { | |||
28075 | aRv.StealExceptionFromJSContext(cx); | |||
28076 | return; | |||
28077 | } | |||
28078 | } | |||
28079 | ||||
28080 | void | |||
28081 | AppendElement(mozilla::dom::TestExampleInterface* self, bool aValue, ErrorResult& aRv) | |||
28082 | { | |||
28083 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28083); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28083; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28084 | AutoJSAPI jsapi; | |||
28085 | jsapi.Init(); | |||
28086 | JSContext* cx = jsapi.cx(); | |||
28087 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
28088 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
28089 | // the reflector, and wrapping has no side-effects. | |||
28090 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
28091 | if (!scope) { | |||
28092 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28093 | return; | |||
28094 | } | |||
28095 | JSAutoRealm tempRealm(cx, scope); | |||
28096 | JS::Rooted<JS::Value> v(cx); | |||
28097 | if(!ToJSValue(cx, self, &v)) { | |||
28098 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28099 | return; | |||
28100 | } | |||
28101 | // This is a reflector, but due to trying to name things | |||
28102 | // similarly across method generators, it's called obj here. | |||
28103 | JS::Rooted<JSObject*> obj(cx); | |||
28104 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28105 | JSAutoRealm reflectorRealm(cx, obj); | |||
28106 | JS::RootedVector<JS::Value> argv(cx); | |||
28107 | if (!argv.resize(1)) { | |||
28108 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28109 | return; | |||
28110 | } | |||
28111 | do { | |||
28112 | argv[0].setBoolean(aValue); | |||
28113 | break; | |||
28114 | } while (false); | |||
28115 | ||||
28116 | JS::Rooted<JSObject*> backingObj(cx); | |||
28117 | bool created = false; | |||
28118 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9), | |||
28119 | &backingObj, &created, BooleanObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28120 | self)) { | |||
28121 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28122 | return; | |||
28123 | } | |||
28124 | if (created) { | |||
28125 | PreserveWrapper(self); | |||
28126 | } | |||
28127 | uint32_t length; | |||
28128 | aRv.MightThrowJSException(); | |||
28129 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
28130 | aRv.StealExceptionFromJSContext(cx); | |||
28131 | return; | |||
28132 | } | |||
28133 | aRv.MightThrowJSException(); | |||
28134 | if (!JS_SetElement(cx, backingObj, length, argv[0])) { | |||
28135 | aRv.StealExceptionFromJSContext(cx); | |||
28136 | return; | |||
28137 | } | |||
28138 | } | |||
28139 | ||||
28140 | void | |||
28141 | RemoveLastElement(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
28142 | { | |||
28143 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28143); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28143; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28144 | AutoJSAPI jsapi; | |||
28145 | jsapi.Init(); | |||
28146 | JSContext* cx = jsapi.cx(); | |||
28147 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
28148 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
28149 | // the reflector, and wrapping has no side-effects. | |||
28150 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
28151 | if (!scope) { | |||
28152 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28153 | return; | |||
28154 | } | |||
28155 | JSAutoRealm tempRealm(cx, scope); | |||
28156 | JS::Rooted<JS::Value> v(cx); | |||
28157 | if(!ToJSValue(cx, self, &v)) { | |||
28158 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28159 | return; | |||
28160 | } | |||
28161 | // This is a reflector, but due to trying to name things | |||
28162 | // similarly across method generators, it's called obj here. | |||
28163 | JS::Rooted<JSObject*> obj(cx); | |||
28164 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28165 | JSAutoRealm reflectorRealm(cx, obj); | |||
28166 | ||||
28167 | JS::Rooted<JSObject*> backingObj(cx); | |||
28168 | bool created = false; | |||
28169 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9), | |||
28170 | &backingObj, &created, BooleanObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28171 | self)) { | |||
28172 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28173 | return; | |||
28174 | } | |||
28175 | if (created) { | |||
28176 | PreserveWrapper(self); | |||
28177 | } | |||
28178 | uint32_t length; | |||
28179 | aRv.MightThrowJSException(); | |||
28180 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
28181 | aRv.StealExceptionFromJSContext(cx); | |||
28182 | return; | |||
28183 | } | |||
28184 | if (length == 0) { | |||
28185 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
28186 | return; | |||
28187 | } | |||
28188 | aRv.MightThrowJSException(); | |||
28189 | if (!JS::SetArrayLength(cx, backingObj, length - 1)) { | |||
28190 | aRv.StealExceptionFromJSContext(cx); | |||
28191 | return; | |||
28192 | } | |||
28193 | } | |||
28194 | ||||
28195 | uint32_t | |||
28196 | Length(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
28197 | { | |||
28198 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28198); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28198; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28199 | AutoJSAPI jsapi; | |||
28200 | jsapi.Init(); | |||
28201 | JSContext* cx = jsapi.cx(); | |||
28202 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
28203 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
28204 | // the reflector, and wrapping has no side-effects. | |||
28205 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
28206 | if (!scope) { | |||
28207 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28208 | return uint32_t(0); | |||
28209 | } | |||
28210 | JSAutoRealm tempRealm(cx, scope); | |||
28211 | JS::Rooted<JS::Value> v(cx); | |||
28212 | if(!ToJSValue(cx, self, &v)) { | |||
28213 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28214 | return uint32_t(0); | |||
28215 | } | |||
28216 | // This is a reflector, but due to trying to name things | |||
28217 | // similarly across method generators, it's called obj here. | |||
28218 | JS::Rooted<JSObject*> obj(cx); | |||
28219 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28220 | JSAutoRealm reflectorRealm(cx, obj); | |||
28221 | ||||
28222 | JS::Rooted<JSObject*> backingObj(cx); | |||
28223 | bool created = false; | |||
28224 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9), | |||
28225 | &backingObj, &created, BooleanObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28226 | self)) { | |||
28227 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28228 | return uint32_t(0); | |||
28229 | } | |||
28230 | if (created) { | |||
28231 | PreserveWrapper(self); | |||
28232 | } | |||
28233 | uint32_t retVal; | |||
28234 | aRv.MightThrowJSException(); | |||
28235 | if (!JS::GetArrayLength(cx, backingObj, &retVal)) { | |||
28236 | aRv.StealExceptionFromJSContext(cx); | |||
28237 | return uint32_t(0); | |||
28238 | } | |||
28239 | return retVal; | |||
28240 | } | |||
28241 | } // namespace BooleanObservableArrayHelpers | |||
28242 | ||||
28243 | MOZ_CAN_RUN_SCRIPT static bool | |||
28244 | get_booleanObservableArray(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
28245 | { | |||
28246 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject28249( cx, "TestExampleInterface" , "booleanObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28247 | "TestExampleInterface", "booleanObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject28249( cx, "TestExampleInterface" , "booleanObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28248 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject28249( cx, "TestExampleInterface" , "booleanObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28249 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject28249( cx, "TestExampleInterface" , "booleanObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
28250 | ||||
28251 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
28252 | JS::Rooted<JSObject*> backingObj(cx); | |||
28253 | bool created = false; | |||
28254 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9), | |||
28255 | &backingObj, &created, BooleanObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28256 | self)) { | |||
28257 | return false; | |||
28258 | } | |||
28259 | if (created) { | |||
28260 | PreserveWrapper(self); | |||
28261 | } | |||
28262 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 28262); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 28262; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
28263 | args.rval().setObject(*backingObj); | |||
28264 | return true; | |||
28265 | } | |||
28266 | ||||
28267 | MOZ_CAN_RUN_SCRIPT static bool | |||
28268 | set_booleanObservableArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
28269 | { | |||
28270 | BindingCallContext cx(cx_, "TestExampleInterface.booleanObservableArray setter"); | |||
28271 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject28274( cx, "TestExampleInterface" , "booleanObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28272 | "TestExampleInterface", "booleanObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject28274( cx, "TestExampleInterface" , "booleanObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28273 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject28274( cx, "TestExampleInterface" , "booleanObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28274 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject28274( cx, "TestExampleInterface" , "booleanObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
28275 | ||||
28276 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
28277 | binding_detail::AutoSequence<bool> arg0; | |||
28278 | if (args[0].isObject()) { | |||
28279 | JS::ForOfIterator iter(cx); | |||
28280 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
28281 | return false; | |||
28282 | } | |||
28283 | if (!iter.valueIsIterable()) { | |||
28284 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
28285 | return false; | |||
28286 | } | |||
28287 | binding_detail::AutoSequence<bool> &arr = arg0; | |||
28288 | JS::Rooted<JS::Value> temp(cx); | |||
28289 | while (true) { | |||
28290 | bool done; | |||
28291 | if (!iter.next(&temp, &done)) { | |||
28292 | return false; | |||
28293 | } | |||
28294 | if (done) { | |||
28295 | break; | |||
28296 | } | |||
28297 | bool* slotPtr = arr.AppendElement(mozilla::fallible); | |||
28298 | if (!slotPtr) { | |||
28299 | JS_ReportOutOfMemory(cx); | |||
28300 | return false; | |||
28301 | } | |||
28302 | bool& slot = *slotPtr; | |||
28303 | if (!ValueToPrimitive<bool, eDefault>(cx, temp, "Element of value being assigned", &slot)) { | |||
28304 | return false; | |||
28305 | } | |||
28306 | } | |||
28307 | } else { | |||
28308 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
28309 | return false; | |||
28310 | } | |||
28311 | if (xpc::WrapperFactory::IsXrayWrapper(obj)) { | |||
28312 | JS_ReportErrorASCII(cx, "Accessing from Xray wrapper is not supported."); | |||
28313 | return false; | |||
28314 | } | |||
28315 | ||||
28316 | JS::Rooted<JSObject*> backingObj(cx); | |||
28317 | bool created = false; | |||
28318 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9), | |||
28319 | &backingObj, &created, BooleanObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28320 | self)) { | |||
28321 | return false; | |||
28322 | } | |||
28323 | if (created) { | |||
28324 | PreserveWrapper(self); | |||
28325 | } | |||
28326 | ||||
28327 | const ObservableArrayProxyHandler* handler = GetObservableArrayProxyHandler(backingObj); | |||
28328 | if (!handler->SetLength(cx, backingObj, 0)) { | |||
28329 | return false; | |||
28330 | } | |||
28331 | ||||
28332 | JS::Rooted<JS::Value> val(cx); | |||
28333 | for (size_t i = 0; i < arg0.Length(); i++) { | |||
28334 | val.setBoolean(arg0.ElementAt(i)); | |||
28335 | if (!JS_SetElement(cx, backingObj, i, val)) { | |||
28336 | return false; | |||
28337 | } | |||
28338 | } | |||
28339 | ||||
28340 | return true; | |||
28341 | } | |||
28342 | ||||
28343 | static const JSJitInfo booleanObservableArray_getterinfo = { | |||
28344 | { get_booleanObservableArray }, | |||
28345 | { prototypes::id::TestExampleInterface }, | |||
28346 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
28347 | JSJitInfo::Getter, | |||
28348 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
28349 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
28350 | false, /* isInfallible. False in setters. */ | |||
28351 | false, /* isMovable. Not relevant for setters. */ | |||
28352 | false, /* isEliminatable. Not relevant for setters. */ | |||
28353 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
28354 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
28355 | false, /* isTypedMethod. Only relevant for methods. */ | |||
28356 | (DOM_INSTANCE_RESERVED_SLOTS1 + 9) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
28357 | }; | |||
28358 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 9) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
28359 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 9) < 22, "There is no slot for us"); | |||
28360 | static const JSJitInfo booleanObservableArray_setterinfo = { | |||
28361 | { (JSJitGetterOp)set_booleanObservableArray }, | |||
28362 | { prototypes::id::TestExampleInterface }, | |||
28363 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
28364 | JSJitInfo::Setter, | |||
28365 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
28366 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
28367 | false, /* isInfallible. False in setters. */ | |||
28368 | false, /* isMovable. Not relevant for setters. */ | |||
28369 | false, /* isEliminatable. Not relevant for setters. */ | |||
28370 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
28371 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
28372 | false, /* isTypedMethod. Only relevant for methods. */ | |||
28373 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
28374 | }; | |||
28375 | ||||
28376 | namespace ObjectObservableArray_Binding { | |||
28377 | class ObservableArrayProxyHandler : public mozilla::dom::ObservableArrayProxyHandler | |||
28378 | { | |||
28379 | protected: | |||
28380 | bool | |||
28381 | OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const override; | |||
28382 | ||||
28383 | bool | |||
28384 | SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const override; | |||
28385 | ||||
28386 | public: | |||
28387 | static const ObservableArrayProxyHandler* | |||
28388 | getInstance(); | |||
28389 | }; | |||
28390 | ||||
28391 | bool | |||
28392 | ObservableArrayProxyHandler::OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const | |||
28393 | { | |||
28394 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 28394); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 28394; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28395 | ||||
28396 | BindingCallContext cx(aCx, "ObservableArray OnDeleteItem"); | |||
28397 | JS::Rooted<JSObject*> decl(cx); | |||
28398 | if (aValue.isObject()) { | |||
28399 | decl = &aValue.toObject(); | |||
28400 | } else { | |||
28401 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element in ObservableArray backing list"); | |||
28402 | MOZ_ASSERT_UNREACHABLE("The item in ObservableArray backing list is not Object?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(false)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("false" " (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not Object?" ")" , "../TestExampleGenBinding.cpp", 28402); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "false" ") (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not Object?" ")"); do { *((volatile int*)__null) = 28402; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28403 | return false; | |||
28404 | } | |||
28405 | ||||
28406 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
28407 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
28408 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 28408); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 28408; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28409 | ||||
28410 | ErrorResult rv; | |||
28411 | MOZ_KnownLive(interface)(interface)->OnDeleteObjectObservableArray(cx, decl, aIndex, rv); | |||
28412 | return !rv.MaybeSetPendingException(cx); | |||
28413 | } | |||
28414 | ||||
28415 | bool | |||
28416 | ObservableArrayProxyHandler::SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const | |||
28417 | { | |||
28418 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 28418); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 28418; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28419 | uint32_t oldLen; | |||
28420 | if (!JS::GetArrayLength(aCx, aBackingList, &oldLen)) { | |||
28421 | return false; | |||
28422 | } | |||
28423 | ||||
28424 | if (aIndex > oldLen) { | |||
28425 | return aResult.failBadIndex(); | |||
28426 | } | |||
28427 | ||||
28428 | BindingCallContext cx(aCx, "ObservableArray SetIndexedValue"); | |||
28429 | JS::Rooted<JSObject*> decl(cx); | |||
28430 | if (aValue.isObject()) { | |||
28431 | decl = &aValue.toObject(); | |||
28432 | } else { | |||
28433 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element in ObservableArray backing list"); | |||
28434 | return false; | |||
28435 | } | |||
28436 | ||||
28437 | if (aIndex < oldLen) { | |||
28438 | JS::Rooted<JS::Value> value(aCx); | |||
28439 | if (!JS_GetElement(aCx, aBackingList, aIndex, &value)) { | |||
28440 | return false; | |||
28441 | } | |||
28442 | ||||
28443 | if (!OnDeleteItem(aCx, aProxy, value, aIndex)) { | |||
28444 | return false; | |||
28445 | } | |||
28446 | } | |||
28447 | ||||
28448 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
28449 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
28450 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 28450); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 28450; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28451 | ||||
28452 | ErrorResult rv; | |||
28453 | MOZ_KnownLive(interface)(interface)->OnSetObjectObservableArray(cx, decl, aIndex, rv); | |||
28454 | if (rv.MaybeSetPendingException(cx)) { | |||
28455 | return false; | |||
28456 | } | |||
28457 | ||||
28458 | if (!JS_SetElement(aCx, aBackingList, aIndex, aValue)) { | |||
28459 | return false; | |||
28460 | } | |||
28461 | ||||
28462 | return aResult.succeed(); | |||
28463 | } | |||
28464 | ||||
28465 | const ObservableArrayProxyHandler* | |||
28466 | ObservableArrayProxyHandler::getInstance() | |||
28467 | { | |||
28468 | static const ObservableArrayProxyHandler instance; | |||
28469 | return &instance; | |||
28470 | } | |||
28471 | } // namespace ObjectObservableArray_Binding | |||
28472 | ||||
28473 | namespace ObjectObservableArrayHelpers { | |||
28474 | void | |||
28475 | ElementAt(mozilla::dom::TestExampleInterface* self, JSContext* cx, uint32_t aIndex, JS::MutableHandle<JSObject*> aRetVal, ErrorResult& aRv) | |||
28476 | { | |||
28477 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28477); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28477; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28478 | JS::Rooted<JS::Value> v(cx); | |||
28479 | if(!ToJSValue(cx, self, &v)) { | |||
28480 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28481 | return; | |||
28482 | } | |||
28483 | // This is a reflector, but due to trying to name things | |||
28484 | // similarly across method generators, it's called obj here. | |||
28485 | JS::Rooted<JSObject*> obj(cx); | |||
28486 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28487 | JS::Rooted<JS::Value> result(cx); | |||
28488 | { | |||
28489 | JSAutoRealm reflectorRealm(cx, obj); | |||
28490 | ||||
28491 | JS::Rooted<JSObject*> backingObj(cx); | |||
28492 | bool created = false; | |||
28493 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10), | |||
28494 | &backingObj, &created, ObjectObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28495 | self)) { | |||
28496 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28497 | return; | |||
28498 | } | |||
28499 | if (created) { | |||
28500 | PreserveWrapper(self); | |||
28501 | } | |||
28502 | aRv.MightThrowJSException(); | |||
28503 | if (!JS_GetElement(cx, backingObj, aIndex, &result)) { | |||
28504 | aRv.StealExceptionFromJSContext(cx); | |||
28505 | return; | |||
28506 | } | |||
28507 | if (result.isUndefined()) { | |||
28508 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
28509 | return; | |||
28510 | } | |||
28511 | } | |||
28512 | if (!JS_WrapValue(cx, &result)) { | |||
28513 | aRv.NoteJSContextException(cx); | |||
28514 | return; | |||
28515 | } | |||
28516 | JS::Rooted<JSObject*> rvalDecl(cx); | |||
28517 | rvalDecl = &result.toObject(); | |||
28518 | aRetVal.set(rvalDecl); | |||
28519 | } | |||
28520 | ||||
28521 | void | |||
28522 | ReplaceElementAt(mozilla::dom::TestExampleInterface* self, uint32_t aIndex, JS::Handle<JSObject*> aValue, ErrorResult& aRv) | |||
28523 | { | |||
28524 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28524); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28524; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28525 | AutoJSAPI jsapi; | |||
28526 | jsapi.Init(); | |||
28527 | JSContext* cx = jsapi.cx(); | |||
28528 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
28529 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
28530 | // the reflector, and wrapping has no side-effects. | |||
28531 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
28532 | if (!scope) { | |||
28533 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28534 | return; | |||
28535 | } | |||
28536 | JSAutoRealm tempRealm(cx, scope); | |||
28537 | JS::Rooted<JS::Value> v(cx); | |||
28538 | if(!ToJSValue(cx, self, &v)) { | |||
28539 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28540 | return; | |||
28541 | } | |||
28542 | // This is a reflector, but due to trying to name things | |||
28543 | // similarly across method generators, it's called obj here. | |||
28544 | JS::Rooted<JSObject*> obj(cx); | |||
28545 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28546 | JSAutoRealm reflectorRealm(cx, obj); | |||
28547 | JS::RootedVector<JS::Value> argv(cx); | |||
28548 | if (!argv.resize(1)) { | |||
28549 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28550 | return; | |||
28551 | } | |||
28552 | do { | |||
28553 | JS::ExposeObjectToActiveJS(aValue); | |||
28554 | argv[0].setObject(*aValue); | |||
28555 | if (!MaybeWrapObjectValue(cx, argv[0])) { | |||
28556 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28557 | return; | |||
28558 | } | |||
28559 | break; | |||
28560 | } while (false); | |||
28561 | ||||
28562 | JS::Rooted<JSObject*> backingObj(cx); | |||
28563 | bool created = false; | |||
28564 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10), | |||
28565 | &backingObj, &created, ObjectObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28566 | self)) { | |||
28567 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28568 | return; | |||
28569 | } | |||
28570 | if (created) { | |||
28571 | PreserveWrapper(self); | |||
28572 | } | |||
28573 | uint32_t length; | |||
28574 | aRv.MightThrowJSException(); | |||
28575 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
28576 | aRv.StealExceptionFromJSContext(cx); | |||
28577 | return; | |||
28578 | } | |||
28579 | if (aIndex > length) { | |||
28580 | aRv.ThrowRangeError("Invalid index"); | |||
28581 | return; | |||
28582 | } | |||
28583 | aRv.MightThrowJSException(); | |||
28584 | if (!JS_SetElement(cx, backingObj, aIndex, argv[0])) { | |||
28585 | aRv.StealExceptionFromJSContext(cx); | |||
28586 | return; | |||
28587 | } | |||
28588 | } | |||
28589 | ||||
28590 | void | |||
28591 | AppendElement(mozilla::dom::TestExampleInterface* self, JS::Handle<JSObject*> aValue, ErrorResult& aRv) | |||
28592 | { | |||
28593 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28593); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28593; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28594 | AutoJSAPI jsapi; | |||
28595 | jsapi.Init(); | |||
28596 | JSContext* cx = jsapi.cx(); | |||
28597 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
28598 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
28599 | // the reflector, and wrapping has no side-effects. | |||
28600 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
28601 | if (!scope) { | |||
28602 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28603 | return; | |||
28604 | } | |||
28605 | JSAutoRealm tempRealm(cx, scope); | |||
28606 | JS::Rooted<JS::Value> v(cx); | |||
28607 | if(!ToJSValue(cx, self, &v)) { | |||
28608 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28609 | return; | |||
28610 | } | |||
28611 | // This is a reflector, but due to trying to name things | |||
28612 | // similarly across method generators, it's called obj here. | |||
28613 | JS::Rooted<JSObject*> obj(cx); | |||
28614 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28615 | JSAutoRealm reflectorRealm(cx, obj); | |||
28616 | JS::RootedVector<JS::Value> argv(cx); | |||
28617 | if (!argv.resize(1)) { | |||
28618 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28619 | return; | |||
28620 | } | |||
28621 | do { | |||
28622 | JS::ExposeObjectToActiveJS(aValue); | |||
28623 | argv[0].setObject(*aValue); | |||
28624 | if (!MaybeWrapObjectValue(cx, argv[0])) { | |||
28625 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28626 | return; | |||
28627 | } | |||
28628 | break; | |||
28629 | } while (false); | |||
28630 | ||||
28631 | JS::Rooted<JSObject*> backingObj(cx); | |||
28632 | bool created = false; | |||
28633 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10), | |||
28634 | &backingObj, &created, ObjectObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28635 | self)) { | |||
28636 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28637 | return; | |||
28638 | } | |||
28639 | if (created) { | |||
28640 | PreserveWrapper(self); | |||
28641 | } | |||
28642 | uint32_t length; | |||
28643 | aRv.MightThrowJSException(); | |||
28644 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
28645 | aRv.StealExceptionFromJSContext(cx); | |||
28646 | return; | |||
28647 | } | |||
28648 | aRv.MightThrowJSException(); | |||
28649 | if (!JS_SetElement(cx, backingObj, length, argv[0])) { | |||
28650 | aRv.StealExceptionFromJSContext(cx); | |||
28651 | return; | |||
28652 | } | |||
28653 | } | |||
28654 | ||||
28655 | void | |||
28656 | RemoveLastElement(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
28657 | { | |||
28658 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28658); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28658; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28659 | AutoJSAPI jsapi; | |||
28660 | jsapi.Init(); | |||
28661 | JSContext* cx = jsapi.cx(); | |||
28662 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
28663 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
28664 | // the reflector, and wrapping has no side-effects. | |||
28665 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
28666 | if (!scope) { | |||
28667 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28668 | return; | |||
28669 | } | |||
28670 | JSAutoRealm tempRealm(cx, scope); | |||
28671 | JS::Rooted<JS::Value> v(cx); | |||
28672 | if(!ToJSValue(cx, self, &v)) { | |||
28673 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28674 | return; | |||
28675 | } | |||
28676 | // This is a reflector, but due to trying to name things | |||
28677 | // similarly across method generators, it's called obj here. | |||
28678 | JS::Rooted<JSObject*> obj(cx); | |||
28679 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28680 | JSAutoRealm reflectorRealm(cx, obj); | |||
28681 | ||||
28682 | JS::Rooted<JSObject*> backingObj(cx); | |||
28683 | bool created = false; | |||
28684 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10), | |||
28685 | &backingObj, &created, ObjectObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28686 | self)) { | |||
28687 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28688 | return; | |||
28689 | } | |||
28690 | if (created) { | |||
28691 | PreserveWrapper(self); | |||
28692 | } | |||
28693 | uint32_t length; | |||
28694 | aRv.MightThrowJSException(); | |||
28695 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
28696 | aRv.StealExceptionFromJSContext(cx); | |||
28697 | return; | |||
28698 | } | |||
28699 | if (length == 0) { | |||
28700 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
28701 | return; | |||
28702 | } | |||
28703 | aRv.MightThrowJSException(); | |||
28704 | if (!JS::SetArrayLength(cx, backingObj, length - 1)) { | |||
28705 | aRv.StealExceptionFromJSContext(cx); | |||
28706 | return; | |||
28707 | } | |||
28708 | } | |||
28709 | ||||
28710 | uint32_t | |||
28711 | Length(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
28712 | { | |||
28713 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28713); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28713; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28714 | AutoJSAPI jsapi; | |||
28715 | jsapi.Init(); | |||
28716 | JSContext* cx = jsapi.cx(); | |||
28717 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
28718 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
28719 | // the reflector, and wrapping has no side-effects. | |||
28720 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
28721 | if (!scope) { | |||
28722 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28723 | return uint32_t(0); | |||
28724 | } | |||
28725 | JSAutoRealm tempRealm(cx, scope); | |||
28726 | JS::Rooted<JS::Value> v(cx); | |||
28727 | if(!ToJSValue(cx, self, &v)) { | |||
28728 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28729 | return uint32_t(0); | |||
28730 | } | |||
28731 | // This is a reflector, but due to trying to name things | |||
28732 | // similarly across method generators, it's called obj here. | |||
28733 | JS::Rooted<JSObject*> obj(cx); | |||
28734 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28735 | JSAutoRealm reflectorRealm(cx, obj); | |||
28736 | ||||
28737 | JS::Rooted<JSObject*> backingObj(cx); | |||
28738 | bool created = false; | |||
28739 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10), | |||
28740 | &backingObj, &created, ObjectObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28741 | self)) { | |||
28742 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28743 | return uint32_t(0); | |||
28744 | } | |||
28745 | if (created) { | |||
28746 | PreserveWrapper(self); | |||
28747 | } | |||
28748 | uint32_t retVal; | |||
28749 | aRv.MightThrowJSException(); | |||
28750 | if (!JS::GetArrayLength(cx, backingObj, &retVal)) { | |||
28751 | aRv.StealExceptionFromJSContext(cx); | |||
28752 | return uint32_t(0); | |||
28753 | } | |||
28754 | return retVal; | |||
28755 | } | |||
28756 | } // namespace ObjectObservableArrayHelpers | |||
28757 | ||||
28758 | MOZ_CAN_RUN_SCRIPT static bool | |||
28759 | get_objectObservableArray(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
28760 | { | |||
28761 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject28764( cx, "TestExampleInterface" , "objectObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28762 | "TestExampleInterface", "objectObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject28764( cx, "TestExampleInterface" , "objectObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28763 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject28764( cx, "TestExampleInterface" , "objectObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28764 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject28764( cx, "TestExampleInterface" , "objectObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
28765 | ||||
28766 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
28767 | JS::Rooted<JSObject*> backingObj(cx); | |||
28768 | bool created = false; | |||
28769 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10), | |||
28770 | &backingObj, &created, ObjectObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28771 | self)) { | |||
28772 | return false; | |||
28773 | } | |||
28774 | if (created) { | |||
28775 | PreserveWrapper(self); | |||
28776 | } | |||
28777 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 28777); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 28777; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
28778 | args.rval().setObject(*backingObj); | |||
28779 | return true; | |||
28780 | } | |||
28781 | ||||
28782 | MOZ_CAN_RUN_SCRIPT static bool | |||
28783 | set_objectObservableArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
28784 | { | |||
28785 | BindingCallContext cx(cx_, "TestExampleInterface.objectObservableArray setter"); | |||
28786 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject28789( cx, "TestExampleInterface" , "objectObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28787 | "TestExampleInterface", "objectObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject28789( cx, "TestExampleInterface" , "objectObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28788 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject28789( cx, "TestExampleInterface" , "objectObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
28789 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject28789( cx, "TestExampleInterface" , "objectObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
28790 | ||||
28791 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
28792 | binding_detail::AutoSequence<JSObject*> arg0; | |||
28793 | SequenceRooter<JSObject*> arg0_holder(cx, &arg0); | |||
28794 | if (args[0].isObject()) { | |||
28795 | JS::ForOfIterator iter(cx); | |||
28796 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
28797 | return false; | |||
28798 | } | |||
28799 | if (!iter.valueIsIterable()) { | |||
28800 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
28801 | return false; | |||
28802 | } | |||
28803 | binding_detail::AutoSequence<JSObject*> &arr = arg0; | |||
28804 | JS::Rooted<JS::Value> temp(cx); | |||
28805 | while (true) { | |||
28806 | bool done; | |||
28807 | if (!iter.next(&temp, &done)) { | |||
28808 | return false; | |||
28809 | } | |||
28810 | if (done) { | |||
28811 | break; | |||
28812 | } | |||
28813 | JSObject** slotPtr = arr.AppendElement(nullptr, mozilla::fallible); | |||
28814 | if (!slotPtr) { | |||
28815 | JS_ReportOutOfMemory(cx); | |||
28816 | return false; | |||
28817 | } | |||
28818 | JSObject*& slot = *slotPtr; | |||
28819 | if (temp.isObject()) { | |||
28820 | slot = &temp.toObject(); | |||
28821 | } else { | |||
28822 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of value being assigned"); | |||
28823 | return false; | |||
28824 | } | |||
28825 | } | |||
28826 | } else { | |||
28827 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
28828 | return false; | |||
28829 | } | |||
28830 | if (xpc::WrapperFactory::IsXrayWrapper(obj)) { | |||
28831 | JS_ReportErrorASCII(cx, "Accessing from Xray wrapper is not supported."); | |||
28832 | return false; | |||
28833 | } | |||
28834 | ||||
28835 | JS::Rooted<JSObject*> backingObj(cx); | |||
28836 | bool created = false; | |||
28837 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10), | |||
28838 | &backingObj, &created, ObjectObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
28839 | self)) { | |||
28840 | return false; | |||
28841 | } | |||
28842 | if (created) { | |||
28843 | PreserveWrapper(self); | |||
28844 | } | |||
28845 | ||||
28846 | const ObservableArrayProxyHandler* handler = GetObservableArrayProxyHandler(backingObj); | |||
28847 | if (!handler->SetLength(cx, backingObj, 0)) { | |||
28848 | return false; | |||
28849 | } | |||
28850 | ||||
28851 | JS::Rooted<JS::Value> val(cx); | |||
28852 | for (size_t i = 0; i < arg0.Length(); i++) { | |||
28853 | JS::ExposeObjectToActiveJS(arg0.ElementAt(i)); | |||
28854 | val.setObject(*arg0.ElementAt(i)); | |||
28855 | if (!MaybeWrapObjectValue(cx, &val)) { | |||
28856 | return false; | |||
28857 | } | |||
28858 | if (!JS_SetElement(cx, backingObj, i, val)) { | |||
28859 | return false; | |||
28860 | } | |||
28861 | } | |||
28862 | ||||
28863 | return true; | |||
28864 | } | |||
28865 | ||||
28866 | static const JSJitInfo objectObservableArray_getterinfo = { | |||
28867 | { get_objectObservableArray }, | |||
28868 | { prototypes::id::TestExampleInterface }, | |||
28869 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
28870 | JSJitInfo::Getter, | |||
28871 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
28872 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
28873 | false, /* isInfallible. False in setters. */ | |||
28874 | false, /* isMovable. Not relevant for setters. */ | |||
28875 | false, /* isEliminatable. Not relevant for setters. */ | |||
28876 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
28877 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
28878 | false, /* isTypedMethod. Only relevant for methods. */ | |||
28879 | (DOM_INSTANCE_RESERVED_SLOTS1 + 10) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
28880 | }; | |||
28881 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 10) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
28882 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 10) < 22, "There is no slot for us"); | |||
28883 | static const JSJitInfo objectObservableArray_setterinfo = { | |||
28884 | { (JSJitGetterOp)set_objectObservableArray }, | |||
28885 | { prototypes::id::TestExampleInterface }, | |||
28886 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
28887 | JSJitInfo::Setter, | |||
28888 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
28889 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
28890 | false, /* isInfallible. False in setters. */ | |||
28891 | false, /* isMovable. Not relevant for setters. */ | |||
28892 | false, /* isEliminatable. Not relevant for setters. */ | |||
28893 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
28894 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
28895 | false, /* isTypedMethod. Only relevant for methods. */ | |||
28896 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
28897 | }; | |||
28898 | ||||
28899 | namespace AnyObservableArray_Binding { | |||
28900 | class ObservableArrayProxyHandler : public mozilla::dom::ObservableArrayProxyHandler | |||
28901 | { | |||
28902 | protected: | |||
28903 | bool | |||
28904 | OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const override; | |||
28905 | ||||
28906 | bool | |||
28907 | SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const override; | |||
28908 | ||||
28909 | public: | |||
28910 | static const ObservableArrayProxyHandler* | |||
28911 | getInstance(); | |||
28912 | }; | |||
28913 | ||||
28914 | bool | |||
28915 | ObservableArrayProxyHandler::OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const | |||
28916 | { | |||
28917 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 28917); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 28917; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28918 | ||||
28919 | BindingCallContext cx(aCx, "ObservableArray OnDeleteItem"); | |||
28920 | JS::Rooted<JS::Value> decl(cx); | |||
28921 | decl = aValue; | |||
28922 | ||||
28923 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
28924 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
28925 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 28925); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 28925; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28926 | ||||
28927 | ErrorResult rv; | |||
28928 | MOZ_KnownLive(interface)(interface)->OnDeleteAnyObservableArray(cx, decl, aIndex, rv); | |||
28929 | return !rv.MaybeSetPendingException(cx); | |||
28930 | } | |||
28931 | ||||
28932 | bool | |||
28933 | ObservableArrayProxyHandler::SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const | |||
28934 | { | |||
28935 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 28935); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 28935; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28936 | uint32_t oldLen; | |||
28937 | if (!JS::GetArrayLength(aCx, aBackingList, &oldLen)) { | |||
28938 | return false; | |||
28939 | } | |||
28940 | ||||
28941 | if (aIndex > oldLen) { | |||
28942 | return aResult.failBadIndex(); | |||
28943 | } | |||
28944 | ||||
28945 | BindingCallContext cx(aCx, "ObservableArray SetIndexedValue"); | |||
28946 | JS::Rooted<JS::Value> decl(cx); | |||
28947 | decl = aValue; | |||
28948 | ||||
28949 | if (aIndex < oldLen) { | |||
28950 | JS::Rooted<JS::Value> value(aCx); | |||
28951 | if (!JS_GetElement(aCx, aBackingList, aIndex, &value)) { | |||
28952 | return false; | |||
28953 | } | |||
28954 | ||||
28955 | if (!OnDeleteItem(aCx, aProxy, value, aIndex)) { | |||
28956 | return false; | |||
28957 | } | |||
28958 | } | |||
28959 | ||||
28960 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
28961 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
28962 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 28962); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 28962; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
28963 | ||||
28964 | ErrorResult rv; | |||
28965 | MOZ_KnownLive(interface)(interface)->OnSetAnyObservableArray(cx, decl, aIndex, rv); | |||
28966 | if (rv.MaybeSetPendingException(cx)) { | |||
28967 | return false; | |||
28968 | } | |||
28969 | ||||
28970 | if (!JS_SetElement(aCx, aBackingList, aIndex, aValue)) { | |||
28971 | return false; | |||
28972 | } | |||
28973 | ||||
28974 | return aResult.succeed(); | |||
28975 | } | |||
28976 | ||||
28977 | const ObservableArrayProxyHandler* | |||
28978 | ObservableArrayProxyHandler::getInstance() | |||
28979 | { | |||
28980 | static const ObservableArrayProxyHandler instance; | |||
28981 | return &instance; | |||
28982 | } | |||
28983 | } // namespace AnyObservableArray_Binding | |||
28984 | ||||
28985 | namespace AnyObservableArrayHelpers { | |||
28986 | void | |||
28987 | ElementAt(mozilla::dom::TestExampleInterface* self, JSContext* cx, uint32_t aIndex, JS::MutableHandle<JS::Value> aRetVal, ErrorResult& aRv) | |||
28988 | { | |||
28989 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 28989); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 28989; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
28990 | JS::Rooted<JS::Value> v(cx); | |||
28991 | if(!ToJSValue(cx, self, &v)) { | |||
28992 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
28993 | return; | |||
28994 | } | |||
28995 | // This is a reflector, but due to trying to name things | |||
28996 | // similarly across method generators, it's called obj here. | |||
28997 | JS::Rooted<JSObject*> obj(cx); | |||
28998 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
28999 | JS::Rooted<JS::Value> result(cx); | |||
29000 | { | |||
29001 | JSAutoRealm reflectorRealm(cx, obj); | |||
29002 | ||||
29003 | JS::Rooted<JSObject*> backingObj(cx); | |||
29004 | bool created = false; | |||
29005 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11), | |||
29006 | &backingObj, &created, AnyObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29007 | self)) { | |||
29008 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29009 | return; | |||
29010 | } | |||
29011 | if (created) { | |||
29012 | PreserveWrapper(self); | |||
29013 | } | |||
29014 | aRv.MightThrowJSException(); | |||
29015 | if (!JS_GetElement(cx, backingObj, aIndex, &result)) { | |||
29016 | aRv.StealExceptionFromJSContext(cx); | |||
29017 | return; | |||
29018 | } | |||
29019 | if (result.isUndefined()) { | |||
29020 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
29021 | return; | |||
29022 | } | |||
29023 | } | |||
29024 | if (!JS_WrapValue(cx, &result)) { | |||
29025 | aRv.NoteJSContextException(cx); | |||
29026 | return; | |||
29027 | } | |||
29028 | JS::Rooted<JS::Value> rvalDecl(cx); | |||
29029 | rvalDecl = result; | |||
29030 | aRetVal.set(rvalDecl); | |||
29031 | } | |||
29032 | ||||
29033 | void | |||
29034 | ReplaceElementAt(mozilla::dom::TestExampleInterface* self, uint32_t aIndex, JS::Handle<JS::Value> aValue, ErrorResult& aRv) | |||
29035 | { | |||
29036 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29036); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29036; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29037 | AutoJSAPI jsapi; | |||
29038 | jsapi.Init(); | |||
29039 | JSContext* cx = jsapi.cx(); | |||
29040 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29041 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29042 | // the reflector, and wrapping has no side-effects. | |||
29043 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29044 | if (!scope) { | |||
29045 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29046 | return; | |||
29047 | } | |||
29048 | JSAutoRealm tempRealm(cx, scope); | |||
29049 | JS::Rooted<JS::Value> v(cx); | |||
29050 | if(!ToJSValue(cx, self, &v)) { | |||
29051 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29052 | return; | |||
29053 | } | |||
29054 | // This is a reflector, but due to trying to name things | |||
29055 | // similarly across method generators, it's called obj here. | |||
29056 | JS::Rooted<JSObject*> obj(cx); | |||
29057 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29058 | JSAutoRealm reflectorRealm(cx, obj); | |||
29059 | JS::RootedVector<JS::Value> argv(cx); | |||
29060 | if (!argv.resize(1)) { | |||
29061 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29062 | return; | |||
29063 | } | |||
29064 | do { | |||
29065 | JS::ExposeValueToActiveJS(aValue); | |||
29066 | argv[0].set(aValue); | |||
29067 | if (!MaybeWrapValue(cx, argv[0])) { | |||
29068 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29069 | return; | |||
29070 | } | |||
29071 | break; | |||
29072 | } while (false); | |||
29073 | ||||
29074 | JS::Rooted<JSObject*> backingObj(cx); | |||
29075 | bool created = false; | |||
29076 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11), | |||
29077 | &backingObj, &created, AnyObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29078 | self)) { | |||
29079 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29080 | return; | |||
29081 | } | |||
29082 | if (created) { | |||
29083 | PreserveWrapper(self); | |||
29084 | } | |||
29085 | uint32_t length; | |||
29086 | aRv.MightThrowJSException(); | |||
29087 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
29088 | aRv.StealExceptionFromJSContext(cx); | |||
29089 | return; | |||
29090 | } | |||
29091 | if (aIndex > length) { | |||
29092 | aRv.ThrowRangeError("Invalid index"); | |||
29093 | return; | |||
29094 | } | |||
29095 | aRv.MightThrowJSException(); | |||
29096 | if (!JS_SetElement(cx, backingObj, aIndex, argv[0])) { | |||
29097 | aRv.StealExceptionFromJSContext(cx); | |||
29098 | return; | |||
29099 | } | |||
29100 | } | |||
29101 | ||||
29102 | void | |||
29103 | AppendElement(mozilla::dom::TestExampleInterface* self, JS::Handle<JS::Value> aValue, ErrorResult& aRv) | |||
29104 | { | |||
29105 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29105); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29105; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29106 | AutoJSAPI jsapi; | |||
29107 | jsapi.Init(); | |||
29108 | JSContext* cx = jsapi.cx(); | |||
29109 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29110 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29111 | // the reflector, and wrapping has no side-effects. | |||
29112 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29113 | if (!scope) { | |||
29114 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29115 | return; | |||
29116 | } | |||
29117 | JSAutoRealm tempRealm(cx, scope); | |||
29118 | JS::Rooted<JS::Value> v(cx); | |||
29119 | if(!ToJSValue(cx, self, &v)) { | |||
29120 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29121 | return; | |||
29122 | } | |||
29123 | // This is a reflector, but due to trying to name things | |||
29124 | // similarly across method generators, it's called obj here. | |||
29125 | JS::Rooted<JSObject*> obj(cx); | |||
29126 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29127 | JSAutoRealm reflectorRealm(cx, obj); | |||
29128 | JS::RootedVector<JS::Value> argv(cx); | |||
29129 | if (!argv.resize(1)) { | |||
29130 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29131 | return; | |||
29132 | } | |||
29133 | do { | |||
29134 | JS::ExposeValueToActiveJS(aValue); | |||
29135 | argv[0].set(aValue); | |||
29136 | if (!MaybeWrapValue(cx, argv[0])) { | |||
29137 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29138 | return; | |||
29139 | } | |||
29140 | break; | |||
29141 | } while (false); | |||
29142 | ||||
29143 | JS::Rooted<JSObject*> backingObj(cx); | |||
29144 | bool created = false; | |||
29145 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11), | |||
29146 | &backingObj, &created, AnyObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29147 | self)) { | |||
29148 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29149 | return; | |||
29150 | } | |||
29151 | if (created) { | |||
29152 | PreserveWrapper(self); | |||
29153 | } | |||
29154 | uint32_t length; | |||
29155 | aRv.MightThrowJSException(); | |||
29156 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
29157 | aRv.StealExceptionFromJSContext(cx); | |||
29158 | return; | |||
29159 | } | |||
29160 | aRv.MightThrowJSException(); | |||
29161 | if (!JS_SetElement(cx, backingObj, length, argv[0])) { | |||
29162 | aRv.StealExceptionFromJSContext(cx); | |||
29163 | return; | |||
29164 | } | |||
29165 | } | |||
29166 | ||||
29167 | void | |||
29168 | RemoveLastElement(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
29169 | { | |||
29170 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29170); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29170; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29171 | AutoJSAPI jsapi; | |||
29172 | jsapi.Init(); | |||
29173 | JSContext* cx = jsapi.cx(); | |||
29174 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29175 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29176 | // the reflector, and wrapping has no side-effects. | |||
29177 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29178 | if (!scope) { | |||
29179 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29180 | return; | |||
29181 | } | |||
29182 | JSAutoRealm tempRealm(cx, scope); | |||
29183 | JS::Rooted<JS::Value> v(cx); | |||
29184 | if(!ToJSValue(cx, self, &v)) { | |||
29185 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29186 | return; | |||
29187 | } | |||
29188 | // This is a reflector, but due to trying to name things | |||
29189 | // similarly across method generators, it's called obj here. | |||
29190 | JS::Rooted<JSObject*> obj(cx); | |||
29191 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29192 | JSAutoRealm reflectorRealm(cx, obj); | |||
29193 | ||||
29194 | JS::Rooted<JSObject*> backingObj(cx); | |||
29195 | bool created = false; | |||
29196 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11), | |||
29197 | &backingObj, &created, AnyObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29198 | self)) { | |||
29199 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29200 | return; | |||
29201 | } | |||
29202 | if (created) { | |||
29203 | PreserveWrapper(self); | |||
29204 | } | |||
29205 | uint32_t length; | |||
29206 | aRv.MightThrowJSException(); | |||
29207 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
29208 | aRv.StealExceptionFromJSContext(cx); | |||
29209 | return; | |||
29210 | } | |||
29211 | if (length == 0) { | |||
29212 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
29213 | return; | |||
29214 | } | |||
29215 | aRv.MightThrowJSException(); | |||
29216 | if (!JS::SetArrayLength(cx, backingObj, length - 1)) { | |||
29217 | aRv.StealExceptionFromJSContext(cx); | |||
29218 | return; | |||
29219 | } | |||
29220 | } | |||
29221 | ||||
29222 | uint32_t | |||
29223 | Length(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
29224 | { | |||
29225 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29225); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29225; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29226 | AutoJSAPI jsapi; | |||
29227 | jsapi.Init(); | |||
29228 | JSContext* cx = jsapi.cx(); | |||
29229 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29230 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29231 | // the reflector, and wrapping has no side-effects. | |||
29232 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29233 | if (!scope) { | |||
29234 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29235 | return uint32_t(0); | |||
29236 | } | |||
29237 | JSAutoRealm tempRealm(cx, scope); | |||
29238 | JS::Rooted<JS::Value> v(cx); | |||
29239 | if(!ToJSValue(cx, self, &v)) { | |||
29240 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29241 | return uint32_t(0); | |||
29242 | } | |||
29243 | // This is a reflector, but due to trying to name things | |||
29244 | // similarly across method generators, it's called obj here. | |||
29245 | JS::Rooted<JSObject*> obj(cx); | |||
29246 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29247 | JSAutoRealm reflectorRealm(cx, obj); | |||
29248 | ||||
29249 | JS::Rooted<JSObject*> backingObj(cx); | |||
29250 | bool created = false; | |||
29251 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11), | |||
29252 | &backingObj, &created, AnyObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29253 | self)) { | |||
29254 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29255 | return uint32_t(0); | |||
29256 | } | |||
29257 | if (created) { | |||
29258 | PreserveWrapper(self); | |||
29259 | } | |||
29260 | uint32_t retVal; | |||
29261 | aRv.MightThrowJSException(); | |||
29262 | if (!JS::GetArrayLength(cx, backingObj, &retVal)) { | |||
29263 | aRv.StealExceptionFromJSContext(cx); | |||
29264 | return uint32_t(0); | |||
29265 | } | |||
29266 | return retVal; | |||
29267 | } | |||
29268 | } // namespace AnyObservableArrayHelpers | |||
29269 | ||||
29270 | MOZ_CAN_RUN_SCRIPT static bool | |||
29271 | get_anyObservableArray(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
29272 | { | |||
29273 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject29276( cx, "TestExampleInterface" , "anyObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
29274 | "TestExampleInterface", "anyObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject29276( cx, "TestExampleInterface" , "anyObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
29275 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject29276( cx, "TestExampleInterface" , "anyObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
29276 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject29276( cx, "TestExampleInterface" , "anyObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
29277 | ||||
29278 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
29279 | JS::Rooted<JSObject*> backingObj(cx); | |||
29280 | bool created = false; | |||
29281 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11), | |||
29282 | &backingObj, &created, AnyObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29283 | self)) { | |||
29284 | return false; | |||
29285 | } | |||
29286 | if (created) { | |||
29287 | PreserveWrapper(self); | |||
29288 | } | |||
29289 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 29289); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 29289; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
29290 | args.rval().setObject(*backingObj); | |||
29291 | return true; | |||
29292 | } | |||
29293 | ||||
29294 | MOZ_CAN_RUN_SCRIPT static bool | |||
29295 | set_anyObservableArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
29296 | { | |||
29297 | BindingCallContext cx(cx_, "TestExampleInterface.anyObservableArray setter"); | |||
29298 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject29301( cx, "TestExampleInterface" , "anyObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
29299 | "TestExampleInterface", "anyObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject29301( cx, "TestExampleInterface" , "anyObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
29300 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject29301( cx, "TestExampleInterface" , "anyObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
29301 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject29301( cx, "TestExampleInterface" , "anyObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
29302 | ||||
29303 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
29304 | binding_detail::AutoSequence<JS::Value> arg0; | |||
29305 | SequenceRooter<JS::Value> arg0_holder(cx, &arg0); | |||
29306 | if (args[0].isObject()) { | |||
29307 | JS::ForOfIterator iter(cx); | |||
29308 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
29309 | return false; | |||
29310 | } | |||
29311 | if (!iter.valueIsIterable()) { | |||
29312 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
29313 | return false; | |||
29314 | } | |||
29315 | binding_detail::AutoSequence<JS::Value> &arr = arg0; | |||
29316 | JS::Rooted<JS::Value> temp(cx); | |||
29317 | while (true) { | |||
29318 | bool done; | |||
29319 | if (!iter.next(&temp, &done)) { | |||
29320 | return false; | |||
29321 | } | |||
29322 | if (done) { | |||
29323 | break; | |||
29324 | } | |||
29325 | JS::Value* slotPtr = arr.AppendElement(mozilla::fallible); | |||
29326 | if (!slotPtr) { | |||
29327 | JS_ReportOutOfMemory(cx); | |||
29328 | return false; | |||
29329 | } | |||
29330 | JS::Value& slot = *slotPtr; | |||
29331 | slot = temp; | |||
29332 | } | |||
29333 | } else { | |||
29334 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
29335 | return false; | |||
29336 | } | |||
29337 | if (xpc::WrapperFactory::IsXrayWrapper(obj)) { | |||
29338 | JS_ReportErrorASCII(cx, "Accessing from Xray wrapper is not supported."); | |||
29339 | return false; | |||
29340 | } | |||
29341 | ||||
29342 | JS::Rooted<JSObject*> backingObj(cx); | |||
29343 | bool created = false; | |||
29344 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11), | |||
29345 | &backingObj, &created, AnyObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29346 | self)) { | |||
29347 | return false; | |||
29348 | } | |||
29349 | if (created) { | |||
29350 | PreserveWrapper(self); | |||
29351 | } | |||
29352 | ||||
29353 | const ObservableArrayProxyHandler* handler = GetObservableArrayProxyHandler(backingObj); | |||
29354 | if (!handler->SetLength(cx, backingObj, 0)) { | |||
29355 | return false; | |||
29356 | } | |||
29357 | ||||
29358 | JS::Rooted<JS::Value> val(cx); | |||
29359 | for (size_t i = 0; i < arg0.Length(); i++) { | |||
29360 | JS::ExposeValueToActiveJS(arg0.ElementAt(i)); | |||
29361 | val.set(arg0.ElementAt(i)); | |||
29362 | if (!MaybeWrapValue(cx, &val)) { | |||
29363 | return false; | |||
29364 | } | |||
29365 | if (!JS_SetElement(cx, backingObj, i, val)) { | |||
29366 | return false; | |||
29367 | } | |||
29368 | } | |||
29369 | ||||
29370 | return true; | |||
29371 | } | |||
29372 | ||||
29373 | static const JSJitInfo anyObservableArray_getterinfo = { | |||
29374 | { get_anyObservableArray }, | |||
29375 | { prototypes::id::TestExampleInterface }, | |||
29376 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
29377 | JSJitInfo::Getter, | |||
29378 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
29379 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
29380 | false, /* isInfallible. False in setters. */ | |||
29381 | false, /* isMovable. Not relevant for setters. */ | |||
29382 | false, /* isEliminatable. Not relevant for setters. */ | |||
29383 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
29384 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
29385 | false, /* isTypedMethod. Only relevant for methods. */ | |||
29386 | (DOM_INSTANCE_RESERVED_SLOTS1 + 11) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
29387 | }; | |||
29388 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 11) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
29389 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 11) < 22, "There is no slot for us"); | |||
29390 | static const JSJitInfo anyObservableArray_setterinfo = { | |||
29391 | { (JSJitGetterOp)set_anyObservableArray }, | |||
29392 | { prototypes::id::TestExampleInterface }, | |||
29393 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
29394 | JSJitInfo::Setter, | |||
29395 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
29396 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
29397 | false, /* isInfallible. False in setters. */ | |||
29398 | false, /* isMovable. Not relevant for setters. */ | |||
29399 | false, /* isEliminatable. Not relevant for setters. */ | |||
29400 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
29401 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
29402 | false, /* isTypedMethod. Only relevant for methods. */ | |||
29403 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
29404 | }; | |||
29405 | ||||
29406 | namespace InterfaceObservableArray_Binding { | |||
29407 | class ObservableArrayProxyHandler : public mozilla::dom::ObservableArrayProxyHandler | |||
29408 | { | |||
29409 | protected: | |||
29410 | bool | |||
29411 | OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const override; | |||
29412 | ||||
29413 | bool | |||
29414 | SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const override; | |||
29415 | ||||
29416 | public: | |||
29417 | static const ObservableArrayProxyHandler* | |||
29418 | getInstance(); | |||
29419 | }; | |||
29420 | ||||
29421 | bool | |||
29422 | ObservableArrayProxyHandler::OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const | |||
29423 | { | |||
29424 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 29424); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 29424; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29425 | ||||
29426 | BindingCallContext cx(aCx, "ObservableArray OnDeleteItem"); | |||
29427 | NonNull<mozilla::dom::TestInterface> decl; | |||
29428 | if (aValue.isObject()) { | |||
29429 | { | |||
29430 | // Our JSContext should be in the right global to do unwrapping in. | |||
29431 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(aValue, decl, cx); | |||
29432 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
29433 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element in ObservableArray backing list", "TestInterface"); | |||
29434 | MOZ_ASSERT_UNREACHABLE("The item in ObservableArray backing list is not TestInterface (Wrapper)?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(false)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("false" " (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not TestInterface (Wrapper)?" ")", "../TestExampleGenBinding.cpp", 29434); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "false" ") (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not TestInterface (Wrapper)?" ")"); do { *((volatile int*)__null) = 29434; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29435 | return false; | |||
29436 | } | |||
29437 | } | |||
29438 | } else { | |||
29439 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element in ObservableArray backing list"); | |||
29440 | MOZ_ASSERT_UNREACHABLE("The item in ObservableArray backing list is not TestInterface (Wrapper)?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(false)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("false" " (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not TestInterface (Wrapper)?" ")", "../TestExampleGenBinding.cpp", 29440); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "false" ") (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not TestInterface (Wrapper)?" ")"); do { *((volatile int*)__null) = 29440; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29441 | return false; | |||
29442 | } | |||
29443 | ||||
29444 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
29445 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
29446 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 29446); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 29446; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29447 | ||||
29448 | ErrorResult rv; | |||
29449 | MOZ_KnownLive(interface)(interface)->OnDeleteInterfaceObservableArray(decl, aIndex, rv); | |||
29450 | return !rv.MaybeSetPendingException(cx); | |||
29451 | } | |||
29452 | ||||
29453 | bool | |||
29454 | ObservableArrayProxyHandler::SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const | |||
29455 | { | |||
29456 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 29456); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 29456; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29457 | uint32_t oldLen; | |||
29458 | if (!JS::GetArrayLength(aCx, aBackingList, &oldLen)) { | |||
29459 | return false; | |||
29460 | } | |||
29461 | ||||
29462 | if (aIndex > oldLen) { | |||
29463 | return aResult.failBadIndex(); | |||
29464 | } | |||
29465 | ||||
29466 | BindingCallContext cx(aCx, "ObservableArray SetIndexedValue"); | |||
29467 | NonNull<mozilla::dom::TestInterface> decl; | |||
29468 | if (aValue.isObject()) { | |||
29469 | { | |||
29470 | // Our JSContext should be in the right global to do unwrapping in. | |||
29471 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(aValue, decl, cx); | |||
29472 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
29473 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element in ObservableArray backing list", "TestInterface"); | |||
29474 | return false; | |||
29475 | } | |||
29476 | } | |||
29477 | } else { | |||
29478 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element in ObservableArray backing list"); | |||
29479 | return false; | |||
29480 | } | |||
29481 | ||||
29482 | if (aIndex < oldLen) { | |||
29483 | JS::Rooted<JS::Value> value(aCx); | |||
29484 | if (!JS_GetElement(aCx, aBackingList, aIndex, &value)) { | |||
29485 | return false; | |||
29486 | } | |||
29487 | ||||
29488 | if (!OnDeleteItem(aCx, aProxy, value, aIndex)) { | |||
29489 | return false; | |||
29490 | } | |||
29491 | } | |||
29492 | ||||
29493 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
29494 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
29495 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 29495); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 29495; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29496 | ||||
29497 | ErrorResult rv; | |||
29498 | MOZ_KnownLive(interface)(interface)->OnSetInterfaceObservableArray(decl, aIndex, rv); | |||
29499 | if (rv.MaybeSetPendingException(cx)) { | |||
29500 | return false; | |||
29501 | } | |||
29502 | ||||
29503 | if (!JS_SetElement(aCx, aBackingList, aIndex, aValue)) { | |||
29504 | return false; | |||
29505 | } | |||
29506 | ||||
29507 | return aResult.succeed(); | |||
29508 | } | |||
29509 | ||||
29510 | const ObservableArrayProxyHandler* | |||
29511 | ObservableArrayProxyHandler::getInstance() | |||
29512 | { | |||
29513 | static const ObservableArrayProxyHandler instance; | |||
29514 | return &instance; | |||
29515 | } | |||
29516 | } // namespace InterfaceObservableArray_Binding | |||
29517 | ||||
29518 | namespace InterfaceObservableArrayHelpers { | |||
29519 | already_AddRefed<TestInterface> | |||
29520 | ElementAt(mozilla::dom::TestExampleInterface* self, uint32_t aIndex, ErrorResult& aRv) | |||
29521 | { | |||
29522 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29522); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29522; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29523 | AutoJSAPI jsapi; | |||
29524 | jsapi.Init(); | |||
29525 | JSContext* cx = jsapi.cx(); | |||
29526 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29527 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29528 | // the reflector, and wrapping has no side-effects. | |||
29529 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29530 | if (!scope) { | |||
29531 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29532 | return nullptr; | |||
29533 | } | |||
29534 | JSAutoRealm tempRealm(cx, scope); | |||
29535 | JS::Rooted<JS::Value> v(cx); | |||
29536 | if(!ToJSValue(cx, self, &v)) { | |||
29537 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29538 | return nullptr; | |||
29539 | } | |||
29540 | // This is a reflector, but due to trying to name things | |||
29541 | // similarly across method generators, it's called obj here. | |||
29542 | JS::Rooted<JSObject*> obj(cx); | |||
29543 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29544 | JSAutoRealm reflectorRealm(cx, obj); | |||
29545 | ||||
29546 | JS::Rooted<JSObject*> backingObj(cx); | |||
29547 | bool created = false; | |||
29548 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12), | |||
29549 | &backingObj, &created, InterfaceObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29550 | self)) { | |||
29551 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29552 | return nullptr; | |||
29553 | } | |||
29554 | if (created) { | |||
29555 | PreserveWrapper(self); | |||
29556 | } | |||
29557 | JS::Rooted<JS::Value> result(cx); | |||
29558 | aRv.MightThrowJSException(); | |||
29559 | if (!JS_GetElement(cx, backingObj, aIndex, &result)) { | |||
29560 | aRv.StealExceptionFromJSContext(cx); | |||
29561 | return nullptr; | |||
29562 | } | |||
29563 | if (result.isUndefined()) { | |||
29564 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
29565 | return nullptr; | |||
29566 | } | |||
29567 | RefPtr<mozilla::dom::TestInterface> rvalDecl; | |||
29568 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
29569 | { | |||
29570 | // Our JSContext should be in the right global to do unwrapping in. | |||
29571 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(result, rvalDecl, cx); | |||
29572 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
29573 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29574 | return nullptr; | |||
29575 | } | |||
29576 | } | |||
29577 | return rvalDecl.forget(); | |||
29578 | } | |||
29579 | ||||
29580 | void | |||
29581 | ReplaceElementAt(mozilla::dom::TestExampleInterface* self, uint32_t aIndex, TestInterface& aValue, ErrorResult& aRv) | |||
29582 | { | |||
29583 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29583); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29583; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29584 | AutoJSAPI jsapi; | |||
29585 | jsapi.Init(); | |||
29586 | JSContext* cx = jsapi.cx(); | |||
29587 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29588 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29589 | // the reflector, and wrapping has no side-effects. | |||
29590 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29591 | if (!scope) { | |||
29592 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29593 | return; | |||
29594 | } | |||
29595 | JSAutoRealm tempRealm(cx, scope); | |||
29596 | JS::Rooted<JS::Value> v(cx); | |||
29597 | if(!ToJSValue(cx, self, &v)) { | |||
29598 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29599 | return; | |||
29600 | } | |||
29601 | // This is a reflector, but due to trying to name things | |||
29602 | // similarly across method generators, it's called obj here. | |||
29603 | JS::Rooted<JSObject*> obj(cx); | |||
29604 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29605 | JSAutoRealm reflectorRealm(cx, obj); | |||
29606 | JS::RootedVector<JS::Value> argv(cx); | |||
29607 | if (!argv.resize(1)) { | |||
29608 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29609 | return; | |||
29610 | } | |||
29611 | do { | |||
29612 | if (!GetOrCreateDOMReflector(cx, aValue, argv[0])) { | |||
29613 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 29613); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 29613; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
29614 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29615 | return; | |||
29616 | } | |||
29617 | break; | |||
29618 | } while (false); | |||
29619 | ||||
29620 | JS::Rooted<JSObject*> backingObj(cx); | |||
29621 | bool created = false; | |||
29622 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12), | |||
29623 | &backingObj, &created, InterfaceObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29624 | self)) { | |||
29625 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29626 | return; | |||
29627 | } | |||
29628 | if (created) { | |||
29629 | PreserveWrapper(self); | |||
29630 | } | |||
29631 | uint32_t length; | |||
29632 | aRv.MightThrowJSException(); | |||
29633 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
29634 | aRv.StealExceptionFromJSContext(cx); | |||
29635 | return; | |||
29636 | } | |||
29637 | if (aIndex > length) { | |||
29638 | aRv.ThrowRangeError("Invalid index"); | |||
29639 | return; | |||
29640 | } | |||
29641 | aRv.MightThrowJSException(); | |||
29642 | if (!JS_SetElement(cx, backingObj, aIndex, argv[0])) { | |||
29643 | aRv.StealExceptionFromJSContext(cx); | |||
29644 | return; | |||
29645 | } | |||
29646 | } | |||
29647 | ||||
29648 | void | |||
29649 | AppendElement(mozilla::dom::TestExampleInterface* self, TestInterface& aValue, ErrorResult& aRv) | |||
29650 | { | |||
29651 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29651); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29651; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29652 | AutoJSAPI jsapi; | |||
29653 | jsapi.Init(); | |||
29654 | JSContext* cx = jsapi.cx(); | |||
29655 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29656 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29657 | // the reflector, and wrapping has no side-effects. | |||
29658 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29659 | if (!scope) { | |||
29660 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29661 | return; | |||
29662 | } | |||
29663 | JSAutoRealm tempRealm(cx, scope); | |||
29664 | JS::Rooted<JS::Value> v(cx); | |||
29665 | if(!ToJSValue(cx, self, &v)) { | |||
29666 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29667 | return; | |||
29668 | } | |||
29669 | // This is a reflector, but due to trying to name things | |||
29670 | // similarly across method generators, it's called obj here. | |||
29671 | JS::Rooted<JSObject*> obj(cx); | |||
29672 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29673 | JSAutoRealm reflectorRealm(cx, obj); | |||
29674 | JS::RootedVector<JS::Value> argv(cx); | |||
29675 | if (!argv.resize(1)) { | |||
29676 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29677 | return; | |||
29678 | } | |||
29679 | do { | |||
29680 | if (!GetOrCreateDOMReflector(cx, aValue, argv[0])) { | |||
29681 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 29681); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 29681; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
29682 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29683 | return; | |||
29684 | } | |||
29685 | break; | |||
29686 | } while (false); | |||
29687 | ||||
29688 | JS::Rooted<JSObject*> backingObj(cx); | |||
29689 | bool created = false; | |||
29690 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12), | |||
29691 | &backingObj, &created, InterfaceObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29692 | self)) { | |||
29693 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29694 | return; | |||
29695 | } | |||
29696 | if (created) { | |||
29697 | PreserveWrapper(self); | |||
29698 | } | |||
29699 | uint32_t length; | |||
29700 | aRv.MightThrowJSException(); | |||
29701 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
29702 | aRv.StealExceptionFromJSContext(cx); | |||
29703 | return; | |||
29704 | } | |||
29705 | aRv.MightThrowJSException(); | |||
29706 | if (!JS_SetElement(cx, backingObj, length, argv[0])) { | |||
29707 | aRv.StealExceptionFromJSContext(cx); | |||
29708 | return; | |||
29709 | } | |||
29710 | } | |||
29711 | ||||
29712 | void | |||
29713 | RemoveLastElement(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
29714 | { | |||
29715 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29715); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29715; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29716 | AutoJSAPI jsapi; | |||
29717 | jsapi.Init(); | |||
29718 | JSContext* cx = jsapi.cx(); | |||
29719 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29720 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29721 | // the reflector, and wrapping has no side-effects. | |||
29722 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29723 | if (!scope) { | |||
29724 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29725 | return; | |||
29726 | } | |||
29727 | JSAutoRealm tempRealm(cx, scope); | |||
29728 | JS::Rooted<JS::Value> v(cx); | |||
29729 | if(!ToJSValue(cx, self, &v)) { | |||
29730 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29731 | return; | |||
29732 | } | |||
29733 | // This is a reflector, but due to trying to name things | |||
29734 | // similarly across method generators, it's called obj here. | |||
29735 | JS::Rooted<JSObject*> obj(cx); | |||
29736 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29737 | JSAutoRealm reflectorRealm(cx, obj); | |||
29738 | ||||
29739 | JS::Rooted<JSObject*> backingObj(cx); | |||
29740 | bool created = false; | |||
29741 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12), | |||
29742 | &backingObj, &created, InterfaceObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29743 | self)) { | |||
29744 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29745 | return; | |||
29746 | } | |||
29747 | if (created) { | |||
29748 | PreserveWrapper(self); | |||
29749 | } | |||
29750 | uint32_t length; | |||
29751 | aRv.MightThrowJSException(); | |||
29752 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
29753 | aRv.StealExceptionFromJSContext(cx); | |||
29754 | return; | |||
29755 | } | |||
29756 | if (length == 0) { | |||
29757 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
29758 | return; | |||
29759 | } | |||
29760 | aRv.MightThrowJSException(); | |||
29761 | if (!JS::SetArrayLength(cx, backingObj, length - 1)) { | |||
29762 | aRv.StealExceptionFromJSContext(cx); | |||
29763 | return; | |||
29764 | } | |||
29765 | } | |||
29766 | ||||
29767 | uint32_t | |||
29768 | Length(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
29769 | { | |||
29770 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 29770); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 29770; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
29771 | AutoJSAPI jsapi; | |||
29772 | jsapi.Init(); | |||
29773 | JSContext* cx = jsapi.cx(); | |||
29774 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
29775 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
29776 | // the reflector, and wrapping has no side-effects. | |||
29777 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
29778 | if (!scope) { | |||
29779 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29780 | return uint32_t(0); | |||
29781 | } | |||
29782 | JSAutoRealm tempRealm(cx, scope); | |||
29783 | JS::Rooted<JS::Value> v(cx); | |||
29784 | if(!ToJSValue(cx, self, &v)) { | |||
29785 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29786 | return uint32_t(0); | |||
29787 | } | |||
29788 | // This is a reflector, but due to trying to name things | |||
29789 | // similarly across method generators, it's called obj here. | |||
29790 | JS::Rooted<JSObject*> obj(cx); | |||
29791 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
29792 | JSAutoRealm reflectorRealm(cx, obj); | |||
29793 | ||||
29794 | JS::Rooted<JSObject*> backingObj(cx); | |||
29795 | bool created = false; | |||
29796 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12), | |||
29797 | &backingObj, &created, InterfaceObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29798 | self)) { | |||
29799 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
29800 | return uint32_t(0); | |||
29801 | } | |||
29802 | if (created) { | |||
29803 | PreserveWrapper(self); | |||
29804 | } | |||
29805 | uint32_t retVal; | |||
29806 | aRv.MightThrowJSException(); | |||
29807 | if (!JS::GetArrayLength(cx, backingObj, &retVal)) { | |||
29808 | aRv.StealExceptionFromJSContext(cx); | |||
29809 | return uint32_t(0); | |||
29810 | } | |||
29811 | return retVal; | |||
29812 | } | |||
29813 | } // namespace InterfaceObservableArrayHelpers | |||
29814 | ||||
29815 | MOZ_CAN_RUN_SCRIPT static bool | |||
29816 | get_interfaceObservableArray(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
29817 | { | |||
29818 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject29821( cx, "TestExampleInterface" , "interfaceObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
29819 | "TestExampleInterface", "interfaceObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject29821( cx, "TestExampleInterface" , "interfaceObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
29820 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject29821( cx, "TestExampleInterface" , "interfaceObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
29821 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject29821( cx, "TestExampleInterface" , "interfaceObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
29822 | ||||
29823 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
29824 | JS::Rooted<JSObject*> backingObj(cx); | |||
29825 | bool created = false; | |||
29826 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12), | |||
29827 | &backingObj, &created, InterfaceObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29828 | self)) { | |||
29829 | return false; | |||
29830 | } | |||
29831 | if (created) { | |||
29832 | PreserveWrapper(self); | |||
29833 | } | |||
29834 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 29834); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 29834; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
29835 | args.rval().setObject(*backingObj); | |||
29836 | return true; | |||
29837 | } | |||
29838 | ||||
29839 | MOZ_CAN_RUN_SCRIPT static bool | |||
29840 | set_interfaceObservableArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
29841 | { | |||
29842 | BindingCallContext cx(cx_, "TestExampleInterface.interfaceObservableArray setter"); | |||
29843 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject29846( cx, "TestExampleInterface" , "interfaceObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
29844 | "TestExampleInterface", "interfaceObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject29846( cx, "TestExampleInterface" , "interfaceObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
29845 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject29846( cx, "TestExampleInterface" , "interfaceObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
29846 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject29846( cx, "TestExampleInterface" , "interfaceObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
29847 | ||||
29848 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
29849 | binding_detail::AutoSequence<OwningNonNull<mozilla::dom::TestInterface>> arg0; | |||
29850 | if (args[0].isObject()) { | |||
29851 | JS::ForOfIterator iter(cx); | |||
29852 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
29853 | return false; | |||
29854 | } | |||
29855 | if (!iter.valueIsIterable()) { | |||
29856 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
29857 | return false; | |||
29858 | } | |||
29859 | binding_detail::AutoSequence<OwningNonNull<mozilla::dom::TestInterface>> &arr = arg0; | |||
29860 | JS::Rooted<JS::Value> temp(cx); | |||
29861 | while (true) { | |||
29862 | bool done; | |||
29863 | if (!iter.next(&temp, &done)) { | |||
29864 | return false; | |||
29865 | } | |||
29866 | if (done) { | |||
29867 | break; | |||
29868 | } | |||
29869 | OwningNonNull<mozilla::dom::TestInterface>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
29870 | if (!slotPtr) { | |||
29871 | JS_ReportOutOfMemory(cx); | |||
29872 | return false; | |||
29873 | } | |||
29874 | OwningNonNull<mozilla::dom::TestInterface>& slot = *slotPtr; | |||
29875 | if (temp.isObject()) { | |||
29876 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
29877 | { | |||
29878 | // Our JSContext should be in the right global to do unwrapping in. | |||
29879 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(&temp, slot, cx); | |||
29880 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
29881 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of value being assigned", "TestInterface"); | |||
29882 | return false; | |||
29883 | } | |||
29884 | } | |||
29885 | } else { | |||
29886 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of value being assigned"); | |||
29887 | return false; | |||
29888 | } | |||
29889 | } | |||
29890 | } else { | |||
29891 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
29892 | return false; | |||
29893 | } | |||
29894 | if (xpc::WrapperFactory::IsXrayWrapper(obj)) { | |||
29895 | JS_ReportErrorASCII(cx, "Accessing from Xray wrapper is not supported."); | |||
29896 | return false; | |||
29897 | } | |||
29898 | ||||
29899 | JS::Rooted<JSObject*> backingObj(cx); | |||
29900 | bool created = false; | |||
29901 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12), | |||
29902 | &backingObj, &created, InterfaceObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
29903 | self)) { | |||
29904 | return false; | |||
29905 | } | |||
29906 | if (created) { | |||
29907 | PreserveWrapper(self); | |||
29908 | } | |||
29909 | ||||
29910 | const ObservableArrayProxyHandler* handler = GetObservableArrayProxyHandler(backingObj); | |||
29911 | if (!handler->SetLength(cx, backingObj, 0)) { | |||
29912 | return false; | |||
29913 | } | |||
29914 | ||||
29915 | JS::Rooted<JS::Value> val(cx); | |||
29916 | for (size_t i = 0; i < arg0.Length(); i++) { | |||
29917 | if (!GetOrCreateDOMReflector(cx, arg0.ElementAt(i), &val)) { | |||
29918 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 29918); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 29918; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
29919 | return false; | |||
29920 | } | |||
29921 | if (!JS_SetElement(cx, backingObj, i, val)) { | |||
29922 | return false; | |||
29923 | } | |||
29924 | } | |||
29925 | ||||
29926 | return true; | |||
29927 | } | |||
29928 | ||||
29929 | static const JSJitInfo interfaceObservableArray_getterinfo = { | |||
29930 | { get_interfaceObservableArray }, | |||
29931 | { prototypes::id::TestExampleInterface }, | |||
29932 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
29933 | JSJitInfo::Getter, | |||
29934 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
29935 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
29936 | false, /* isInfallible. False in setters. */ | |||
29937 | false, /* isMovable. Not relevant for setters. */ | |||
29938 | false, /* isEliminatable. Not relevant for setters. */ | |||
29939 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
29940 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
29941 | false, /* isTypedMethod. Only relevant for methods. */ | |||
29942 | (DOM_INSTANCE_RESERVED_SLOTS1 + 12) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
29943 | }; | |||
29944 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 12) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
29945 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 12) < 22, "There is no slot for us"); | |||
29946 | static const JSJitInfo interfaceObservableArray_setterinfo = { | |||
29947 | { (JSJitGetterOp)set_interfaceObservableArray }, | |||
29948 | { prototypes::id::TestExampleInterface }, | |||
29949 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
29950 | JSJitInfo::Setter, | |||
29951 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
29952 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
29953 | false, /* isInfallible. False in setters. */ | |||
29954 | false, /* isMovable. Not relevant for setters. */ | |||
29955 | false, /* isEliminatable. Not relevant for setters. */ | |||
29956 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
29957 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
29958 | false, /* isTypedMethod. Only relevant for methods. */ | |||
29959 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
29960 | }; | |||
29961 | ||||
29962 | namespace NullableObservableArray_Binding { | |||
29963 | class ObservableArrayProxyHandler : public mozilla::dom::ObservableArrayProxyHandler | |||
29964 | { | |||
29965 | protected: | |||
29966 | bool | |||
29967 | OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const override; | |||
29968 | ||||
29969 | bool | |||
29970 | SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const override; | |||
29971 | ||||
29972 | public: | |||
29973 | static const ObservableArrayProxyHandler* | |||
29974 | getInstance(); | |||
29975 | }; | |||
29976 | ||||
29977 | bool | |||
29978 | ObservableArrayProxyHandler::OnDeleteItem(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JS::Value> aValue, uint32_t aIndex) const | |||
29979 | { | |||
29980 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 29980); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 29980; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29981 | ||||
29982 | BindingCallContext cx(aCx, "ObservableArray OnDeleteItem"); | |||
29983 | Nullable<int32_t> decl; | |||
29984 | if (aValue.isNullOrUndefined()) { | |||
29985 | decl.SetNull(); | |||
29986 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, aValue, "Element in ObservableArray backing list", &decl.SetValue())) { | |||
29987 | MOZ_ASSERT_UNREACHABLE("The item in ObservableArray backing list is not LongOrNull?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(false)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("false" " (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not LongOrNull?" ")", "../TestExampleGenBinding.cpp", 29987); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "false" ") (" "MOZ_ASSERT_UNREACHABLE: " "The item in ObservableArray backing list is not LongOrNull?" ")"); do { *((volatile int*)__null) = 29987; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29988 | return false; | |||
29989 | } | |||
29990 | ||||
29991 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
29992 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
29993 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 29993); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 29993; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
29994 | ||||
29995 | ErrorResult rv; | |||
29996 | MOZ_KnownLive(interface)(interface)->OnDeleteNullableObservableArray(decl, aIndex, rv); | |||
29997 | return !rv.MaybeSetPendingException(cx); | |||
29998 | } | |||
29999 | ||||
30000 | bool | |||
30001 | ObservableArrayProxyHandler::SetIndexedValue(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aBackingList, uint32_t aIndex, JS::Handle<JS::Value> aValue, JS::ObjectOpResult& aResult) const | |||
30002 | { | |||
30003 | MOZ_ASSERT(IsObservableArrayProxy(aProxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsObservableArrayProxy(aProxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsObservableArrayProxy(aProxy )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsObservableArrayProxy(aProxy)", "../TestExampleGenBinding.cpp" , 30003); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsObservableArrayProxy(aProxy)" ")"); do { *((volatile int*)__null) = 30003; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
30004 | uint32_t oldLen; | |||
30005 | if (!JS::GetArrayLength(aCx, aBackingList, &oldLen)) { | |||
30006 | return false; | |||
30007 | } | |||
30008 | ||||
30009 | if (aIndex > oldLen) { | |||
30010 | return aResult.failBadIndex(); | |||
30011 | } | |||
30012 | ||||
30013 | BindingCallContext cx(aCx, "ObservableArray SetIndexedValue"); | |||
30014 | Nullable<int32_t> decl; | |||
30015 | if (aValue.isNullOrUndefined()) { | |||
30016 | decl.SetNull(); | |||
30017 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, aValue, "Element in ObservableArray backing list", &decl.SetValue())) { | |||
30018 | return false; | |||
30019 | } | |||
30020 | ||||
30021 | if (aIndex < oldLen) { | |||
30022 | JS::Rooted<JS::Value> value(aCx); | |||
30023 | if (!JS_GetElement(aCx, aBackingList, aIndex, &value)) { | |||
30024 | return false; | |||
30025 | } | |||
30026 | ||||
30027 | if (!OnDeleteItem(aCx, aProxy, value, aIndex)) { | |||
30028 | return false; | |||
30029 | } | |||
30030 | } | |||
30031 | ||||
30032 | JS::Value val = js::GetProxyReservedSlot(aProxy, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0); | |||
30033 | auto* interface = static_cast<mozilla::dom::TestExampleInterface*>(val.toPrivate()); | |||
30034 | MOZ_ASSERT(interface)do { static_assert( mozilla::detail::AssertionConditionType< decltype(interface)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(interface))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("interface", "../TestExampleGenBinding.cpp" , 30034); AnnotateMozCrashReason("MOZ_ASSERT" "(" "interface" ")"); do { *((volatile int*)__null) = 30034; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
30035 | ||||
30036 | ErrorResult rv; | |||
30037 | MOZ_KnownLive(interface)(interface)->OnSetNullableObservableArray(decl, aIndex, rv); | |||
30038 | if (rv.MaybeSetPendingException(cx)) { | |||
30039 | return false; | |||
30040 | } | |||
30041 | ||||
30042 | if (!JS_SetElement(aCx, aBackingList, aIndex, aValue)) { | |||
30043 | return false; | |||
30044 | } | |||
30045 | ||||
30046 | return aResult.succeed(); | |||
30047 | } | |||
30048 | ||||
30049 | const ObservableArrayProxyHandler* | |||
30050 | ObservableArrayProxyHandler::getInstance() | |||
30051 | { | |||
30052 | static const ObservableArrayProxyHandler instance; | |||
30053 | return &instance; | |||
30054 | } | |||
30055 | } // namespace NullableObservableArray_Binding | |||
30056 | ||||
30057 | namespace NullableObservableArrayHelpers { | |||
30058 | Nullable<int32_t> | |||
30059 | ElementAt(mozilla::dom::TestExampleInterface* self, uint32_t aIndex, ErrorResult& aRv) | |||
30060 | { | |||
30061 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 30061); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 30061; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
30062 | AutoJSAPI jsapi; | |||
30063 | jsapi.Init(); | |||
30064 | JSContext* cx = jsapi.cx(); | |||
30065 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
30066 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
30067 | // the reflector, and wrapping has no side-effects. | |||
30068 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
30069 | if (!scope) { | |||
30070 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30071 | return Nullable<int32_t>(); | |||
30072 | } | |||
30073 | JSAutoRealm tempRealm(cx, scope); | |||
30074 | JS::Rooted<JS::Value> v(cx); | |||
30075 | if(!ToJSValue(cx, self, &v)) { | |||
30076 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30077 | return Nullable<int32_t>(); | |||
30078 | } | |||
30079 | // This is a reflector, but due to trying to name things | |||
30080 | // similarly across method generators, it's called obj here. | |||
30081 | JS::Rooted<JSObject*> obj(cx); | |||
30082 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
30083 | JSAutoRealm reflectorRealm(cx, obj); | |||
30084 | ||||
30085 | JS::Rooted<JSObject*> backingObj(cx); | |||
30086 | bool created = false; | |||
30087 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13), | |||
30088 | &backingObj, &created, NullableObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
30089 | self)) { | |||
30090 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30091 | return Nullable<int32_t>(); | |||
30092 | } | |||
30093 | if (created) { | |||
30094 | PreserveWrapper(self); | |||
30095 | } | |||
30096 | JS::Rooted<JS::Value> result(cx); | |||
30097 | aRv.MightThrowJSException(); | |||
30098 | if (!JS_GetElement(cx, backingObj, aIndex, &result)) { | |||
30099 | aRv.StealExceptionFromJSContext(cx); | |||
30100 | return Nullable<int32_t>(); | |||
30101 | } | |||
30102 | if (result.isUndefined()) { | |||
30103 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
30104 | return Nullable<int32_t>(); | |||
30105 | } | |||
30106 | Nullable<int32_t> rvalDecl; | |||
30107 | if (result.isNullOrUndefined()) { | |||
30108 | rvalDecl.SetNull(); | |||
30109 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, result, "Return value of ElementAt", &rvalDecl.SetValue())) { | |||
30110 | aRv.NoteJSContextException(cx); | |||
30111 | return Nullable<int32_t>(); | |||
30112 | } | |||
30113 | return rvalDecl; | |||
30114 | } | |||
30115 | ||||
30116 | void | |||
30117 | ReplaceElementAt(mozilla::dom::TestExampleInterface* self, uint32_t aIndex, const Nullable<int32_t>& aValue, ErrorResult& aRv) | |||
30118 | { | |||
30119 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 30119); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 30119; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
30120 | AutoJSAPI jsapi; | |||
30121 | jsapi.Init(); | |||
30122 | JSContext* cx = jsapi.cx(); | |||
30123 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
30124 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
30125 | // the reflector, and wrapping has no side-effects. | |||
30126 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
30127 | if (!scope) { | |||
30128 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30129 | return; | |||
30130 | } | |||
30131 | JSAutoRealm tempRealm(cx, scope); | |||
30132 | JS::Rooted<JS::Value> v(cx); | |||
30133 | if(!ToJSValue(cx, self, &v)) { | |||
30134 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30135 | return; | |||
30136 | } | |||
30137 | // This is a reflector, but due to trying to name things | |||
30138 | // similarly across method generators, it's called obj here. | |||
30139 | JS::Rooted<JSObject*> obj(cx); | |||
30140 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
30141 | JSAutoRealm reflectorRealm(cx, obj); | |||
30142 | JS::RootedVector<JS::Value> argv(cx); | |||
30143 | if (!argv.resize(1)) { | |||
30144 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30145 | return; | |||
30146 | } | |||
30147 | do { | |||
30148 | if (aValue.IsNull()) { | |||
30149 | argv[0].setNull(); | |||
30150 | break; | |||
30151 | } | |||
30152 | argv[0].setInt32(int32_t(aValue.Value())); | |||
30153 | break; | |||
30154 | } while (false); | |||
30155 | ||||
30156 | JS::Rooted<JSObject*> backingObj(cx); | |||
30157 | bool created = false; | |||
30158 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13), | |||
30159 | &backingObj, &created, NullableObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
30160 | self)) { | |||
30161 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30162 | return; | |||
30163 | } | |||
30164 | if (created) { | |||
30165 | PreserveWrapper(self); | |||
30166 | } | |||
30167 | uint32_t length; | |||
30168 | aRv.MightThrowJSException(); | |||
30169 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
30170 | aRv.StealExceptionFromJSContext(cx); | |||
30171 | return; | |||
30172 | } | |||
30173 | if (aIndex > length) { | |||
30174 | aRv.ThrowRangeError("Invalid index"); | |||
30175 | return; | |||
30176 | } | |||
30177 | aRv.MightThrowJSException(); | |||
30178 | if (!JS_SetElement(cx, backingObj, aIndex, argv[0])) { | |||
30179 | aRv.StealExceptionFromJSContext(cx); | |||
30180 | return; | |||
30181 | } | |||
30182 | } | |||
30183 | ||||
30184 | void | |||
30185 | AppendElement(mozilla::dom::TestExampleInterface* self, const Nullable<int32_t>& aValue, ErrorResult& aRv) | |||
30186 | { | |||
30187 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 30187); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 30187; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
30188 | AutoJSAPI jsapi; | |||
30189 | jsapi.Init(); | |||
30190 | JSContext* cx = jsapi.cx(); | |||
30191 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
30192 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
30193 | // the reflector, and wrapping has no side-effects. | |||
30194 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
30195 | if (!scope) { | |||
30196 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30197 | return; | |||
30198 | } | |||
30199 | JSAutoRealm tempRealm(cx, scope); | |||
30200 | JS::Rooted<JS::Value> v(cx); | |||
30201 | if(!ToJSValue(cx, self, &v)) { | |||
30202 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30203 | return; | |||
30204 | } | |||
30205 | // This is a reflector, but due to trying to name things | |||
30206 | // similarly across method generators, it's called obj here. | |||
30207 | JS::Rooted<JSObject*> obj(cx); | |||
30208 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
30209 | JSAutoRealm reflectorRealm(cx, obj); | |||
30210 | JS::RootedVector<JS::Value> argv(cx); | |||
30211 | if (!argv.resize(1)) { | |||
30212 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30213 | return; | |||
30214 | } | |||
30215 | do { | |||
30216 | if (aValue.IsNull()) { | |||
30217 | argv[0].setNull(); | |||
30218 | break; | |||
30219 | } | |||
30220 | argv[0].setInt32(int32_t(aValue.Value())); | |||
30221 | break; | |||
30222 | } while (false); | |||
30223 | ||||
30224 | JS::Rooted<JSObject*> backingObj(cx); | |||
30225 | bool created = false; | |||
30226 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13), | |||
30227 | &backingObj, &created, NullableObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
30228 | self)) { | |||
30229 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30230 | return; | |||
30231 | } | |||
30232 | if (created) { | |||
30233 | PreserveWrapper(self); | |||
30234 | } | |||
30235 | uint32_t length; | |||
30236 | aRv.MightThrowJSException(); | |||
30237 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
30238 | aRv.StealExceptionFromJSContext(cx); | |||
30239 | return; | |||
30240 | } | |||
30241 | aRv.MightThrowJSException(); | |||
30242 | if (!JS_SetElement(cx, backingObj, length, argv[0])) { | |||
30243 | aRv.StealExceptionFromJSContext(cx); | |||
30244 | return; | |||
30245 | } | |||
30246 | } | |||
30247 | ||||
30248 | void | |||
30249 | RemoveLastElement(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
30250 | { | |||
30251 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 30251); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 30251; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
30252 | AutoJSAPI jsapi; | |||
30253 | jsapi.Init(); | |||
30254 | JSContext* cx = jsapi.cx(); | |||
30255 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
30256 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
30257 | // the reflector, and wrapping has no side-effects. | |||
30258 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
30259 | if (!scope) { | |||
30260 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30261 | return; | |||
30262 | } | |||
30263 | JSAutoRealm tempRealm(cx, scope); | |||
30264 | JS::Rooted<JS::Value> v(cx); | |||
30265 | if(!ToJSValue(cx, self, &v)) { | |||
30266 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30267 | return; | |||
30268 | } | |||
30269 | // This is a reflector, but due to trying to name things | |||
30270 | // similarly across method generators, it's called obj here. | |||
30271 | JS::Rooted<JSObject*> obj(cx); | |||
30272 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
30273 | JSAutoRealm reflectorRealm(cx, obj); | |||
30274 | ||||
30275 | JS::Rooted<JSObject*> backingObj(cx); | |||
30276 | bool created = false; | |||
30277 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13), | |||
30278 | &backingObj, &created, NullableObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
30279 | self)) { | |||
30280 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30281 | return; | |||
30282 | } | |||
30283 | if (created) { | |||
30284 | PreserveWrapper(self); | |||
30285 | } | |||
30286 | uint32_t length; | |||
30287 | aRv.MightThrowJSException(); | |||
30288 | if (!JS::GetArrayLength(cx, backingObj, &length)) { | |||
30289 | aRv.StealExceptionFromJSContext(cx); | |||
30290 | return; | |||
30291 | } | |||
30292 | if (length == 0) { | |||
30293 | aRv.Throw(NS_ERROR_NOT_AVAILABLE); | |||
30294 | return; | |||
30295 | } | |||
30296 | aRv.MightThrowJSException(); | |||
30297 | if (!JS::SetArrayLength(cx, backingObj, length - 1)) { | |||
30298 | aRv.StealExceptionFromJSContext(cx); | |||
30299 | return; | |||
30300 | } | |||
30301 | } | |||
30302 | ||||
30303 | uint32_t | |||
30304 | Length(mozilla::dom::TestExampleInterface* self, ErrorResult& aRv) | |||
30305 | { | |||
30306 | MOZ_ASSERT(self)do { static_assert( mozilla::detail::AssertionConditionType< decltype(self)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(self))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("self", "../TestExampleGenBinding.cpp" , 30306); AnnotateMozCrashReason("MOZ_ASSERT" "(" "self" ")") ; do { *((volatile int*)__null) = 30306; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
30307 | AutoJSAPI jsapi; | |||
30308 | jsapi.Init(); | |||
30309 | JSContext* cx = jsapi.cx(); | |||
30310 | // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here because | |||
30311 | // all we want is to wrap into _some_ scope and then unwrap to find | |||
30312 | // the reflector, and wrapping has no side-effects. | |||
30313 | JSObject* scope = UnprivilegedJunkScopeOrWorkerGlobal(fallible); | |||
30314 | if (!scope) { | |||
30315 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30316 | return uint32_t(0); | |||
30317 | } | |||
30318 | JSAutoRealm tempRealm(cx, scope); | |||
30319 | JS::Rooted<JS::Value> v(cx); | |||
30320 | if(!ToJSValue(cx, self, &v)) { | |||
30321 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30322 | return uint32_t(0); | |||
30323 | } | |||
30324 | // This is a reflector, but due to trying to name things | |||
30325 | // similarly across method generators, it's called obj here. | |||
30326 | JS::Rooted<JSObject*> obj(cx); | |||
30327 | obj = js::UncheckedUnwrap(&v.toObject(), /* stopAtWindowProxy = */ false); | |||
30328 | JSAutoRealm reflectorRealm(cx, obj); | |||
30329 | ||||
30330 | JS::Rooted<JSObject*> backingObj(cx); | |||
30331 | bool created = false; | |||
30332 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13), | |||
30333 | &backingObj, &created, NullableObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
30334 | self)) { | |||
30335 | aRv.Throw(NS_ERROR_UNEXPECTED); | |||
30336 | return uint32_t(0); | |||
30337 | } | |||
30338 | if (created) { | |||
30339 | PreserveWrapper(self); | |||
30340 | } | |||
30341 | uint32_t retVal; | |||
30342 | aRv.MightThrowJSException(); | |||
30343 | if (!JS::GetArrayLength(cx, backingObj, &retVal)) { | |||
30344 | aRv.StealExceptionFromJSContext(cx); | |||
30345 | return uint32_t(0); | |||
30346 | } | |||
30347 | return retVal; | |||
30348 | } | |||
30349 | } // namespace NullableObservableArrayHelpers | |||
30350 | ||||
30351 | MOZ_CAN_RUN_SCRIPT static bool | |||
30352 | get_nullableObservableArray(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
30353 | { | |||
30354 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30357( cx, "TestExampleInterface" , "nullableObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30355 | "TestExampleInterface", "nullableObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30357( cx, "TestExampleInterface" , "nullableObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30356 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject30357( cx, "TestExampleInterface" , "nullableObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30357 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30357( cx, "TestExampleInterface" , "nullableObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30358 | ||||
30359 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30360 | JS::Rooted<JSObject*> backingObj(cx); | |||
30361 | bool created = false; | |||
30362 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13), | |||
30363 | &backingObj, &created, NullableObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
30364 | self)) { | |||
30365 | return false; | |||
30366 | } | |||
30367 | if (created) { | |||
30368 | PreserveWrapper(self); | |||
30369 | } | |||
30370 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30370); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30370; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30371 | args.rval().setObject(*backingObj); | |||
30372 | return true; | |||
30373 | } | |||
30374 | ||||
30375 | MOZ_CAN_RUN_SCRIPT static bool | |||
30376 | set_nullableObservableArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
30377 | { | |||
30378 | BindingCallContext cx(cx_, "TestExampleInterface.nullableObservableArray setter"); | |||
30379 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30382( cx, "TestExampleInterface" , "nullableObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30380 | "TestExampleInterface", "nullableObservableArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30382( cx, "TestExampleInterface" , "nullableObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30381 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject30382( cx, "TestExampleInterface" , "nullableObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30382 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30382( cx, "TestExampleInterface" , "nullableObservableArray", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30383 | ||||
30384 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30385 | binding_detail::AutoSequence<Nullable<int32_t>> arg0; | |||
30386 | if (args[0].isObject()) { | |||
30387 | JS::ForOfIterator iter(cx); | |||
30388 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
30389 | return false; | |||
30390 | } | |||
30391 | if (!iter.valueIsIterable()) { | |||
30392 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
30393 | return false; | |||
30394 | } | |||
30395 | binding_detail::AutoSequence<Nullable<int32_t>> &arr = arg0; | |||
30396 | JS::Rooted<JS::Value> temp(cx); | |||
30397 | while (true) { | |||
30398 | bool done; | |||
30399 | if (!iter.next(&temp, &done)) { | |||
30400 | return false; | |||
30401 | } | |||
30402 | if (done) { | |||
30403 | break; | |||
30404 | } | |||
30405 | Nullable<int32_t>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
30406 | if (!slotPtr) { | |||
30407 | JS_ReportOutOfMemory(cx); | |||
30408 | return false; | |||
30409 | } | |||
30410 | Nullable<int32_t>& slot = *slotPtr; | |||
30411 | if (temp.isNullOrUndefined()) { | |||
30412 | slot.SetNull(); | |||
30413 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of value being assigned", &slot.SetValue())) { | |||
30414 | return false; | |||
30415 | } | |||
30416 | } | |||
30417 | } else { | |||
30418 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "observable array"); | |||
30419 | return false; | |||
30420 | } | |||
30421 | if (xpc::WrapperFactory::IsXrayWrapper(obj)) { | |||
30422 | JS_ReportErrorASCII(cx, "Accessing from Xray wrapper is not supported."); | |||
30423 | return false; | |||
30424 | } | |||
30425 | ||||
30426 | JS::Rooted<JSObject*> backingObj(cx); | |||
30427 | bool created = false; | |||
30428 | if (!GetObservableArrayBackingObject(cx, obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13), | |||
30429 | &backingObj, &created, NullableObservableArray_Binding::ObservableArrayProxyHandler::getInstance(), | |||
30430 | self)) { | |||
30431 | return false; | |||
30432 | } | |||
30433 | if (created) { | |||
30434 | PreserveWrapper(self); | |||
30435 | } | |||
30436 | ||||
30437 | const ObservableArrayProxyHandler* handler = GetObservableArrayProxyHandler(backingObj); | |||
30438 | if (!handler->SetLength(cx, backingObj, 0)) { | |||
30439 | return false; | |||
30440 | } | |||
30441 | ||||
30442 | JS::Rooted<JS::Value> val(cx); | |||
30443 | for (size_t i = 0; i < arg0.Length(); i++) { | |||
30444 | if (arg0.ElementAt(i).IsNull()) { | |||
30445 | val.setNull(); | |||
30446 | if (!JS_SetElement(cx, backingObj, i, val)) { | |||
30447 | return false; | |||
30448 | } | |||
30449 | } | |||
30450 | val.setInt32(int32_t(arg0.ElementAt(i).Value())); | |||
30451 | if (!JS_SetElement(cx, backingObj, i, val)) { | |||
30452 | return false; | |||
30453 | } | |||
30454 | } | |||
30455 | ||||
30456 | return true; | |||
30457 | } | |||
30458 | ||||
30459 | static const JSJitInfo nullableObservableArray_getterinfo = { | |||
30460 | { get_nullableObservableArray }, | |||
30461 | { prototypes::id::TestExampleInterface }, | |||
30462 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30463 | JSJitInfo::Getter, | |||
30464 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
30465 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
30466 | false, /* isInfallible. False in setters. */ | |||
30467 | false, /* isMovable. Not relevant for setters. */ | |||
30468 | false, /* isEliminatable. Not relevant for setters. */ | |||
30469 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30470 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30471 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30472 | (DOM_INSTANCE_RESERVED_SLOTS1 + 13) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30473 | }; | |||
30474 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 13) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
30475 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 13) < 22, "There is no slot for us"); | |||
30476 | static const JSJitInfo nullableObservableArray_setterinfo = { | |||
30477 | { (JSJitGetterOp)set_nullableObservableArray }, | |||
30478 | { prototypes::id::TestExampleInterface }, | |||
30479 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30480 | JSJitInfo::Setter, | |||
30481 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
30482 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
30483 | false, /* isInfallible. False in setters. */ | |||
30484 | false, /* isMovable. Not relevant for setters. */ | |||
30485 | false, /* isEliminatable. Not relevant for setters. */ | |||
30486 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30487 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30488 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30489 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30490 | }; | |||
30491 | ||||
30492 | MOZ_CAN_RUN_SCRIPT static bool | |||
30493 | methodRenamedFrom(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
30494 | { | |||
30495 | BindingCallContext cx(cx_, "TestExampleInterface.methodRenamedFrom"); | |||
30496 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30499( cx, "TestExampleInterface" , "methodRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30497 | "TestExampleInterface", "methodRenamedFrom", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30499( cx, "TestExampleInterface" , "methodRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30498 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject30499( cx, "TestExampleInterface" , "methodRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30499 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30499( cx, "TestExampleInterface" , "methodRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30500 | ||||
30501 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30502 | unsigned argcount = std::min(args.length(), 1u); | |||
30503 | switch (argcount) { | |||
30504 | case 0: { | |||
30505 | // NOTE: This assert does NOT call the function. | |||
30506 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->MethodRenamedTo())>, "Should be returning void here"); | |||
30507 | MOZ_KnownLive(self)(self)->MethodRenamedTo(); | |||
30508 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30508); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30508; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30509 | args.rval().setUndefined(); | |||
30510 | return true; | |||
30511 | break; | |||
30512 | } | |||
30513 | case 1: { | |||
30514 | int8_t arg0; | |||
30515 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
30516 | return false; | |||
30517 | } | |||
30518 | // NOTE: This assert does NOT call the function. | |||
30519 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->MethodRenamedTo(arg0))>, "Should be returning void here"); | |||
30520 | MOZ_KnownLive(self)(self)->MethodRenamedTo(arg0); | |||
30521 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30521); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30521; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30522 | args.rval().setUndefined(); | |||
30523 | return true; | |||
30524 | break; | |||
30525 | } | |||
30526 | default: { | |||
30527 | // Using nsPrintfCString here would require including that | |||
30528 | // header. Let's not worry about it. | |||
30529 | nsAutoCString argCountStr; | |||
30530 | argCountStr.AppendPrintf("%u", args.length()); | |||
30531 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
30532 | } | |||
30533 | } | |||
30534 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 30534); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 30534; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
30535 | return false; | |||
30536 | } | |||
30537 | ||||
30538 | static const JSJitInfo methodRenamedFrom_methodinfo = { | |||
30539 | { (JSJitGetterOp)methodRenamedFrom }, | |||
30540 | { prototypes::id::TestExampleInterface }, | |||
30541 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30542 | JSJitInfo::Method, | |||
30543 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
30544 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
30545 | false, /* isInfallible. False in setters. */ | |||
30546 | false, /* isMovable. Not relevant for setters. */ | |||
30547 | false, /* isEliminatable. Not relevant for setters. */ | |||
30548 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30549 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30550 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30551 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30552 | }; | |||
30553 | ||||
30554 | MOZ_CAN_RUN_SCRIPT static bool | |||
30555 | get_attributeGetterRenamedFrom(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
30556 | { | |||
30557 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30560( cx, "TestExampleInterface" , "attributeGetterRenamedFrom", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
30558 | "TestExampleInterface", "attributeGetterRenamedFrom", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30560( cx, "TestExampleInterface" , "attributeGetterRenamedFrom", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
30559 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject30560( cx, "TestExampleInterface" , "attributeGetterRenamedFrom", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
30560 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30560( cx, "TestExampleInterface" , "attributeGetterRenamedFrom", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
30561 | ||||
30562 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30563 | int8_t result(MOZ_KnownLive(self)(self)->AttributeGetterRenamedTo()); | |||
30564 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30564); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30564; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30565 | args.rval().setInt32(int32_t(result)); | |||
30566 | return true; | |||
30567 | } | |||
30568 | ||||
30569 | static const JSJitInfo attributeGetterRenamedFrom_getterinfo = { | |||
30570 | { get_attributeGetterRenamedFrom }, | |||
30571 | { prototypes::id::TestExampleInterface }, | |||
30572 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30573 | JSJitInfo::Getter, | |||
30574 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
30575 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
30576 | true, /* isInfallible. False in setters. */ | |||
30577 | false, /* isMovable. Not relevant for setters. */ | |||
30578 | false, /* isEliminatable. Not relevant for setters. */ | |||
30579 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30580 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30581 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30582 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30583 | }; | |||
30584 | ||||
30585 | MOZ_CAN_RUN_SCRIPT static bool | |||
30586 | get_attributeRenamedFrom(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
30587 | { | |||
30588 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30591( cx, "TestExampleInterface" , "attributeRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30589 | "TestExampleInterface", "attributeRenamedFrom", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30591( cx, "TestExampleInterface" , "attributeRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30590 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject30591( cx, "TestExampleInterface" , "attributeRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30591 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30591( cx, "TestExampleInterface" , "attributeRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30592 | ||||
30593 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30594 | int8_t result(MOZ_KnownLive(self)(self)->AttributeRenamedTo()); | |||
30595 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30595); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30595; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30596 | args.rval().setInt32(int32_t(result)); | |||
30597 | return true; | |||
30598 | } | |||
30599 | ||||
30600 | MOZ_CAN_RUN_SCRIPT static bool | |||
30601 | set_attributeRenamedFrom(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
30602 | { | |||
30603 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30606( cx, "TestExampleInterface" , "attributeRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30604 | "TestExampleInterface", "attributeRenamedFrom", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30606( cx, "TestExampleInterface" , "attributeRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30605 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject30606( cx, "TestExampleInterface" , "attributeRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30606 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30606( cx, "TestExampleInterface" , "attributeRenamedFrom", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30607 | ||||
30608 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30609 | int8_t arg0; | |||
30610 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
30611 | return false; | |||
30612 | } | |||
30613 | // NOTE: This assert does NOT call the function. | |||
30614 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetAttributeRenamedTo(arg0))>, "Should be returning void here"); | |||
30615 | MOZ_KnownLive(self)(self)->SetAttributeRenamedTo(arg0); | |||
30616 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30616); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30616; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30617 | ||||
30618 | return true; | |||
30619 | } | |||
30620 | ||||
30621 | static const JSJitInfo attributeRenamedFrom_getterinfo = { | |||
30622 | { get_attributeRenamedFrom }, | |||
30623 | { prototypes::id::TestExampleInterface }, | |||
30624 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30625 | JSJitInfo::Getter, | |||
30626 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
30627 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
30628 | true, /* isInfallible. False in setters. */ | |||
30629 | false, /* isMovable. Not relevant for setters. */ | |||
30630 | false, /* isEliminatable. Not relevant for setters. */ | |||
30631 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30632 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30633 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30634 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30635 | }; | |||
30636 | static const JSJitInfo attributeRenamedFrom_setterinfo = { | |||
30637 | { (JSJitGetterOp)set_attributeRenamedFrom }, | |||
30638 | { prototypes::id::TestExampleInterface }, | |||
30639 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30640 | JSJitInfo::Setter, | |||
30641 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
30642 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
30643 | false, /* isInfallible. False in setters. */ | |||
30644 | false, /* isMovable. Not relevant for setters. */ | |||
30645 | false, /* isEliminatable. Not relevant for setters. */ | |||
30646 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30647 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30648 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30649 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30650 | }; | |||
30651 | ||||
30652 | MOZ_CAN_RUN_SCRIPT static bool | |||
30653 | passDictionary(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
30654 | { | |||
30655 | BindingCallContext cx(cx_, "TestExampleInterface.passDictionary"); | |||
30656 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30659( cx, "TestExampleInterface" , "passDictionary", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30657 | "TestExampleInterface", "passDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30659( cx, "TestExampleInterface" , "passDictionary", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30658 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject30659( cx, "TestExampleInterface" , "passDictionary", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30659 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30659( cx, "TestExampleInterface" , "passDictionary", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30660 | ||||
30661 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30662 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
30663 | if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1", false)) { | |||
30664 | return false; | |||
30665 | } | |||
30666 | // NOTE: This assert does NOT call the function. | |||
30667 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassDictionary(cx, Constify(arg0)))>, "Should be returning void here"); | |||
30668 | MOZ_KnownLive(self)(self)->PassDictionary(cx, Constify(arg0)); | |||
30669 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30669); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30669; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30670 | args.rval().setUndefined(); | |||
30671 | return true; | |||
30672 | } | |||
30673 | ||||
30674 | static const JSJitInfo passDictionary_methodinfo = { | |||
30675 | { (JSJitGetterOp)passDictionary }, | |||
30676 | { prototypes::id::TestExampleInterface }, | |||
30677 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30678 | JSJitInfo::Method, | |||
30679 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
30680 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
30681 | false, /* isInfallible. False in setters. */ | |||
30682 | false, /* isMovable. Not relevant for setters. */ | |||
30683 | false, /* isEliminatable. Not relevant for setters. */ | |||
30684 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30685 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30686 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30687 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30688 | }; | |||
30689 | ||||
30690 | MOZ_CAN_RUN_SCRIPT static bool | |||
30691 | passDictionary2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
30692 | { | |||
30693 | BindingCallContext cx(cx_, "TestExampleInterface.passDictionary2"); | |||
30694 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30697( cx, "TestExampleInterface" , "passDictionary2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30695 | "TestExampleInterface", "passDictionary2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30697( cx, "TestExampleInterface" , "passDictionary2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30696 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject30697( cx, "TestExampleInterface" , "passDictionary2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30697 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30697( cx, "TestExampleInterface" , "passDictionary2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30698 | ||||
30699 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30700 | if (!args.requireAtLeast(cx, "TestExampleInterface.passDictionary2", 1)) { | |||
30701 | return false; | |||
30702 | } | |||
30703 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
30704 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
30705 | return false; | |||
30706 | } | |||
30707 | // NOTE: This assert does NOT call the function. | |||
30708 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassDictionary2(cx, Constify(arg0)))>, "Should be returning void here"); | |||
30709 | MOZ_KnownLive(self)(self)->PassDictionary2(cx, Constify(arg0)); | |||
30710 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30710); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30710; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30711 | args.rval().setUndefined(); | |||
30712 | return true; | |||
30713 | } | |||
30714 | ||||
30715 | static const JSJitInfo passDictionary2_methodinfo = { | |||
30716 | { (JSJitGetterOp)passDictionary2 }, | |||
30717 | { prototypes::id::TestExampleInterface }, | |||
30718 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30719 | JSJitInfo::Method, | |||
30720 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
30721 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
30722 | false, /* isInfallible. False in setters. */ | |||
30723 | false, /* isMovable. Not relevant for setters. */ | |||
30724 | false, /* isEliminatable. Not relevant for setters. */ | |||
30725 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30726 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30727 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30728 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30729 | }; | |||
30730 | ||||
30731 | MOZ_CAN_RUN_SCRIPT static bool | |||
30732 | get_readonlyDictionary(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
30733 | { | |||
30734 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30737( cx, "TestExampleInterface" , "readonlyDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30735 | "TestExampleInterface", "readonlyDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30737( cx, "TestExampleInterface" , "readonlyDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30736 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject30737( cx, "TestExampleInterface" , "readonlyDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30737 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30737( cx, "TestExampleInterface" , "readonlyDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30738 | ||||
30739 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30740 | // Have to either root across the getter call or reget after. | |||
30741 | bool isXray; | |||
30742 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
30743 | if (!slotStorage) { | |||
30744 | return false; | |||
30745 | } | |||
30746 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 14) : (DOM_INSTANCE_RESERVED_SLOTS1 + 14); | |||
30747 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 30747); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 30747; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
30748 | { | |||
30749 | // Scope for cachedVal | |||
30750 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
30751 | if (!cachedVal.isUndefined()) { | |||
30752 | args.rval().set(cachedVal); | |||
30753 | // The cached value is in the compartment of slotStorage, | |||
30754 | // so wrap into the caller compartment as needed. | |||
30755 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
30756 | } | |||
30757 | } | |||
30758 | ||||
30759 | RootedDictionary<Dict> result(cx); | |||
30760 | // NOTE: This assert does NOT call the function. | |||
30761 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlyDictionary(cx, result))>, "Should be returning void here"); | |||
30762 | MOZ_KnownLive(self)(self)->GetReadonlyDictionary(cx, result); | |||
30763 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30763); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30763; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30764 | { | |||
30765 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
30766 | JSAutoRealm ar(cx, conversionScope); | |||
30767 | do { // block we break out of when done wrapping | |||
30768 | if (!result.ToObjectInternal(cx, args.rval())) { | |||
30769 | return false; | |||
30770 | } | |||
30771 | break; | |||
30772 | } while (false); | |||
30773 | } | |||
30774 | { // And now store things in the realm of our slotStorage. | |||
30775 | JSAutoRealm ar(cx, slotStorage); | |||
30776 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
30777 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
30778 | if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) { | |||
30779 | return false; | |||
30780 | } | |||
30781 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
30782 | if (!isXray) { | |||
30783 | // In the Xray case we don't need to do this, because getting the | |||
30784 | // expando object already preserved our wrapper. | |||
30785 | PreserveWrapper(self); | |||
30786 | } | |||
30787 | } | |||
30788 | // And now make sure args.rval() is in the caller realm. | |||
30789 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
30790 | } | |||
30791 | ||||
30792 | static const JSJitInfo readonlyDictionary_getterinfo = { | |||
30793 | { get_readonlyDictionary }, | |||
30794 | { prototypes::id::TestExampleInterface }, | |||
30795 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30796 | JSJitInfo::Getter, | |||
30797 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
30798 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
30799 | false, /* isInfallible. False in setters. */ | |||
30800 | true, /* isMovable. Not relevant for setters. */ | |||
30801 | true, /* isEliminatable. Not relevant for setters. */ | |||
30802 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30803 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30804 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30805 | (DOM_INSTANCE_RESERVED_SLOTS1 + 14) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30806 | }; | |||
30807 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 14) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
30808 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 14) < 22, "There is no slot for us"); | |||
30809 | ||||
30810 | MOZ_CAN_RUN_SCRIPT static bool | |||
30811 | get_readonlyNullableDictionary(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
30812 | { | |||
30813 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30816( cx, "TestExampleInterface" , "readonlyNullableDictionary", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
30814 | "TestExampleInterface", "readonlyNullableDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30816( cx, "TestExampleInterface" , "readonlyNullableDictionary", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
30815 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject30816( cx, "TestExampleInterface" , "readonlyNullableDictionary", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
30816 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30816( cx, "TestExampleInterface" , "readonlyNullableDictionary", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
30817 | ||||
30818 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30819 | // Have to either root across the getter call or reget after. | |||
30820 | bool isXray; | |||
30821 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
30822 | if (!slotStorage) { | |||
30823 | return false; | |||
30824 | } | |||
30825 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 15) : (DOM_INSTANCE_RESERVED_SLOTS1 + 15); | |||
30826 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 30826); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 30826; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
30827 | { | |||
30828 | // Scope for cachedVal | |||
30829 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
30830 | if (!cachedVal.isUndefined()) { | |||
30831 | args.rval().set(cachedVal); | |||
30832 | // The cached value is in the compartment of slotStorage, | |||
30833 | // so wrap into the caller compartment as needed. | |||
30834 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
30835 | } | |||
30836 | } | |||
30837 | ||||
30838 | NullableRootedDictionary<Dict> result(cx); | |||
30839 | // NOTE: This assert does NOT call the function. | |||
30840 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlyNullableDictionary(cx, result))>, "Should be returning void here"); | |||
30841 | MOZ_KnownLive(self)(self)->GetReadonlyNullableDictionary(cx, result); | |||
30842 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30842); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30842; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30843 | { | |||
30844 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
30845 | JSAutoRealm ar(cx, conversionScope); | |||
30846 | do { // block we break out of when done wrapping | |||
30847 | if (result.IsNull()) { | |||
30848 | args.rval().setNull(); | |||
30849 | break; | |||
30850 | } | |||
30851 | if (!result.Value().ToObjectInternal(cx, args.rval())) { | |||
30852 | return false; | |||
30853 | } | |||
30854 | break; | |||
30855 | } while (false); | |||
30856 | } | |||
30857 | { // And now store things in the realm of our slotStorage. | |||
30858 | JSAutoRealm ar(cx, slotStorage); | |||
30859 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
30860 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
30861 | if (!MaybeWrapNonDOMObjectOrNullValue(cx, &storedVal)) { | |||
30862 | return false; | |||
30863 | } | |||
30864 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
30865 | if (!isXray) { | |||
30866 | // In the Xray case we don't need to do this, because getting the | |||
30867 | // expando object already preserved our wrapper. | |||
30868 | PreserveWrapper(self); | |||
30869 | } | |||
30870 | } | |||
30871 | // And now make sure args.rval() is in the caller realm. | |||
30872 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
30873 | } | |||
30874 | ||||
30875 | static const JSJitInfo readonlyNullableDictionary_getterinfo = { | |||
30876 | { get_readonlyNullableDictionary }, | |||
30877 | { prototypes::id::TestExampleInterface }, | |||
30878 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30879 | JSJitInfo::Getter, | |||
30880 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
30881 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
30882 | false, /* isInfallible. False in setters. */ | |||
30883 | true, /* isMovable. Not relevant for setters. */ | |||
30884 | true, /* isEliminatable. Not relevant for setters. */ | |||
30885 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30886 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30887 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30888 | (DOM_INSTANCE_RESERVED_SLOTS1 + 15) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30889 | }; | |||
30890 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 15) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
30891 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 15) < 22, "There is no slot for us"); | |||
30892 | ||||
30893 | MOZ_CAN_RUN_SCRIPT static bool | |||
30894 | get_writableDictionary(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
30895 | { | |||
30896 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30899( cx, "TestExampleInterface" , "writableDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30897 | "TestExampleInterface", "writableDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30899( cx, "TestExampleInterface" , "writableDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30898 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject30899( cx, "TestExampleInterface" , "writableDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30899 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30899( cx, "TestExampleInterface" , "writableDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30900 | ||||
30901 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30902 | // Have to either root across the getter call or reget after. | |||
30903 | bool isXray; | |||
30904 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
30905 | if (!slotStorage) { | |||
30906 | return false; | |||
30907 | } | |||
30908 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 16) : (DOM_INSTANCE_RESERVED_SLOTS1 + 16); | |||
30909 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 30909); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 30909; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
30910 | { | |||
30911 | // Scope for cachedVal | |||
30912 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
30913 | if (!cachedVal.isUndefined()) { | |||
30914 | args.rval().set(cachedVal); | |||
30915 | // The cached value is in the compartment of slotStorage, | |||
30916 | // so wrap into the caller compartment as needed. | |||
30917 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
30918 | } | |||
30919 | } | |||
30920 | ||||
30921 | RootedDictionary<Dict> result(cx); | |||
30922 | // NOTE: This assert does NOT call the function. | |||
30923 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableDictionary(cx, result))>, "Should be returning void here"); | |||
30924 | MOZ_KnownLive(self)(self)->GetWritableDictionary(cx, result); | |||
30925 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30925); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30925; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30926 | { | |||
30927 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
30928 | JSAutoRealm ar(cx, conversionScope); | |||
30929 | do { // block we break out of when done wrapping | |||
30930 | if (!result.ToObjectInternal(cx, args.rval())) { | |||
30931 | return false; | |||
30932 | } | |||
30933 | break; | |||
30934 | } while (false); | |||
30935 | } | |||
30936 | { // And now store things in the realm of our slotStorage. | |||
30937 | JSAutoRealm ar(cx, slotStorage); | |||
30938 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
30939 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
30940 | if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) { | |||
30941 | return false; | |||
30942 | } | |||
30943 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
30944 | if (!isXray) { | |||
30945 | // In the Xray case we don't need to do this, because getting the | |||
30946 | // expando object already preserved our wrapper. | |||
30947 | PreserveWrapper(self); | |||
30948 | } | |||
30949 | } | |||
30950 | // And now make sure args.rval() is in the caller realm. | |||
30951 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
30952 | } | |||
30953 | ||||
30954 | MOZ_CAN_RUN_SCRIPT static bool | |||
30955 | set_writableDictionary(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
30956 | { | |||
30957 | BindingCallContext cx(cx_, "TestExampleInterface.writableDictionary setter"); | |||
30958 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject30961( cx, "TestExampleInterface" , "writableDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30959 | "TestExampleInterface", "writableDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject30961( cx, "TestExampleInterface" , "writableDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30960 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject30961( cx, "TestExampleInterface" , "writableDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
30961 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject30961( cx, "TestExampleInterface" , "writableDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
30962 | ||||
30963 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
30964 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
30965 | if (!arg0.Init(cx, args[0], "Value being assigned", false)) { | |||
30966 | return false; | |||
30967 | } | |||
30968 | // NOTE: This assert does NOT call the function. | |||
30969 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableDictionary(cx, Constify(arg0)))>, "Should be returning void here"); | |||
30970 | MOZ_KnownLive(self)(self)->SetWritableDictionary(cx, Constify(arg0)); | |||
30971 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 30971); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 30971; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
30972 | ||||
30973 | ClearCachedWritableDictionaryValue(self); | |||
30974 | return true; | |||
30975 | } | |||
30976 | ||||
30977 | static const JSJitInfo writableDictionary_getterinfo = { | |||
30978 | { get_writableDictionary }, | |||
30979 | { prototypes::id::TestExampleInterface }, | |||
30980 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30981 | JSJitInfo::Getter, | |||
30982 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
30983 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
30984 | false, /* isInfallible. False in setters. */ | |||
30985 | true, /* isMovable. Not relevant for setters. */ | |||
30986 | true, /* isEliminatable. Not relevant for setters. */ | |||
30987 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
30988 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
30989 | false, /* isTypedMethod. Only relevant for methods. */ | |||
30990 | (DOM_INSTANCE_RESERVED_SLOTS1 + 16) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
30991 | }; | |||
30992 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 16) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
30993 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 16) < 22, "There is no slot for us"); | |||
30994 | static const JSJitInfo writableDictionary_setterinfo = { | |||
30995 | { (JSJitGetterOp)set_writableDictionary }, | |||
30996 | { prototypes::id::TestExampleInterface }, | |||
30997 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
30998 | JSJitInfo::Setter, | |||
30999 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31000 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31001 | false, /* isInfallible. False in setters. */ | |||
31002 | false, /* isMovable. Not relevant for setters. */ | |||
31003 | false, /* isEliminatable. Not relevant for setters. */ | |||
31004 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31005 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31006 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31007 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31008 | }; | |||
31009 | ||||
31010 | MOZ_CAN_RUN_SCRIPT static bool | |||
31011 | get_readonlyFrozenDictionary(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
31012 | { | |||
31013 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31016( cx, "TestExampleInterface" , "readonlyFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31014 | "TestExampleInterface", "readonlyFrozenDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31016( cx, "TestExampleInterface" , "readonlyFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31015 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject31016( cx, "TestExampleInterface" , "readonlyFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31016 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31016( cx, "TestExampleInterface" , "readonlyFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31017 | ||||
31018 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31019 | // Have to either root across the getter call or reget after. | |||
31020 | bool isXray; | |||
31021 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
31022 | if (!slotStorage) { | |||
31023 | return false; | |||
31024 | } | |||
31025 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 17) : (DOM_INSTANCE_RESERVED_SLOTS1 + 17); | |||
31026 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 31026); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 31026; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
31027 | { | |||
31028 | // Scope for cachedVal | |||
31029 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
31030 | if (!cachedVal.isUndefined()) { | |||
31031 | args.rval().set(cachedVal); | |||
31032 | // The cached value is in the compartment of slotStorage, | |||
31033 | // so wrap into the caller compartment as needed. | |||
31034 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
31035 | } | |||
31036 | } | |||
31037 | ||||
31038 | RootedDictionary<Dict> result(cx); | |||
31039 | // NOTE: This assert does NOT call the function. | |||
31040 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlyFrozenDictionary(cx, result))>, "Should be returning void here"); | |||
31041 | MOZ_KnownLive(self)(self)->GetReadonlyFrozenDictionary(cx, result); | |||
31042 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31042); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31042; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31043 | { | |||
31044 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
31045 | JSAutoRealm ar(cx, conversionScope); | |||
31046 | do { // block we break out of when done wrapping | |||
31047 | if (!result.ToObjectInternal(cx, args.rval())) { | |||
31048 | return false; | |||
31049 | } | |||
31050 | break; | |||
31051 | } while (false); | |||
31052 | JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject()); | |||
31053 | if (!JS_FreezeObject(cx, rvalObj)) { | |||
31054 | return false; | |||
31055 | } | |||
31056 | } | |||
31057 | { // And now store things in the realm of our slotStorage. | |||
31058 | JSAutoRealm ar(cx, slotStorage); | |||
31059 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
31060 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
31061 | if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) { | |||
31062 | return false; | |||
31063 | } | |||
31064 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
31065 | if (!isXray) { | |||
31066 | // In the Xray case we don't need to do this, because getting the | |||
31067 | // expando object already preserved our wrapper. | |||
31068 | PreserveWrapper(self); | |||
31069 | } | |||
31070 | } | |||
31071 | // And now make sure args.rval() is in the caller realm. | |||
31072 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
31073 | } | |||
31074 | ||||
31075 | static const JSJitInfo readonlyFrozenDictionary_getterinfo = { | |||
31076 | { get_readonlyFrozenDictionary }, | |||
31077 | { prototypes::id::TestExampleInterface }, | |||
31078 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31079 | JSJitInfo::Getter, | |||
31080 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
31081 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
31082 | false, /* isInfallible. False in setters. */ | |||
31083 | true, /* isMovable. Not relevant for setters. */ | |||
31084 | true, /* isEliminatable. Not relevant for setters. */ | |||
31085 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31086 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31087 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31088 | (DOM_INSTANCE_RESERVED_SLOTS1 + 17) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31089 | }; | |||
31090 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 17) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
31091 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 17) < 22, "There is no slot for us"); | |||
31092 | ||||
31093 | MOZ_CAN_RUN_SCRIPT static bool | |||
31094 | get_readonlyFrozenNullableDictionary(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
31095 | { | |||
31096 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31099( cx, "TestExampleInterface" , "readonlyFrozenNullableDictionary", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31097 | "TestExampleInterface", "readonlyFrozenNullableDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31099( cx, "TestExampleInterface" , "readonlyFrozenNullableDictionary", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31098 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject31099( cx, "TestExampleInterface" , "readonlyFrozenNullableDictionary", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31099 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31099( cx, "TestExampleInterface" , "readonlyFrozenNullableDictionary", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31100 | ||||
31101 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31102 | // Have to either root across the getter call or reget after. | |||
31103 | bool isXray; | |||
31104 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
31105 | if (!slotStorage) { | |||
31106 | return false; | |||
31107 | } | |||
31108 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 18) : (DOM_INSTANCE_RESERVED_SLOTS1 + 18); | |||
31109 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 31109); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 31109; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
31110 | { | |||
31111 | // Scope for cachedVal | |||
31112 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
31113 | if (!cachedVal.isUndefined()) { | |||
31114 | args.rval().set(cachedVal); | |||
31115 | // The cached value is in the compartment of slotStorage, | |||
31116 | // so wrap into the caller compartment as needed. | |||
31117 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
31118 | } | |||
31119 | } | |||
31120 | ||||
31121 | NullableRootedDictionary<Dict> result(cx); | |||
31122 | // NOTE: This assert does NOT call the function. | |||
31123 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReadonlyFrozenNullableDictionary(cx, result))>, "Should be returning void here"); | |||
31124 | MOZ_KnownLive(self)(self)->GetReadonlyFrozenNullableDictionary(cx, result); | |||
31125 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31125); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31125; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31126 | { | |||
31127 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
31128 | JSAutoRealm ar(cx, conversionScope); | |||
31129 | do { // block we break out of when done wrapping | |||
31130 | if (result.IsNull()) { | |||
31131 | args.rval().setNull(); | |||
31132 | break; | |||
31133 | } | |||
31134 | if (!result.Value().ToObjectInternal(cx, args.rval())) { | |||
31135 | return false; | |||
31136 | } | |||
31137 | break; | |||
31138 | } while (false); | |||
31139 | if (args.rval().isObject()) { | |||
31140 | JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject()); | |||
31141 | if (!JS_FreezeObject(cx, rvalObj)) { | |||
31142 | return false; | |||
31143 | } | |||
31144 | } | |||
31145 | } | |||
31146 | { // And now store things in the realm of our slotStorage. | |||
31147 | JSAutoRealm ar(cx, slotStorage); | |||
31148 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
31149 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
31150 | if (!MaybeWrapNonDOMObjectOrNullValue(cx, &storedVal)) { | |||
31151 | return false; | |||
31152 | } | |||
31153 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
31154 | if (!isXray) { | |||
31155 | // In the Xray case we don't need to do this, because getting the | |||
31156 | // expando object already preserved our wrapper. | |||
31157 | PreserveWrapper(self); | |||
31158 | } | |||
31159 | } | |||
31160 | // And now make sure args.rval() is in the caller realm. | |||
31161 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
31162 | } | |||
31163 | ||||
31164 | static const JSJitInfo readonlyFrozenNullableDictionary_getterinfo = { | |||
31165 | { get_readonlyFrozenNullableDictionary }, | |||
31166 | { prototypes::id::TestExampleInterface }, | |||
31167 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31168 | JSJitInfo::Getter, | |||
31169 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
31170 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
31171 | false, /* isInfallible. False in setters. */ | |||
31172 | true, /* isMovable. Not relevant for setters. */ | |||
31173 | true, /* isEliminatable. Not relevant for setters. */ | |||
31174 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31175 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31176 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31177 | (DOM_INSTANCE_RESERVED_SLOTS1 + 18) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31178 | }; | |||
31179 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 18) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
31180 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 18) < 22, "There is no slot for us"); | |||
31181 | ||||
31182 | MOZ_CAN_RUN_SCRIPT static bool | |||
31183 | get_writableFrozenDictionary(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
31184 | { | |||
31185 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31188( cx, "TestExampleInterface" , "writableFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31186 | "TestExampleInterface", "writableFrozenDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31188( cx, "TestExampleInterface" , "writableFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31187 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject31188( cx, "TestExampleInterface" , "writableFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31188 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31188( cx, "TestExampleInterface" , "writableFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31189 | ||||
31190 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31191 | // Have to either root across the getter call or reget after. | |||
31192 | bool isXray; | |||
31193 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
31194 | if (!slotStorage) { | |||
31195 | return false; | |||
31196 | } | |||
31197 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 19) : (DOM_INSTANCE_RESERVED_SLOTS1 + 19); | |||
31198 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 31198); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 31198; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
31199 | { | |||
31200 | // Scope for cachedVal | |||
31201 | JS::Value cachedVal = JS::GetReservedSlot(slotStorage, slotIndex); | |||
31202 | if (!cachedVal.isUndefined()) { | |||
31203 | args.rval().set(cachedVal); | |||
31204 | // The cached value is in the compartment of slotStorage, | |||
31205 | // so wrap into the caller compartment as needed. | |||
31206 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
31207 | } | |||
31208 | } | |||
31209 | ||||
31210 | RootedDictionary<Dict> result(cx); | |||
31211 | // NOTE: This assert does NOT call the function. | |||
31212 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetWritableFrozenDictionary(cx, result))>, "Should be returning void here"); | |||
31213 | MOZ_KnownLive(self)(self)->GetWritableFrozenDictionary(cx, result); | |||
31214 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31214); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31214; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31215 | { | |||
31216 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
31217 | JSAutoRealm ar(cx, conversionScope); | |||
31218 | do { // block we break out of when done wrapping | |||
31219 | if (!result.ToObjectInternal(cx, args.rval())) { | |||
31220 | return false; | |||
31221 | } | |||
31222 | break; | |||
31223 | } while (false); | |||
31224 | JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject()); | |||
31225 | if (!JS_FreezeObject(cx, rvalObj)) { | |||
31226 | return false; | |||
31227 | } | |||
31228 | } | |||
31229 | { // And now store things in the realm of our slotStorage. | |||
31230 | JSAutoRealm ar(cx, slotStorage); | |||
31231 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
31232 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
31233 | if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) { | |||
31234 | return false; | |||
31235 | } | |||
31236 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
31237 | if (!isXray) { | |||
31238 | // In the Xray case we don't need to do this, because getting the | |||
31239 | // expando object already preserved our wrapper. | |||
31240 | PreserveWrapper(self); | |||
31241 | } | |||
31242 | } | |||
31243 | // And now make sure args.rval() is in the caller realm. | |||
31244 | return MaybeWrapNonDOMObjectValue(cx, args.rval()); | |||
31245 | } | |||
31246 | ||||
31247 | MOZ_CAN_RUN_SCRIPT static bool | |||
31248 | set_writableFrozenDictionary(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
31249 | { | |||
31250 | BindingCallContext cx(cx_, "TestExampleInterface.writableFrozenDictionary setter"); | |||
31251 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31254( cx, "TestExampleInterface" , "writableFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31252 | "TestExampleInterface", "writableFrozenDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31254( cx, "TestExampleInterface" , "writableFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31253 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject31254( cx, "TestExampleInterface" , "writableFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31254 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31254( cx, "TestExampleInterface" , "writableFrozenDictionary", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31255 | ||||
31256 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31257 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
31258 | if (!arg0.Init(cx, args[0], "Value being assigned", false)) { | |||
31259 | return false; | |||
31260 | } | |||
31261 | // NOTE: This assert does NOT call the function. | |||
31262 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetWritableFrozenDictionary(cx, Constify(arg0)))>, "Should be returning void here"); | |||
31263 | MOZ_KnownLive(self)(self)->SetWritableFrozenDictionary(cx, Constify(arg0)); | |||
31264 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31264); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31264; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31265 | ||||
31266 | ClearCachedWritableFrozenDictionaryValue(self); | |||
31267 | return true; | |||
31268 | } | |||
31269 | ||||
31270 | static const JSJitInfo writableFrozenDictionary_getterinfo = { | |||
31271 | { get_writableFrozenDictionary }, | |||
31272 | { prototypes::id::TestExampleInterface }, | |||
31273 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31274 | JSJitInfo::Getter, | |||
31275 | JSJitInfo::AliasDOMSets, /* aliasSet. Not relevant for setters. */ | |||
31276 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
31277 | false, /* isInfallible. False in setters. */ | |||
31278 | true, /* isMovable. Not relevant for setters. */ | |||
31279 | true, /* isEliminatable. Not relevant for setters. */ | |||
31280 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31281 | true, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31282 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31283 | (DOM_INSTANCE_RESERVED_SLOTS1 + 19) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31284 | }; | |||
31285 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 19) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
31286 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 19) < 22, "There is no slot for us"); | |||
31287 | static const JSJitInfo writableFrozenDictionary_setterinfo = { | |||
31288 | { (JSJitGetterOp)set_writableFrozenDictionary }, | |||
31289 | { prototypes::id::TestExampleInterface }, | |||
31290 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31291 | JSJitInfo::Setter, | |||
31292 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31293 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31294 | false, /* isInfallible. False in setters. */ | |||
31295 | false, /* isMovable. Not relevant for setters. */ | |||
31296 | false, /* isEliminatable. Not relevant for setters. */ | |||
31297 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31298 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31299 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31300 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31301 | }; | |||
31302 | ||||
31303 | MOZ_CAN_RUN_SCRIPT static bool | |||
31304 | receiveDictionary(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31305 | { | |||
31306 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31309( cx, "TestExampleInterface" , "receiveDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31307 | "TestExampleInterface", "receiveDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31309( cx, "TestExampleInterface" , "receiveDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31308 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31309( cx, "TestExampleInterface" , "receiveDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31309 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31309( cx, "TestExampleInterface" , "receiveDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
31310 | ||||
31311 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31312 | RootedDictionary<Dict> result(cx); | |||
31313 | // NOTE: This assert does NOT call the function. | |||
31314 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveDictionary(cx, result))>, "Should be returning void here"); | |||
31315 | MOZ_KnownLive(self)(self)->ReceiveDictionary(cx, result); | |||
31316 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31316); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31316; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31317 | if (!result.ToObjectInternal(cx, args.rval())) { | |||
31318 | return false; | |||
31319 | } | |||
31320 | return true; | |||
31321 | } | |||
31322 | ||||
31323 | static const JSJitInfo receiveDictionary_methodinfo = { | |||
31324 | { (JSJitGetterOp)receiveDictionary }, | |||
31325 | { prototypes::id::TestExampleInterface }, | |||
31326 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31327 | JSJitInfo::Method, | |||
31328 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31329 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
31330 | false, /* isInfallible. False in setters. */ | |||
31331 | false, /* isMovable. Not relevant for setters. */ | |||
31332 | false, /* isEliminatable. Not relevant for setters. */ | |||
31333 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31334 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31335 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31336 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31337 | }; | |||
31338 | ||||
31339 | MOZ_CAN_RUN_SCRIPT static bool | |||
31340 | receiveNullableDictionary(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31341 | { | |||
31342 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31345( cx, "TestExampleInterface" , "receiveNullableDictionary", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31343 | "TestExampleInterface", "receiveNullableDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31345( cx, "TestExampleInterface" , "receiveNullableDictionary", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31344 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31345( cx, "TestExampleInterface" , "receiveNullableDictionary", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31345 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31345( cx, "TestExampleInterface" , "receiveNullableDictionary", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31346 | ||||
31347 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31348 | NullableRootedDictionary<Dict> result(cx); | |||
31349 | // NOTE: This assert does NOT call the function. | |||
31350 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveNullableDictionary(cx, result))>, "Should be returning void here"); | |||
31351 | MOZ_KnownLive(self)(self)->ReceiveNullableDictionary(cx, result); | |||
31352 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31352); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31352; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31353 | if (result.IsNull()) { | |||
31354 | args.rval().setNull(); | |||
31355 | return true; | |||
31356 | } | |||
31357 | if (!result.Value().ToObjectInternal(cx, args.rval())) { | |||
31358 | return false; | |||
31359 | } | |||
31360 | return true; | |||
31361 | } | |||
31362 | ||||
31363 | static const JSJitInfo receiveNullableDictionary_methodinfo = { | |||
31364 | { (JSJitGetterOp)receiveNullableDictionary }, | |||
31365 | { prototypes::id::TestExampleInterface }, | |||
31366 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31367 | JSJitInfo::Method, | |||
31368 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31369 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
31370 | false, /* isInfallible. False in setters. */ | |||
31371 | false, /* isMovable. Not relevant for setters. */ | |||
31372 | false, /* isEliminatable. Not relevant for setters. */ | |||
31373 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31374 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31375 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31376 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31377 | }; | |||
31378 | ||||
31379 | MOZ_CAN_RUN_SCRIPT static bool | |||
31380 | passOtherDictionary(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31381 | { | |||
31382 | BindingCallContext cx(cx_, "TestExampleInterface.passOtherDictionary"); | |||
31383 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31386( cx, "TestExampleInterface" , "passOtherDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31384 | "TestExampleInterface", "passOtherDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31386( cx, "TestExampleInterface" , "passOtherDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31385 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31386( cx, "TestExampleInterface" , "passOtherDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31386 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31386( cx, "TestExampleInterface" , "passOtherDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
31387 | ||||
31388 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31389 | binding_detail::FastGrandparentDict arg0; | |||
31390 | if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1", false)) { | |||
31391 | return false; | |||
31392 | } | |||
31393 | // NOTE: This assert does NOT call the function. | |||
31394 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassOtherDictionary(Constify(arg0)))>, "Should be returning void here"); | |||
31395 | MOZ_KnownLive(self)(self)->PassOtherDictionary(Constify(arg0)); | |||
31396 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31396); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31396; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31397 | args.rval().setUndefined(); | |||
31398 | return true; | |||
31399 | } | |||
31400 | ||||
31401 | static const JSJitInfo passOtherDictionary_methodinfo = { | |||
31402 | { (JSJitGetterOp)passOtherDictionary }, | |||
31403 | { prototypes::id::TestExampleInterface }, | |||
31404 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31405 | JSJitInfo::Method, | |||
31406 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31407 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31408 | false, /* isInfallible. False in setters. */ | |||
31409 | false, /* isMovable. Not relevant for setters. */ | |||
31410 | false, /* isEliminatable. Not relevant for setters. */ | |||
31411 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31412 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31413 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31414 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31415 | }; | |||
31416 | ||||
31417 | MOZ_CAN_RUN_SCRIPT static bool | |||
31418 | passSequenceOfDictionaries(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31419 | { | |||
31420 | BindingCallContext cx(cx_, "TestExampleInterface.passSequenceOfDictionaries"); | |||
31421 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31424( cx, "TestExampleInterface" , "passSequenceOfDictionaries", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31422 | "TestExampleInterface", "passSequenceOfDictionaries", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31424( cx, "TestExampleInterface" , "passSequenceOfDictionaries", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31423 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31424( cx, "TestExampleInterface" , "passSequenceOfDictionaries", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31424 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31424( cx, "TestExampleInterface" , "passSequenceOfDictionaries", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31425 | ||||
31426 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31427 | if (!args.requireAtLeast(cx, "TestExampleInterface.passSequenceOfDictionaries", 1)) { | |||
31428 | return false; | |||
31429 | } | |||
31430 | binding_detail::AutoSequence<Dict> arg0; | |||
31431 | SequenceRooter<Dict> arg0_holder(cx, &arg0); | |||
31432 | if (args[0].isObject()) { | |||
31433 | JS::ForOfIterator iter(cx); | |||
31434 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
31435 | return false; | |||
31436 | } | |||
31437 | if (!iter.valueIsIterable()) { | |||
31438 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
31439 | return false; | |||
31440 | } | |||
31441 | binding_detail::AutoSequence<Dict> &arr = arg0; | |||
31442 | JS::Rooted<JS::Value> temp(cx); | |||
31443 | while (true) { | |||
31444 | bool done; | |||
31445 | if (!iter.next(&temp, &done)) { | |||
31446 | return false; | |||
31447 | } | |||
31448 | if (done) { | |||
31449 | break; | |||
31450 | } | |||
31451 | Dict* slotPtr = arr.AppendElement(mozilla::fallible); | |||
31452 | if (!slotPtr) { | |||
31453 | JS_ReportOutOfMemory(cx); | |||
31454 | return false; | |||
31455 | } | |||
31456 | Dict& slot = *slotPtr; | |||
31457 | if (!slot.Init(cx, temp, "Element of argument 1", false)) { | |||
31458 | return false; | |||
31459 | } | |||
31460 | } | |||
31461 | } else { | |||
31462 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Argument 1", "sequence"); | |||
31463 | return false; | |||
31464 | } | |||
31465 | // NOTE: This assert does NOT call the function. | |||
31466 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassSequenceOfDictionaries(cx, Constify(arg0)))>, "Should be returning void here"); | |||
31467 | MOZ_KnownLive(self)(self)->PassSequenceOfDictionaries(cx, Constify(arg0)); | |||
31468 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31468); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31468; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31469 | args.rval().setUndefined(); | |||
31470 | return true; | |||
31471 | } | |||
31472 | ||||
31473 | static const JSJitInfo passSequenceOfDictionaries_methodinfo = { | |||
31474 | { (JSJitGetterOp)passSequenceOfDictionaries }, | |||
31475 | { prototypes::id::TestExampleInterface }, | |||
31476 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31477 | JSJitInfo::Method, | |||
31478 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31479 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31480 | false, /* isInfallible. False in setters. */ | |||
31481 | false, /* isMovable. Not relevant for setters. */ | |||
31482 | false, /* isEliminatable. Not relevant for setters. */ | |||
31483 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31484 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31485 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31486 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31487 | }; | |||
31488 | ||||
31489 | MOZ_CAN_RUN_SCRIPT static bool | |||
31490 | passRecordOfDictionaries(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31491 | { | |||
31492 | BindingCallContext cx(cx_, "TestExampleInterface.passRecordOfDictionaries"); | |||
31493 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31496( cx, "TestExampleInterface" , "passRecordOfDictionaries", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31494 | "TestExampleInterface", "passRecordOfDictionaries", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31496( cx, "TestExampleInterface" , "passRecordOfDictionaries", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31495 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31496( cx, "TestExampleInterface" , "passRecordOfDictionaries", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31496 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31496( cx, "TestExampleInterface" , "passRecordOfDictionaries", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31497 | ||||
31498 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31499 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRecordOfDictionaries", 1)) { | |||
31500 | return false; | |||
31501 | } | |||
31502 | Record<nsString, GrandparentDict> arg0; | |||
31503 | if (args[0].isObject()) { | |||
31504 | auto& recordEntries = arg0.Entries(); | |||
31505 | ||||
31506 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
31507 | JS::RootedVector<jsid> ids(cx); | |||
31508 | if (!js::GetPropertyKeys(cx, recordObj, | |||
31509 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
31510 | return false; | |||
31511 | } | |||
31512 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
31513 | JS_ReportOutOfMemory(cx); | |||
31514 | return false; | |||
31515 | } | |||
31516 | JS::Rooted<JS::Value> propNameValue(cx); | |||
31517 | JS::Rooted<JS::Value> temp(cx); | |||
31518 | JS::Rooted<jsid> curId(cx); | |||
31519 | JS::Rooted<JS::Value> idVal(cx); | |||
31520 | // Use a hashset to keep track of ids seen, to avoid | |||
31521 | // introducing nasty O(N^2) behavior scanning for them all the | |||
31522 | // time. Ideally we'd use a data structure with O(1) lookup | |||
31523 | // _and_ ordering for the MozMap, but we don't have one lying | |||
31524 | // around. | |||
31525 | nsTHashtable<nsStringHashKey> idsSeen; | |||
31526 | for (size_t i = 0; i < ids.length(); ++i) { | |||
31527 | curId = ids[i]; | |||
31528 | ||||
31529 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
31530 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
31531 | &desc)) { | |||
31532 | return false; | |||
31533 | } | |||
31534 | ||||
31535 | if (desc.isNothing() || !desc->enumerable()) { | |||
31536 | continue; | |||
31537 | } | |||
31538 | ||||
31539 | idVal = js::IdToValue(curId); | |||
31540 | nsString propName; | |||
31541 | // This will just throw if idVal is a Symbol, like the spec says | |||
31542 | // to do. | |||
31543 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
31544 | return false; | |||
31545 | } | |||
31546 | ||||
31547 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
31548 | return false; | |||
31549 | } | |||
31550 | ||||
31551 | Record<nsString, GrandparentDict>::EntryType* entry; | |||
31552 | if (!idsSeen.EnsureInserted(propName)) { | |||
31553 | // Find the existing entry. | |||
31554 | auto idx = recordEntries.IndexOf(propName); | |||
31555 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 31556); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 31556; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
31556 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 31556); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 31556; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
31557 | // Now blow it away to make it look like it was just added | |||
31558 | // to the array, because it's not obvious that it's | |||
31559 | // safe to write to its already-initialized mValue via our | |||
31560 | // normal codegen conversions. For example, the value | |||
31561 | // could be a union and this would change its type, but | |||
31562 | // codegen assumes we won't do that. | |||
31563 | entry = recordEntries.ReconstructElementAt(idx); | |||
31564 | } else { | |||
31565 | // Safe to do an infallible append here, because we did a | |||
31566 | // SetCapacity above to the right capacity. | |||
31567 | entry = recordEntries.AppendElement(); | |||
31568 | } | |||
31569 | entry->mKey = propName; | |||
31570 | GrandparentDict& slot = entry->mValue; | |||
31571 | if (!slot.Init(cx, temp, "Value in argument 1", false)) { | |||
31572 | return false; | |||
31573 | } | |||
31574 | } | |||
31575 | } else { | |||
31576 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
31577 | return false; | |||
31578 | } | |||
31579 | // NOTE: This assert does NOT call the function. | |||
31580 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRecordOfDictionaries(Constify(arg0)))>, "Should be returning void here"); | |||
31581 | MOZ_KnownLive(self)(self)->PassRecordOfDictionaries(Constify(arg0)); | |||
31582 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31582); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31582; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31583 | args.rval().setUndefined(); | |||
31584 | return true; | |||
31585 | } | |||
31586 | ||||
31587 | static const JSJitInfo passRecordOfDictionaries_methodinfo = { | |||
31588 | { (JSJitGetterOp)passRecordOfDictionaries }, | |||
31589 | { prototypes::id::TestExampleInterface }, | |||
31590 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31591 | JSJitInfo::Method, | |||
31592 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31593 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31594 | false, /* isInfallible. False in setters. */ | |||
31595 | false, /* isMovable. Not relevant for setters. */ | |||
31596 | false, /* isEliminatable. Not relevant for setters. */ | |||
31597 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31598 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31599 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31600 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31601 | }; | |||
31602 | ||||
31603 | MOZ_CAN_RUN_SCRIPT static bool | |||
31604 | passDictionaryOrLong(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31605 | { | |||
31606 | BindingCallContext cx(cx_, "TestExampleInterface.passDictionaryOrLong"); | |||
31607 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31610( cx, "TestExampleInterface" , "passDictionaryOrLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31608 | "TestExampleInterface", "passDictionaryOrLong", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31610( cx, "TestExampleInterface" , "passDictionaryOrLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31609 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31610( cx, "TestExampleInterface" , "passDictionaryOrLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31610 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31610( cx, "TestExampleInterface" , "passDictionaryOrLong", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
31611 | ||||
31612 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31613 | unsigned argcount = std::min(args.length(), 1u); | |||
31614 | switch (argcount) { | |||
31615 | case 0: { | |||
31616 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
31617 | if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1", false)) { | |||
31618 | return false; | |||
31619 | } | |||
31620 | // NOTE: This assert does NOT call the function. | |||
31621 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassDictionaryOrLong(cx, Constify(arg0)))>, "Should be returning void here"); | |||
31622 | MOZ_KnownLive(self)(self)->PassDictionaryOrLong(cx, Constify(arg0)); | |||
31623 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31623); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31623; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31624 | args.rval().setUndefined(); | |||
31625 | return true; | |||
31626 | break; | |||
31627 | } | |||
31628 | case 1: { | |||
31629 | if (args[0].isNullOrUndefined()) { | |||
31630 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
31631 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
31632 | return false; | |||
31633 | } | |||
31634 | // NOTE: This assert does NOT call the function. | |||
31635 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassDictionaryOrLong(cx, Constify(arg0)))>, "Should be returning void here"); | |||
31636 | MOZ_KnownLive(self)(self)->PassDictionaryOrLong(cx, Constify(arg0)); | |||
31637 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31637); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31637; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31638 | args.rval().setUndefined(); | |||
31639 | return true; | |||
31640 | } | |||
31641 | if (args[0].isObject()) { | |||
31642 | do { | |||
31643 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
31644 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
31645 | return false; | |||
31646 | } | |||
31647 | // NOTE: This assert does NOT call the function. | |||
31648 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassDictionaryOrLong(cx, Constify(arg0)))>, "Should be returning void here"); | |||
31649 | MOZ_KnownLive(self)(self)->PassDictionaryOrLong(cx, Constify(arg0)); | |||
31650 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31650); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31650; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31651 | args.rval().setUndefined(); | |||
31652 | return true; | |||
31653 | } while (false); | |||
31654 | } | |||
31655 | int32_t arg0; | |||
31656 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
31657 | return false; | |||
31658 | } | |||
31659 | // NOTE: This assert does NOT call the function. | |||
31660 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassDictionaryOrLong(arg0))>, "Should be returning void here"); | |||
31661 | MOZ_KnownLive(self)(self)->PassDictionaryOrLong(arg0); | |||
31662 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31662); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31662; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31663 | args.rval().setUndefined(); | |||
31664 | return true; | |||
31665 | break; | |||
31666 | } | |||
31667 | default: { | |||
31668 | // Using nsPrintfCString here would require including that | |||
31669 | // header. Let's not worry about it. | |||
31670 | nsAutoCString argCountStr; | |||
31671 | argCountStr.AppendPrintf("%u", args.length()); | |||
31672 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
31673 | } | |||
31674 | } | |||
31675 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 31675); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 31675; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
31676 | return false; | |||
31677 | } | |||
31678 | ||||
31679 | static const JSJitInfo passDictionaryOrLong_methodinfo = { | |||
31680 | { (JSJitGetterOp)passDictionaryOrLong }, | |||
31681 | { prototypes::id::TestExampleInterface }, | |||
31682 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31683 | JSJitInfo::Method, | |||
31684 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31685 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31686 | false, /* isInfallible. False in setters. */ | |||
31687 | false, /* isMovable. Not relevant for setters. */ | |||
31688 | false, /* isEliminatable. Not relevant for setters. */ | |||
31689 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31690 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31691 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31692 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31693 | }; | |||
31694 | ||||
31695 | MOZ_CAN_RUN_SCRIPT static bool | |||
31696 | passDictContainingDict(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31697 | { | |||
31698 | BindingCallContext cx(cx_, "TestExampleInterface.passDictContainingDict"); | |||
31699 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31702( cx, "TestExampleInterface" , "passDictContainingDict", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31700 | "TestExampleInterface", "passDictContainingDict", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31702( cx, "TestExampleInterface" , "passDictContainingDict", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31701 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31702( cx, "TestExampleInterface" , "passDictContainingDict", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31702 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31702( cx, "TestExampleInterface" , "passDictContainingDict", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
31703 | ||||
31704 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31705 | RootedDictionary<binding_detail::FastDictContainingDict> arg0(cx); | |||
31706 | if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1", false)) { | |||
31707 | return false; | |||
31708 | } | |||
31709 | // NOTE: This assert does NOT call the function. | |||
31710 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassDictContainingDict(cx, Constify(arg0)))>, "Should be returning void here"); | |||
31711 | MOZ_KnownLive(self)(self)->PassDictContainingDict(cx, Constify(arg0)); | |||
31712 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31712); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31712; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31713 | args.rval().setUndefined(); | |||
31714 | return true; | |||
31715 | } | |||
31716 | ||||
31717 | static const JSJitInfo passDictContainingDict_methodinfo = { | |||
31718 | { (JSJitGetterOp)passDictContainingDict }, | |||
31719 | { prototypes::id::TestExampleInterface }, | |||
31720 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31721 | JSJitInfo::Method, | |||
31722 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31723 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31724 | false, /* isInfallible. False in setters. */ | |||
31725 | false, /* isMovable. Not relevant for setters. */ | |||
31726 | false, /* isEliminatable. Not relevant for setters. */ | |||
31727 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31728 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31729 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31730 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31731 | }; | |||
31732 | ||||
31733 | MOZ_CAN_RUN_SCRIPT static bool | |||
31734 | passDictContainingSequence(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31735 | { | |||
31736 | BindingCallContext cx(cx_, "TestExampleInterface.passDictContainingSequence"); | |||
31737 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31740( cx, "TestExampleInterface" , "passDictContainingSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31738 | "TestExampleInterface", "passDictContainingSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31740( cx, "TestExampleInterface" , "passDictContainingSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31739 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31740( cx, "TestExampleInterface" , "passDictContainingSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31740 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31740( cx, "TestExampleInterface" , "passDictContainingSequence", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31741 | ||||
31742 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31743 | RootedDictionary<binding_detail::FastDictContainingSequence> arg0(cx); | |||
31744 | if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1", false)) { | |||
31745 | return false; | |||
31746 | } | |||
31747 | // NOTE: This assert does NOT call the function. | |||
31748 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassDictContainingSequence(cx, Constify(arg0)))>, "Should be returning void here"); | |||
31749 | MOZ_KnownLive(self)(self)->PassDictContainingSequence(cx, Constify(arg0)); | |||
31750 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31750); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31750; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31751 | args.rval().setUndefined(); | |||
31752 | return true; | |||
31753 | } | |||
31754 | ||||
31755 | static const JSJitInfo passDictContainingSequence_methodinfo = { | |||
31756 | { (JSJitGetterOp)passDictContainingSequence }, | |||
31757 | { prototypes::id::TestExampleInterface }, | |||
31758 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31759 | JSJitInfo::Method, | |||
31760 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31761 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31762 | false, /* isInfallible. False in setters. */ | |||
31763 | false, /* isMovable. Not relevant for setters. */ | |||
31764 | false, /* isEliminatable. Not relevant for setters. */ | |||
31765 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31766 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31767 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31768 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31769 | }; | |||
31770 | ||||
31771 | MOZ_CAN_RUN_SCRIPT static bool | |||
31772 | receiveDictContainingSequence(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31773 | { | |||
31774 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31777( cx, "TestExampleInterface" , "receiveDictContainingSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31775 | "TestExampleInterface", "receiveDictContainingSequence", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31777( cx, "TestExampleInterface" , "receiveDictContainingSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31776 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31777( cx, "TestExampleInterface" , "receiveDictContainingSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
31777 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31777( cx, "TestExampleInterface" , "receiveDictContainingSequence", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
31778 | ||||
31779 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31780 | RootedDictionary<DictContainingSequence> result(cx); | |||
31781 | // NOTE: This assert does NOT call the function. | |||
31782 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ReceiveDictContainingSequence(cx, result))>, "Should be returning void here"); | |||
31783 | MOZ_KnownLive(self)(self)->ReceiveDictContainingSequence(cx, result); | |||
31784 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31784); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31784; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31785 | if (!result.ToObjectInternal(cx, args.rval())) { | |||
31786 | return false; | |||
31787 | } | |||
31788 | return true; | |||
31789 | } | |||
31790 | ||||
31791 | static const JSJitInfo receiveDictContainingSequence_methodinfo = { | |||
31792 | { (JSJitGetterOp)receiveDictContainingSequence }, | |||
31793 | { prototypes::id::TestExampleInterface }, | |||
31794 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31795 | JSJitInfo::Method, | |||
31796 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31797 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
31798 | false, /* isInfallible. False in setters. */ | |||
31799 | false, /* isMovable. Not relevant for setters. */ | |||
31800 | false, /* isEliminatable. Not relevant for setters. */ | |||
31801 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31802 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31803 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31804 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31805 | }; | |||
31806 | ||||
31807 | MOZ_CAN_RUN_SCRIPT static bool | |||
31808 | passVariadicDictionary(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31809 | { | |||
31810 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicDictionary"); | |||
31811 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31814( cx, "TestExampleInterface" , "passVariadicDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31812 | "TestExampleInterface", "passVariadicDictionary", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31814( cx, "TestExampleInterface" , "passVariadicDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31813 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31814( cx, "TestExampleInterface" , "passVariadicDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31814 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31814( cx, "TestExampleInterface" , "passVariadicDictionary", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
31815 | ||||
31816 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31817 | AutoSequence<Dict> arg0; | |||
31818 | SequenceRooter<Dict> arg0_holder(cx, &arg0); | |||
31819 | if (args.length() > 0) { | |||
31820 | if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) { | |||
31821 | JS_ReportOutOfMemory(cx); | |||
31822 | return false; | |||
31823 | } | |||
31824 | for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) { | |||
31825 | // OK to do infallible append here, since we ensured capacity already. | |||
31826 | Dict& slot = *arg0.AppendElement(); | |||
31827 | if (!slot.Init(cx, args[variadicArg], "Argument 1", false)) { | |||
31828 | return false; | |||
31829 | } | |||
31830 | } | |||
31831 | } | |||
31832 | // NOTE: This assert does NOT call the function. | |||
31833 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicDictionary(cx, Constify(arg0)))>, "Should be returning void here"); | |||
31834 | MOZ_KnownLive(self)(self)->PassVariadicDictionary(cx, Constify(arg0)); | |||
31835 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31835); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31835; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31836 | args.rval().setUndefined(); | |||
31837 | return true; | |||
31838 | } | |||
31839 | ||||
31840 | static const JSJitInfo passVariadicDictionary_methodinfo = { | |||
31841 | { (JSJitGetterOp)passVariadicDictionary }, | |||
31842 | { prototypes::id::TestExampleInterface }, | |||
31843 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31844 | JSJitInfo::Method, | |||
31845 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31846 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31847 | false, /* isInfallible. False in setters. */ | |||
31848 | false, /* isMovable. Not relevant for setters. */ | |||
31849 | false, /* isEliminatable. Not relevant for setters. */ | |||
31850 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31851 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31852 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31853 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31854 | }; | |||
31855 | ||||
31856 | MOZ_CAN_RUN_SCRIPT static bool | |||
31857 | dontEnforceRangeOrClamp(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31858 | { | |||
31859 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31862( cx, "TestExampleInterface" , "dontEnforceRangeOrClamp", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31860 | "TestExampleInterface", "dontEnforceRangeOrClamp", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31862( cx, "TestExampleInterface" , "dontEnforceRangeOrClamp", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31861 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31862( cx, "TestExampleInterface" , "dontEnforceRangeOrClamp", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31862 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31862( cx, "TestExampleInterface" , "dontEnforceRangeOrClamp", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
31863 | ||||
31864 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31865 | if (!args.requireAtLeast(cx, "TestExampleInterface.dontEnforceRangeOrClamp", 1)) { | |||
31866 | return false; | |||
31867 | } | |||
31868 | int8_t arg0; | |||
31869 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
31870 | return false; | |||
31871 | } | |||
31872 | // NOTE: This assert does NOT call the function. | |||
31873 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->DontEnforceRangeOrClamp(arg0))>, "Should be returning void here"); | |||
31874 | MOZ_KnownLive(self)(self)->DontEnforceRangeOrClamp(arg0); | |||
31875 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31875); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31875; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31876 | args.rval().setUndefined(); | |||
31877 | return true; | |||
31878 | } | |||
31879 | ||||
31880 | static const JSJitInfo dontEnforceRangeOrClamp_methodinfo = { | |||
31881 | { (JSJitGetterOp)dontEnforceRangeOrClamp }, | |||
31882 | { prototypes::id::TestExampleInterface }, | |||
31883 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31884 | JSJitInfo::Method, | |||
31885 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31886 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31887 | false, /* isInfallible. False in setters. */ | |||
31888 | false, /* isMovable. Not relevant for setters. */ | |||
31889 | false, /* isEliminatable. Not relevant for setters. */ | |||
31890 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31891 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31892 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31893 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31894 | }; | |||
31895 | ||||
31896 | MOZ_CAN_RUN_SCRIPT static bool | |||
31897 | doEnforceRange(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31898 | { | |||
31899 | BindingCallContext cx(cx_, "TestExampleInterface.doEnforceRange"); | |||
31900 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31903( cx, "TestExampleInterface" , "doEnforceRange", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31901 | "TestExampleInterface", "doEnforceRange", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31903( cx, "TestExampleInterface" , "doEnforceRange", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31902 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31903( cx, "TestExampleInterface" , "doEnforceRange", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31903 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31903( cx, "TestExampleInterface" , "doEnforceRange", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
31904 | ||||
31905 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31906 | if (!args.requireAtLeast(cx, "TestExampleInterface.doEnforceRange", 1)) { | |||
31907 | return false; | |||
31908 | } | |||
31909 | int8_t arg0; | |||
31910 | if (!ValueToPrimitive<int8_t, eEnforceRange>(cx, args[0], "Argument 1", &arg0)) { | |||
31911 | return false; | |||
31912 | } | |||
31913 | // NOTE: This assert does NOT call the function. | |||
31914 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->DoEnforceRange(arg0))>, "Should be returning void here"); | |||
31915 | MOZ_KnownLive(self)(self)->DoEnforceRange(arg0); | |||
31916 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31916); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31916; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31917 | args.rval().setUndefined(); | |||
31918 | return true; | |||
31919 | } | |||
31920 | ||||
31921 | static const JSJitInfo doEnforceRange_methodinfo = { | |||
31922 | { (JSJitGetterOp)doEnforceRange }, | |||
31923 | { prototypes::id::TestExampleInterface }, | |||
31924 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31925 | JSJitInfo::Method, | |||
31926 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31927 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31928 | false, /* isInfallible. False in setters. */ | |||
31929 | false, /* isMovable. Not relevant for setters. */ | |||
31930 | false, /* isEliminatable. Not relevant for setters. */ | |||
31931 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31932 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31933 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31934 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31935 | }; | |||
31936 | ||||
31937 | MOZ_CAN_RUN_SCRIPT static bool | |||
31938 | doEnforceRangeNullable(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31939 | { | |||
31940 | BindingCallContext cx(cx_, "TestExampleInterface.doEnforceRangeNullable"); | |||
31941 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31944( cx, "TestExampleInterface" , "doEnforceRangeNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31942 | "TestExampleInterface", "doEnforceRangeNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31944( cx, "TestExampleInterface" , "doEnforceRangeNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31943 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31944( cx, "TestExampleInterface" , "doEnforceRangeNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
31944 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31944( cx, "TestExampleInterface" , "doEnforceRangeNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
31945 | ||||
31946 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31947 | if (!args.requireAtLeast(cx, "TestExampleInterface.doEnforceRangeNullable", 1)) { | |||
31948 | return false; | |||
31949 | } | |||
31950 | Nullable<int8_t> arg0; | |||
31951 | if (args[0].isNullOrUndefined()) { | |||
31952 | arg0.SetNull(); | |||
31953 | } else if (!ValueToPrimitive<int8_t, eEnforceRange>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
31954 | return false; | |||
31955 | } | |||
31956 | // NOTE: This assert does NOT call the function. | |||
31957 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->DoEnforceRangeNullable(Constify(arg0)))>, "Should be returning void here"); | |||
31958 | MOZ_KnownLive(self)(self)->DoEnforceRangeNullable(Constify(arg0)); | |||
31959 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31959); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31959; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
31960 | args.rval().setUndefined(); | |||
31961 | return true; | |||
31962 | } | |||
31963 | ||||
31964 | static const JSJitInfo doEnforceRangeNullable_methodinfo = { | |||
31965 | { (JSJitGetterOp)doEnforceRangeNullable }, | |||
31966 | { prototypes::id::TestExampleInterface }, | |||
31967 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
31968 | JSJitInfo::Method, | |||
31969 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
31970 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
31971 | false, /* isInfallible. False in setters. */ | |||
31972 | false, /* isMovable. Not relevant for setters. */ | |||
31973 | false, /* isEliminatable. Not relevant for setters. */ | |||
31974 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
31975 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
31976 | false, /* isTypedMethod. Only relevant for methods. */ | |||
31977 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
31978 | }; | |||
31979 | ||||
31980 | MOZ_CAN_RUN_SCRIPT static bool | |||
31981 | doClamp(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
31982 | { | |||
31983 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject31986( cx, "TestExampleInterface" , "doClamp", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
31984 | "TestExampleInterface", "doClamp", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject31986( cx, "TestExampleInterface" , "doClamp", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
31985 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject31986( cx, "TestExampleInterface" , "doClamp", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
31986 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject31986( cx, "TestExampleInterface" , "doClamp", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
31987 | ||||
31988 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
31989 | if (!args.requireAtLeast(cx, "TestExampleInterface.doClamp", 1)) { | |||
31990 | return false; | |||
31991 | } | |||
31992 | int8_t arg0; | |||
31993 | if (!ValueToPrimitive<int8_t, eClamp>(cx, args[0], "Argument 1", &arg0)) { | |||
31994 | return false; | |||
31995 | } | |||
31996 | // NOTE: This assert does NOT call the function. | |||
31997 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->DoClamp(arg0))>, "Should be returning void here"); | |||
31998 | MOZ_KnownLive(self)(self)->DoClamp(arg0); | |||
31999 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 31999); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 31999; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32000 | args.rval().setUndefined(); | |||
32001 | return true; | |||
32002 | } | |||
32003 | ||||
32004 | static const JSJitInfo doClamp_methodinfo = { | |||
32005 | { (JSJitGetterOp)doClamp }, | |||
32006 | { prototypes::id::TestExampleInterface }, | |||
32007 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32008 | JSJitInfo::Method, | |||
32009 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32010 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32011 | false, /* isInfallible. False in setters. */ | |||
32012 | false, /* isMovable. Not relevant for setters. */ | |||
32013 | false, /* isEliminatable. Not relevant for setters. */ | |||
32014 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32015 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32016 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32017 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32018 | }; | |||
32019 | ||||
32020 | MOZ_CAN_RUN_SCRIPT static bool | |||
32021 | doClampNullable(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
32022 | { | |||
32023 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32026( cx, "TestExampleInterface" , "doClampNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32024 | "TestExampleInterface", "doClampNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32026( cx, "TestExampleInterface" , "doClampNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32025 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32026( cx, "TestExampleInterface" , "doClampNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32026 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32026( cx, "TestExampleInterface" , "doClampNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32027 | ||||
32028 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32029 | if (!args.requireAtLeast(cx, "TestExampleInterface.doClampNullable", 1)) { | |||
32030 | return false; | |||
32031 | } | |||
32032 | Nullable<int8_t> arg0; | |||
32033 | if (args[0].isNullOrUndefined()) { | |||
32034 | arg0.SetNull(); | |||
32035 | } else if (!ValueToPrimitive<int8_t, eClamp>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
32036 | return false; | |||
32037 | } | |||
32038 | // NOTE: This assert does NOT call the function. | |||
32039 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->DoClampNullable(Constify(arg0)))>, "Should be returning void here"); | |||
32040 | MOZ_KnownLive(self)(self)->DoClampNullable(Constify(arg0)); | |||
32041 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32041); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32041; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32042 | args.rval().setUndefined(); | |||
32043 | return true; | |||
32044 | } | |||
32045 | ||||
32046 | static const JSJitInfo doClampNullable_methodinfo = { | |||
32047 | { (JSJitGetterOp)doClampNullable }, | |||
32048 | { prototypes::id::TestExampleInterface }, | |||
32049 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32050 | JSJitInfo::Method, | |||
32051 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32052 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32053 | false, /* isInfallible. False in setters. */ | |||
32054 | false, /* isMovable. Not relevant for setters. */ | |||
32055 | false, /* isEliminatable. Not relevant for setters. */ | |||
32056 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32057 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32058 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32059 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32060 | }; | |||
32061 | ||||
32062 | MOZ_CAN_RUN_SCRIPT static bool | |||
32063 | get_enforcedByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
32064 | { | |||
32065 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32068( cx, "TestExampleInterface" , "enforcedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32066 | "TestExampleInterface", "enforcedByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32068( cx, "TestExampleInterface" , "enforcedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32067 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject32068( cx, "TestExampleInterface" , "enforcedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32068 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32068( cx, "TestExampleInterface" , "enforcedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32069 | ||||
32070 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32071 | int8_t result(MOZ_KnownLive(self)(self)->EnforcedByte()); | |||
32072 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32072); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32072; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32073 | args.rval().setInt32(int32_t(result)); | |||
32074 | return true; | |||
32075 | } | |||
32076 | ||||
32077 | MOZ_CAN_RUN_SCRIPT static bool | |||
32078 | set_enforcedByte(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
32079 | { | |||
32080 | BindingCallContext cx(cx_, "TestExampleInterface.enforcedByte setter"); | |||
32081 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32084( cx, "TestExampleInterface" , "enforcedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32082 | "TestExampleInterface", "enforcedByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32084( cx, "TestExampleInterface" , "enforcedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32083 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject32084( cx, "TestExampleInterface" , "enforcedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32084 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32084( cx, "TestExampleInterface" , "enforcedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32085 | ||||
32086 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32087 | int8_t arg0; | |||
32088 | if (!ValueToPrimitive<int8_t, eEnforceRange>(cx, args[0], "Value being assigned", &arg0)) { | |||
32089 | return false; | |||
32090 | } | |||
32091 | // NOTE: This assert does NOT call the function. | |||
32092 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetEnforcedByte(arg0))>, "Should be returning void here"); | |||
32093 | MOZ_KnownLive(self)(self)->SetEnforcedByte(arg0); | |||
32094 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32094); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32094; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32095 | ||||
32096 | return true; | |||
32097 | } | |||
32098 | ||||
32099 | static const JSJitInfo enforcedByte_getterinfo = { | |||
32100 | { get_enforcedByte }, | |||
32101 | { prototypes::id::TestExampleInterface }, | |||
32102 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32103 | JSJitInfo::Getter, | |||
32104 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32105 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
32106 | true, /* isInfallible. False in setters. */ | |||
32107 | false, /* isMovable. Not relevant for setters. */ | |||
32108 | false, /* isEliminatable. Not relevant for setters. */ | |||
32109 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32110 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32111 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32112 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32113 | }; | |||
32114 | static const JSJitInfo enforcedByte_setterinfo = { | |||
32115 | { (JSJitGetterOp)set_enforcedByte }, | |||
32116 | { prototypes::id::TestExampleInterface }, | |||
32117 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32118 | JSJitInfo::Setter, | |||
32119 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32120 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32121 | false, /* isInfallible. False in setters. */ | |||
32122 | false, /* isMovable. Not relevant for setters. */ | |||
32123 | false, /* isEliminatable. Not relevant for setters. */ | |||
32124 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32125 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32126 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32127 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32128 | }; | |||
32129 | ||||
32130 | MOZ_CAN_RUN_SCRIPT static bool | |||
32131 | get_enforcedByteNullable(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
32132 | { | |||
32133 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32136( cx, "TestExampleInterface" , "enforcedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32134 | "TestExampleInterface", "enforcedByteNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32136( cx, "TestExampleInterface" , "enforcedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32135 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject32136( cx, "TestExampleInterface" , "enforcedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32136 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32136( cx, "TestExampleInterface" , "enforcedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32137 | ||||
32138 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32139 | Nullable<int8_t> result(MOZ_KnownLive(self)(self)->GetEnforcedByteNullable()); | |||
32140 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32140); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32140; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32141 | if (result.IsNull()) { | |||
32142 | args.rval().setNull(); | |||
32143 | return true; | |||
32144 | } | |||
32145 | args.rval().setInt32(int32_t(result.Value())); | |||
32146 | return true; | |||
32147 | } | |||
32148 | ||||
32149 | MOZ_CAN_RUN_SCRIPT static bool | |||
32150 | set_enforcedByteNullable(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
32151 | { | |||
32152 | BindingCallContext cx(cx_, "TestExampleInterface.enforcedByteNullable setter"); | |||
32153 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32156( cx, "TestExampleInterface" , "enforcedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32154 | "TestExampleInterface", "enforcedByteNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32156( cx, "TestExampleInterface" , "enforcedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32155 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject32156( cx, "TestExampleInterface" , "enforcedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32156 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32156( cx, "TestExampleInterface" , "enforcedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32157 | ||||
32158 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32159 | Nullable<int8_t> arg0; | |||
32160 | if (args[0].isNullOrUndefined()) { | |||
32161 | arg0.SetNull(); | |||
32162 | } else if (!ValueToPrimitive<int8_t, eEnforceRange>(cx, args[0], "Value being assigned", &arg0.SetValue())) { | |||
32163 | return false; | |||
32164 | } | |||
32165 | // NOTE: This assert does NOT call the function. | |||
32166 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetEnforcedByteNullable(Constify(arg0)))>, "Should be returning void here"); | |||
32167 | MOZ_KnownLive(self)(self)->SetEnforcedByteNullable(Constify(arg0)); | |||
32168 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32168); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32168; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32169 | ||||
32170 | return true; | |||
32171 | } | |||
32172 | ||||
32173 | static const JSJitInfo enforcedByteNullable_getterinfo = { | |||
32174 | { get_enforcedByteNullable }, | |||
32175 | { prototypes::id::TestExampleInterface }, | |||
32176 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32177 | JSJitInfo::Getter, | |||
32178 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32179 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
32180 | true, /* isInfallible. False in setters. */ | |||
32181 | false, /* isMovable. Not relevant for setters. */ | |||
32182 | false, /* isEliminatable. Not relevant for setters. */ | |||
32183 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32184 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32185 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32186 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32187 | }; | |||
32188 | static const JSJitInfo enforcedByteNullable_setterinfo = { | |||
32189 | { (JSJitGetterOp)set_enforcedByteNullable }, | |||
32190 | { prototypes::id::TestExampleInterface }, | |||
32191 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32192 | JSJitInfo::Setter, | |||
32193 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32194 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32195 | false, /* isInfallible. False in setters. */ | |||
32196 | false, /* isMovable. Not relevant for setters. */ | |||
32197 | false, /* isEliminatable. Not relevant for setters. */ | |||
32198 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32199 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32200 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32201 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32202 | }; | |||
32203 | ||||
32204 | MOZ_CAN_RUN_SCRIPT static bool | |||
32205 | get_clampedByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
32206 | { | |||
32207 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32210( cx, "TestExampleInterface" , "clampedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32208 | "TestExampleInterface", "clampedByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32210( cx, "TestExampleInterface" , "clampedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32209 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject32210( cx, "TestExampleInterface" , "clampedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32210 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32210( cx, "TestExampleInterface" , "clampedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32211 | ||||
32212 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32213 | int8_t result(MOZ_KnownLive(self)(self)->ClampedByte()); | |||
32214 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32214); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32214; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32215 | args.rval().setInt32(int32_t(result)); | |||
32216 | return true; | |||
32217 | } | |||
32218 | ||||
32219 | MOZ_CAN_RUN_SCRIPT static bool | |||
32220 | set_clampedByte(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
32221 | { | |||
32222 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32225( cx, "TestExampleInterface" , "clampedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32223 | "TestExampleInterface", "clampedByte", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32225( cx, "TestExampleInterface" , "clampedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32224 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject32225( cx, "TestExampleInterface" , "clampedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32225 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32225( cx, "TestExampleInterface" , "clampedByte", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32226 | ||||
32227 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32228 | int8_t arg0; | |||
32229 | if (!ValueToPrimitive<int8_t, eClamp>(cx, args[0], "Value being assigned", &arg0)) { | |||
32230 | return false; | |||
32231 | } | |||
32232 | // NOTE: This assert does NOT call the function. | |||
32233 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetClampedByte(arg0))>, "Should be returning void here"); | |||
32234 | MOZ_KnownLive(self)(self)->SetClampedByte(arg0); | |||
32235 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32235); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32235; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32236 | ||||
32237 | return true; | |||
32238 | } | |||
32239 | ||||
32240 | static const JSJitInfo clampedByte_getterinfo = { | |||
32241 | { get_clampedByte }, | |||
32242 | { prototypes::id::TestExampleInterface }, | |||
32243 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32244 | JSJitInfo::Getter, | |||
32245 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32246 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
32247 | true, /* isInfallible. False in setters. */ | |||
32248 | false, /* isMovable. Not relevant for setters. */ | |||
32249 | false, /* isEliminatable. Not relevant for setters. */ | |||
32250 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32251 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32252 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32253 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32254 | }; | |||
32255 | static const JSJitInfo clampedByte_setterinfo = { | |||
32256 | { (JSJitGetterOp)set_clampedByte }, | |||
32257 | { prototypes::id::TestExampleInterface }, | |||
32258 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32259 | JSJitInfo::Setter, | |||
32260 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32261 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32262 | false, /* isInfallible. False in setters. */ | |||
32263 | false, /* isMovable. Not relevant for setters. */ | |||
32264 | false, /* isEliminatable. Not relevant for setters. */ | |||
32265 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32266 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32267 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32268 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32269 | }; | |||
32270 | ||||
32271 | MOZ_CAN_RUN_SCRIPT static bool | |||
32272 | get_clampedByteNullable(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
32273 | { | |||
32274 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32277( cx, "TestExampleInterface" , "clampedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32275 | "TestExampleInterface", "clampedByteNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32277( cx, "TestExampleInterface" , "clampedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32276 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject32277( cx, "TestExampleInterface" , "clampedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32277 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32277( cx, "TestExampleInterface" , "clampedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32278 | ||||
32279 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32280 | Nullable<int8_t> result(MOZ_KnownLive(self)(self)->GetClampedByteNullable()); | |||
32281 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32281); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32281; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32282 | if (result.IsNull()) { | |||
32283 | args.rval().setNull(); | |||
32284 | return true; | |||
32285 | } | |||
32286 | args.rval().setInt32(int32_t(result.Value())); | |||
32287 | return true; | |||
32288 | } | |||
32289 | ||||
32290 | MOZ_CAN_RUN_SCRIPT static bool | |||
32291 | set_clampedByteNullable(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
32292 | { | |||
32293 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32296( cx, "TestExampleInterface" , "clampedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32294 | "TestExampleInterface", "clampedByteNullable", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32296( cx, "TestExampleInterface" , "clampedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32295 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject32296( cx, "TestExampleInterface" , "clampedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32296 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32296( cx, "TestExampleInterface" , "clampedByteNullable", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32297 | ||||
32298 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32299 | Nullable<int8_t> arg0; | |||
32300 | if (args[0].isNullOrUndefined()) { | |||
32301 | arg0.SetNull(); | |||
32302 | } else if (!ValueToPrimitive<int8_t, eClamp>(cx, args[0], "Value being assigned", &arg0.SetValue())) { | |||
32303 | return false; | |||
32304 | } | |||
32305 | // NOTE: This assert does NOT call the function. | |||
32306 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetClampedByteNullable(Constify(arg0)))>, "Should be returning void here"); | |||
32307 | MOZ_KnownLive(self)(self)->SetClampedByteNullable(Constify(arg0)); | |||
32308 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32308); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32308; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32309 | ||||
32310 | return true; | |||
32311 | } | |||
32312 | ||||
32313 | static const JSJitInfo clampedByteNullable_getterinfo = { | |||
32314 | { get_clampedByteNullable }, | |||
32315 | { prototypes::id::TestExampleInterface }, | |||
32316 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32317 | JSJitInfo::Getter, | |||
32318 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32319 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
32320 | true, /* isInfallible. False in setters. */ | |||
32321 | false, /* isMovable. Not relevant for setters. */ | |||
32322 | false, /* isEliminatable. Not relevant for setters. */ | |||
32323 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32324 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32325 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32326 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32327 | }; | |||
32328 | static const JSJitInfo clampedByteNullable_setterinfo = { | |||
32329 | { (JSJitGetterOp)set_clampedByteNullable }, | |||
32330 | { prototypes::id::TestExampleInterface }, | |||
32331 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32332 | JSJitInfo::Setter, | |||
32333 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32334 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32335 | false, /* isInfallible. False in setters. */ | |||
32336 | false, /* isMovable. Not relevant for setters. */ | |||
32337 | false, /* isEliminatable. Not relevant for setters. */ | |||
32338 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32339 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32340 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32341 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32342 | }; | |||
32343 | ||||
32344 | MOZ_CAN_RUN_SCRIPT static bool | |||
32345 | exerciseTypedefInterfaces1(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
32346 | { | |||
32347 | BindingCallContext cx(cx_, "TestExampleInterface.exerciseTypedefInterfaces1"); | |||
32348 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32351( cx, "TestExampleInterface" , "exerciseTypedefInterfaces1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32349 | "TestExampleInterface", "exerciseTypedefInterfaces1", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32351( cx, "TestExampleInterface" , "exerciseTypedefInterfaces1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32350 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32351( cx, "TestExampleInterface" , "exerciseTypedefInterfaces1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32351 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32351( cx, "TestExampleInterface" , "exerciseTypedefInterfaces1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
32352 | ||||
32353 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32354 | if (!args.requireAtLeast(cx, "TestExampleInterface.exerciseTypedefInterfaces1", 1)) { | |||
32355 | return false; | |||
32356 | } | |||
32357 | NonNull<mozilla::dom::TestInterface> arg0; | |||
32358 | if (args[0].isObject()) { | |||
32359 | { | |||
32360 | // Our JSContext should be in the right global to do unwrapping in. | |||
32361 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
32362 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
32363 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
32364 | return false; | |||
32365 | } | |||
32366 | } | |||
32367 | } else { | |||
32368 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
32369 | return false; | |||
32370 | } | |||
32371 | // NOTE: This assert does NOT call the function. | |||
32372 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ExerciseTypedefInterfaces1(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
32373 | MOZ_KnownLive(self)(self)->ExerciseTypedefInterfaces1(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
32374 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32374); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32374; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32375 | args.rval().setUndefined(); | |||
32376 | return true; | |||
32377 | } | |||
32378 | ||||
32379 | static const JSJitInfo exerciseTypedefInterfaces1_methodinfo = { | |||
32380 | { (JSJitGetterOp)exerciseTypedefInterfaces1 }, | |||
32381 | { prototypes::id::TestExampleInterface }, | |||
32382 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32383 | JSJitInfo::Method, | |||
32384 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32385 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32386 | false, /* isInfallible. False in setters. */ | |||
32387 | false, /* isMovable. Not relevant for setters. */ | |||
32388 | false, /* isEliminatable. Not relevant for setters. */ | |||
32389 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32390 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32391 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32392 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32393 | }; | |||
32394 | ||||
32395 | MOZ_CAN_RUN_SCRIPT static bool | |||
32396 | exerciseTypedefInterfaces2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
32397 | { | |||
32398 | BindingCallContext cx(cx_, "TestExampleInterface.exerciseTypedefInterfaces2"); | |||
32399 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32402( cx, "TestExampleInterface" , "exerciseTypedefInterfaces2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32400 | "TestExampleInterface", "exerciseTypedefInterfaces2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32402( cx, "TestExampleInterface" , "exerciseTypedefInterfaces2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32401 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32402( cx, "TestExampleInterface" , "exerciseTypedefInterfaces2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32402 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32402( cx, "TestExampleInterface" , "exerciseTypedefInterfaces2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
32403 | ||||
32404 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32405 | if (!args.requireAtLeast(cx, "TestExampleInterface.exerciseTypedefInterfaces2", 1)) { | |||
32406 | return false; | |||
32407 | } | |||
32408 | mozilla::dom::TestInterface* arg0; | |||
32409 | if (args[0].isObject()) { | |||
32410 | { | |||
32411 | // Our JSContext should be in the right global to do unwrapping in. | |||
32412 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
32413 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
32414 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
32415 | return false; | |||
32416 | } | |||
32417 | } | |||
32418 | } else if (args[0].isNullOrUndefined()) { | |||
32419 | arg0 = nullptr; | |||
32420 | } else { | |||
32421 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
32422 | return false; | |||
32423 | } | |||
32424 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->ExerciseTypedefInterfaces2(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))); | |||
32425 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32425); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32425; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32426 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
32427 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32427); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 32427; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
32428 | return false; | |||
32429 | } | |||
32430 | return true; | |||
32431 | } | |||
32432 | ||||
32433 | static const JSJitInfo exerciseTypedefInterfaces2_methodinfo = { | |||
32434 | { (JSJitGetterOp)exerciseTypedefInterfaces2 }, | |||
32435 | { prototypes::id::TestExampleInterface }, | |||
32436 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32437 | JSJitInfo::Method, | |||
32438 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32439 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
32440 | false, /* isInfallible. False in setters. */ | |||
32441 | false, /* isMovable. Not relevant for setters. */ | |||
32442 | false, /* isEliminatable. Not relevant for setters. */ | |||
32443 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32444 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32445 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32446 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32447 | }; | |||
32448 | ||||
32449 | MOZ_CAN_RUN_SCRIPT static bool | |||
32450 | exerciseTypedefInterfaces3(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
32451 | { | |||
32452 | BindingCallContext cx(cx_, "TestExampleInterface.exerciseTypedefInterfaces3"); | |||
32453 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32456( cx, "TestExampleInterface" , "exerciseTypedefInterfaces3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32454 | "TestExampleInterface", "exerciseTypedefInterfaces3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32456( cx, "TestExampleInterface" , "exerciseTypedefInterfaces3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32455 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32456( cx, "TestExampleInterface" , "exerciseTypedefInterfaces3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32456 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32456( cx, "TestExampleInterface" , "exerciseTypedefInterfaces3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
32457 | ||||
32458 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32459 | if (!args.requireAtLeast(cx, "TestExampleInterface.exerciseTypedefInterfaces3", 1)) { | |||
32460 | return false; | |||
32461 | } | |||
32462 | NonNull<mozilla::dom::TestInterface> arg0; | |||
32463 | if (args[0].isObject()) { | |||
32464 | { | |||
32465 | // Our JSContext should be in the right global to do unwrapping in. | |||
32466 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
32467 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
32468 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
32469 | return false; | |||
32470 | } | |||
32471 | } | |||
32472 | } else { | |||
32473 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
32474 | return false; | |||
32475 | } | |||
32476 | // NOTE: This assert does NOT call the function. | |||
32477 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ExerciseTypedefInterfaces3(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
32478 | MOZ_KnownLive(self)(self)->ExerciseTypedefInterfaces3(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
32479 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32479); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32479; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32480 | args.rval().setUndefined(); | |||
32481 | return true; | |||
32482 | } | |||
32483 | ||||
32484 | static const JSJitInfo exerciseTypedefInterfaces3_methodinfo = { | |||
32485 | { (JSJitGetterOp)exerciseTypedefInterfaces3 }, | |||
32486 | { prototypes::id::TestExampleInterface }, | |||
32487 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32488 | JSJitInfo::Method, | |||
32489 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32490 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32491 | false, /* isInfallible. False in setters. */ | |||
32492 | false, /* isMovable. Not relevant for setters. */ | |||
32493 | false, /* isEliminatable. Not relevant for setters. */ | |||
32494 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32495 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32496 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32497 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32498 | }; | |||
32499 | ||||
32500 | MOZ_CAN_RUN_SCRIPT static bool | |||
32501 | get_deprecatedAttribute(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
32502 | { | |||
32503 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32506( cx, "TestExampleInterface" , "deprecatedAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32504 | "TestExampleInterface", "deprecatedAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32506( cx, "TestExampleInterface" , "deprecatedAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32505 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject32506( cx, "TestExampleInterface" , "deprecatedAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32506 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32506( cx, "TestExampleInterface" , "deprecatedAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32507 | ||||
32508 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32509 | DeprecationWarning(cx, obj, DeprecatedOperations::eComponents); | |||
32510 | bool result(MOZ_KnownLive(self)(self)->DeprecatedAttribute()); | |||
32511 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32511); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32511; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32512 | args.rval().setBoolean(result); | |||
32513 | return true; | |||
32514 | } | |||
32515 | ||||
32516 | MOZ_CAN_RUN_SCRIPT static bool | |||
32517 | set_deprecatedAttribute(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
32518 | { | |||
32519 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32522( cx, "TestExampleInterface" , "deprecatedAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32520 | "TestExampleInterface", "deprecatedAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32522( cx, "TestExampleInterface" , "deprecatedAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32521 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject32522( cx, "TestExampleInterface" , "deprecatedAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32522 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32522( cx, "TestExampleInterface" , "deprecatedAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32523 | ||||
32524 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32525 | DeprecationWarning(cx, obj, DeprecatedOperations::eComponents); | |||
32526 | bool arg0; | |||
32527 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
32528 | return false; | |||
32529 | } | |||
32530 | // NOTE: This assert does NOT call the function. | |||
32531 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetDeprecatedAttribute(arg0))>, "Should be returning void here"); | |||
32532 | MOZ_KnownLive(self)(self)->SetDeprecatedAttribute(arg0); | |||
32533 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32533); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32533; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32534 | ||||
32535 | return true; | |||
32536 | } | |||
32537 | ||||
32538 | static const JSJitInfo deprecatedAttribute_getterinfo = { | |||
32539 | { get_deprecatedAttribute }, | |||
32540 | { prototypes::id::TestExampleInterface }, | |||
32541 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32542 | JSJitInfo::Getter, | |||
32543 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32544 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
32545 | true, /* isInfallible. False in setters. */ | |||
32546 | false, /* isMovable. Not relevant for setters. */ | |||
32547 | false, /* isEliminatable. Not relevant for setters. */ | |||
32548 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32549 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32550 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32551 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32552 | }; | |||
32553 | static const JSJitInfo deprecatedAttribute_setterinfo = { | |||
32554 | { (JSJitGetterOp)set_deprecatedAttribute }, | |||
32555 | { prototypes::id::TestExampleInterface }, | |||
32556 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32557 | JSJitInfo::Setter, | |||
32558 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32559 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32560 | false, /* isInfallible. False in setters. */ | |||
32561 | false, /* isMovable. Not relevant for setters. */ | |||
32562 | false, /* isEliminatable. Not relevant for setters. */ | |||
32563 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32564 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32565 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32566 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32567 | }; | |||
32568 | ||||
32569 | MOZ_CAN_RUN_SCRIPT static bool | |||
32570 | deprecatedMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
32571 | { | |||
32572 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32575( cx, "TestExampleInterface" , "deprecatedMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32573 | "TestExampleInterface", "deprecatedMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32575( cx, "TestExampleInterface" , "deprecatedMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32574 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32575( cx, "TestExampleInterface" , "deprecatedMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32575 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32575( cx, "TestExampleInterface" , "deprecatedMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32576 | ||||
32577 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32578 | if (!args.requireAtLeast(cx, "TestExampleInterface.deprecatedMethod", 1)) { | |||
32579 | return false; | |||
32580 | } | |||
32581 | DeprecationWarning(cx, obj, DeprecatedOperations::eComponents); | |||
32582 | bool arg0; | |||
32583 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
32584 | return false; | |||
32585 | } | |||
32586 | // NOTE: This assert does NOT call the function. | |||
32587 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->DeprecatedMethod(arg0))>, "Should be returning void here"); | |||
32588 | MOZ_KnownLive(self)(self)->DeprecatedMethod(arg0); | |||
32589 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32589); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32589; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32590 | args.rval().setUndefined(); | |||
32591 | return true; | |||
32592 | } | |||
32593 | ||||
32594 | static const JSJitInfo deprecatedMethod_methodinfo = { | |||
32595 | { (JSJitGetterOp)deprecatedMethod }, | |||
32596 | { prototypes::id::TestExampleInterface }, | |||
32597 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32598 | JSJitInfo::Method, | |||
32599 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32600 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32601 | false, /* isInfallible. False in setters. */ | |||
32602 | false, /* isMovable. Not relevant for setters. */ | |||
32603 | false, /* isEliminatable. Not relevant for setters. */ | |||
32604 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32605 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32606 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32607 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32608 | }; | |||
32609 | ||||
32610 | MOZ_CAN_RUN_SCRIPT static bool | |||
32611 | deprecatedMethodWithContext(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
32612 | { | |||
32613 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32616( cx, "TestExampleInterface" , "deprecatedMethodWithContext", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32614 | "TestExampleInterface", "deprecatedMethodWithContext", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32616( cx, "TestExampleInterface" , "deprecatedMethodWithContext", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32615 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32616( cx, "TestExampleInterface" , "deprecatedMethodWithContext", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32616 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32616( cx, "TestExampleInterface" , "deprecatedMethodWithContext", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
32617 | ||||
32618 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32619 | if (!args.requireAtLeast(cx, "TestExampleInterface.deprecatedMethodWithContext", 1)) { | |||
32620 | return false; | |||
32621 | } | |||
32622 | DeprecationWarning(cx, obj, DeprecatedOperations::eComponents); | |||
32623 | JS::Rooted<JS::Value> arg0(cx); | |||
32624 | arg0 = args[0]; | |||
32625 | // NOTE: This assert does NOT call the function. | |||
32626 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->DeprecatedMethodWithContext(cx, arg0))>, "Should be returning void here"); | |||
32627 | MOZ_KnownLive(self)(self)->DeprecatedMethodWithContext(cx, arg0); | |||
32628 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32628); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32628; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32629 | args.rval().setUndefined(); | |||
32630 | return true; | |||
32631 | } | |||
32632 | ||||
32633 | static const JSJitInfo deprecatedMethodWithContext_methodinfo = { | |||
32634 | { (JSJitGetterOp)deprecatedMethodWithContext }, | |||
32635 | { prototypes::id::TestExampleInterface }, | |||
32636 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32637 | JSJitInfo::Method, | |||
32638 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32639 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
32640 | false, /* isInfallible. False in setters. */ | |||
32641 | false, /* isMovable. Not relevant for setters. */ | |||
32642 | false, /* isEliminatable. Not relevant for setters. */ | |||
32643 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32644 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32645 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32646 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32647 | }; | |||
32648 | ||||
32649 | MOZ_CAN_RUN_SCRIPT static bool | |||
32650 | get_staticAttribute(JSContext* cx, unsigned argc, JS::Value* vp) | |||
32651 | { | |||
32652 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32655( cx, "TestExampleInterface" , "staticAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32653 | "TestExampleInterface", "staticAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32655( cx, "TestExampleInterface" , "staticAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32654 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject32655( cx, "TestExampleInterface" , "staticAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32655 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32655( cx, "TestExampleInterface" , "staticAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32656 | ||||
32657 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
32658 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
32659 | ||||
32660 | GlobalObject global(cx, xpc::XrayAwareCalleeGlobal(obj)); | |||
32661 | if (global.Failed()) { | |||
32662 | return false; | |||
32663 | } | |||
32664 | ||||
32665 | bool result(mozilla::dom::TestExampleInterface::StaticAttribute(global)); | |||
32666 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32666); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32666; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32667 | args.rval().setBoolean(result); | |||
32668 | return true; | |||
32669 | } | |||
32670 | ||||
32671 | MOZ_CAN_RUN_SCRIPT static bool | |||
32672 | set_staticAttribute(JSContext* cx, unsigned argc, JS::Value* vp) | |||
32673 | { | |||
32674 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32677( cx, "TestExampleInterface" , "staticAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32675 | "TestExampleInterface", "staticAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32677( cx, "TestExampleInterface" , "staticAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32676 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject32677( cx, "TestExampleInterface" , "staticAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32677 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32677( cx, "TestExampleInterface" , "staticAttribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32678 | ||||
32679 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
32680 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
32681 | ||||
32682 | if (!args.requireAtLeast(cx, "staticAttribute setter", 1)) { | |||
32683 | return false; | |||
32684 | } | |||
32685 | GlobalObject global(cx, xpc::XrayAwareCalleeGlobal(obj)); | |||
32686 | if (global.Failed()) { | |||
32687 | return false; | |||
32688 | } | |||
32689 | ||||
32690 | bool arg0; | |||
32691 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
32692 | return false; | |||
32693 | } | |||
32694 | // NOTE: This assert does NOT call the function. | |||
32695 | static_assert(std::is_void_v<decltype(mozilla::dom::TestExampleInterface::SetStaticAttribute(global, arg0))>, "Should be returning void here"); | |||
32696 | mozilla::dom::TestExampleInterface::SetStaticAttribute(global, arg0); | |||
32697 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32697); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32697; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32698 | ||||
32699 | return true; | |||
32700 | } | |||
32701 | ||||
32702 | MOZ_CAN_RUN_SCRIPT static bool | |||
32703 | staticMethod(JSContext* cx, unsigned argc, JS::Value* vp) | |||
32704 | { | |||
32705 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32708( cx, "TestExampleInterface" , "staticMethod", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32706 | "TestExampleInterface", "staticMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32708( cx, "TestExampleInterface" , "staticMethod", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32707 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32708( cx, "TestExampleInterface" , "staticMethod", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32708 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32708( cx, "TestExampleInterface" , "staticMethod", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32709 | ||||
32710 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
32711 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
32712 | ||||
32713 | if (!args.requireAtLeast(cx, "TestExampleInterface.staticMethod", 1)) { | |||
32714 | return false; | |||
32715 | } | |||
32716 | GlobalObject global(cx, xpc::XrayAwareCalleeGlobal(obj)); | |||
32717 | if (global.Failed()) { | |||
32718 | return false; | |||
32719 | } | |||
32720 | ||||
32721 | bool arg0; | |||
32722 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
32723 | return false; | |||
32724 | } | |||
32725 | // NOTE: This assert does NOT call the function. | |||
32726 | static_assert(std::is_void_v<decltype(mozilla::dom::TestExampleInterface::StaticMethod(global, arg0))>, "Should be returning void here"); | |||
32727 | mozilla::dom::TestExampleInterface::StaticMethod(global, arg0); | |||
32728 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32728); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32728; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32729 | args.rval().setUndefined(); | |||
32730 | return true; | |||
32731 | } | |||
32732 | ||||
32733 | MOZ_CAN_RUN_SCRIPT static bool | |||
32734 | staticMethodWithContext(JSContext* cx, unsigned argc, JS::Value* vp) | |||
32735 | { | |||
32736 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32739( cx, "TestExampleInterface" , "staticMethodWithContext", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32737 | "TestExampleInterface", "staticMethodWithContext", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32739( cx, "TestExampleInterface" , "staticMethodWithContext", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32738 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32739( cx, "TestExampleInterface" , "staticMethodWithContext", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32739 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32739( cx, "TestExampleInterface" , "staticMethodWithContext", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32740 | ||||
32741 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
32742 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
32743 | ||||
32744 | if (!args.requireAtLeast(cx, "TestExampleInterface.staticMethodWithContext", 1)) { | |||
32745 | return false; | |||
32746 | } | |||
32747 | GlobalObject global(cx, xpc::XrayAwareCalleeGlobal(obj)); | |||
32748 | if (global.Failed()) { | |||
32749 | return false; | |||
32750 | } | |||
32751 | ||||
32752 | JS::Rooted<JS::Value> arg0(cx); | |||
32753 | arg0 = args[0]; | |||
32754 | // NOTE: This assert does NOT call the function. | |||
32755 | static_assert(std::is_void_v<decltype(mozilla::dom::TestExampleInterface::StaticMethodWithContext(global, arg0))>, "Should be returning void here"); | |||
32756 | mozilla::dom::TestExampleInterface::StaticMethodWithContext(global, arg0); | |||
32757 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32757); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32757; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32758 | args.rval().setUndefined(); | |||
32759 | return true; | |||
32760 | } | |||
32761 | ||||
32762 | MOZ_CAN_RUN_SCRIPT static bool | |||
32763 | get_staticDeprecatedAttribute(JSContext* cx, unsigned argc, JS::Value* vp) | |||
32764 | { | |||
32765 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32768( cx, "TestExampleInterface" , "staticDeprecatedAttribute", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32766 | "TestExampleInterface", "staticDeprecatedAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32768( cx, "TestExampleInterface" , "staticDeprecatedAttribute", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32767 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject32768( cx, "TestExampleInterface" , "staticDeprecatedAttribute", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32768 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32768( cx, "TestExampleInterface" , "staticDeprecatedAttribute", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
32769 | ||||
32770 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
32771 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
32772 | ||||
32773 | DeprecationWarning(cx, obj, DeprecatedOperations::eComponents); | |||
32774 | GlobalObject global(cx, xpc::XrayAwareCalleeGlobal(obj)); | |||
32775 | if (global.Failed()) { | |||
32776 | return false; | |||
32777 | } | |||
32778 | ||||
32779 | bool result(mozilla::dom::TestExampleInterface::StaticDeprecatedAttribute(global)); | |||
32780 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32780); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32780; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32781 | args.rval().setBoolean(result); | |||
32782 | return true; | |||
32783 | } | |||
32784 | ||||
32785 | MOZ_CAN_RUN_SCRIPT static bool | |||
32786 | set_staticDeprecatedAttribute(JSContext* cx, unsigned argc, JS::Value* vp) | |||
32787 | { | |||
32788 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32791( cx, "TestExampleInterface" , "staticDeprecatedAttribute", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32789 | "TestExampleInterface", "staticDeprecatedAttribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32791( cx, "TestExampleInterface" , "staticDeprecatedAttribute", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32790 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject32791( cx, "TestExampleInterface" , "staticDeprecatedAttribute", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32791 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32791( cx, "TestExampleInterface" , "staticDeprecatedAttribute", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
32792 | ||||
32793 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
32794 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
32795 | ||||
32796 | if (!args.requireAtLeast(cx, "staticDeprecatedAttribute setter", 1)) { | |||
32797 | return false; | |||
32798 | } | |||
32799 | DeprecationWarning(cx, obj, DeprecatedOperations::eComponents); | |||
32800 | GlobalObject global(cx, xpc::XrayAwareCalleeGlobal(obj)); | |||
32801 | if (global.Failed()) { | |||
32802 | return false; | |||
32803 | } | |||
32804 | ||||
32805 | bool arg0; | |||
32806 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
32807 | return false; | |||
32808 | } | |||
32809 | // NOTE: This assert does NOT call the function. | |||
32810 | static_assert(std::is_void_v<decltype(mozilla::dom::TestExampleInterface::SetStaticDeprecatedAttribute(global, arg0))>, "Should be returning void here"); | |||
32811 | mozilla::dom::TestExampleInterface::SetStaticDeprecatedAttribute(global, arg0); | |||
32812 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32812); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32812; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32813 | ||||
32814 | return true; | |||
32815 | } | |||
32816 | ||||
32817 | MOZ_CAN_RUN_SCRIPT static bool | |||
32818 | staticDeprecatedMethod(JSContext* cx, unsigned argc, JS::Value* vp) | |||
32819 | { | |||
32820 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32823( cx, "TestExampleInterface" , "staticDeprecatedMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32821 | "TestExampleInterface", "staticDeprecatedMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32823( cx, "TestExampleInterface" , "staticDeprecatedMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32822 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32823( cx, "TestExampleInterface" , "staticDeprecatedMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
32823 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32823( cx, "TestExampleInterface" , "staticDeprecatedMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
32824 | ||||
32825 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
32826 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
32827 | ||||
32828 | if (!args.requireAtLeast(cx, "TestExampleInterface.staticDeprecatedMethod", 1)) { | |||
32829 | return false; | |||
32830 | } | |||
32831 | DeprecationWarning(cx, obj, DeprecatedOperations::eComponents); | |||
32832 | GlobalObject global(cx, xpc::XrayAwareCalleeGlobal(obj)); | |||
32833 | if (global.Failed()) { | |||
32834 | return false; | |||
32835 | } | |||
32836 | ||||
32837 | bool arg0; | |||
32838 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
32839 | return false; | |||
32840 | } | |||
32841 | // NOTE: This assert does NOT call the function. | |||
32842 | static_assert(std::is_void_v<decltype(mozilla::dom::TestExampleInterface::StaticDeprecatedMethod(global, arg0))>, "Should be returning void here"); | |||
32843 | mozilla::dom::TestExampleInterface::StaticDeprecatedMethod(global, arg0); | |||
32844 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32844); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32844; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32845 | args.rval().setUndefined(); | |||
32846 | return true; | |||
32847 | } | |||
32848 | ||||
32849 | MOZ_CAN_RUN_SCRIPT static bool | |||
32850 | staticDeprecatedMethodWithContext(JSContext* cx, unsigned argc, JS::Value* vp) | |||
32851 | { | |||
32852 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32855( cx, "TestExampleInterface" , "staticDeprecatedMethodWithContext", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32853 | "TestExampleInterface", "staticDeprecatedMethodWithContext", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32855( cx, "TestExampleInterface" , "staticDeprecatedMethodWithContext", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32854 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32855( cx, "TestExampleInterface" , "staticDeprecatedMethodWithContext", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
32855 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32855( cx, "TestExampleInterface" , "staticDeprecatedMethodWithContext", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
32856 | ||||
32857 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
32858 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
32859 | ||||
32860 | if (!args.requireAtLeast(cx, "TestExampleInterface.staticDeprecatedMethodWithContext", 1)) { | |||
32861 | return false; | |||
32862 | } | |||
32863 | DeprecationWarning(cx, obj, DeprecatedOperations::eComponents); | |||
32864 | GlobalObject global(cx, xpc::XrayAwareCalleeGlobal(obj)); | |||
32865 | if (global.Failed()) { | |||
32866 | return false; | |||
32867 | } | |||
32868 | ||||
32869 | JS::Rooted<JS::Value> arg0(cx); | |||
32870 | arg0 = args[0]; | |||
32871 | // NOTE: This assert does NOT call the function. | |||
32872 | static_assert(std::is_void_v<decltype(mozilla::dom::TestExampleInterface::StaticDeprecatedMethodWithContext(global, arg0))>, "Should be returning void here"); | |||
32873 | mozilla::dom::TestExampleInterface::StaticDeprecatedMethodWithContext(global, arg0); | |||
32874 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32874); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32874; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32875 | args.rval().setUndefined(); | |||
32876 | return true; | |||
32877 | } | |||
32878 | ||||
32879 | MOZ_CAN_RUN_SCRIPT static bool | |||
32880 | overload1(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
32881 | { | |||
32882 | BindingCallContext cx(cx_, "TestExampleInterface.overload1"); | |||
32883 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32886( cx, "TestExampleInterface" , "overload1", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
32884 | "TestExampleInterface", "overload1", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32886( cx, "TestExampleInterface" , "overload1", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
32885 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32886( cx, "TestExampleInterface" , "overload1", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
32886 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32886( cx, "TestExampleInterface" , "overload1", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
32887 | ||||
32888 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32889 | unsigned argcount = std::min(args.length(), 2u); | |||
32890 | switch (argcount) { | |||
32891 | case 1: { | |||
32892 | NonNull<mozilla::dom::TestInterface> arg0; | |||
32893 | if (args[0].isObject()) { | |||
32894 | { | |||
32895 | // Our JSContext should be in the right global to do unwrapping in. | |||
32896 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
32897 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
32898 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
32899 | return false; | |||
32900 | } | |||
32901 | } | |||
32902 | } else { | |||
32903 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
32904 | return false; | |||
32905 | } | |||
32906 | bool result(MOZ_KnownLive(self)(self)->Overload1(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0)))); | |||
32907 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32907); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32907; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32908 | args.rval().setBoolean(result); | |||
32909 | return true; | |||
32910 | break; | |||
32911 | } | |||
32912 | case 2: { | |||
32913 | binding_detail::FakeString<char16_t> arg0; | |||
32914 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
32915 | return false; | |||
32916 | } | |||
32917 | NonNull<mozilla::dom::TestInterface> arg1; | |||
32918 | if (args[1].isObject()) { | |||
32919 | { | |||
32920 | // Our JSContext should be in the right global to do unwrapping in. | |||
32921 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[1], arg1, cx); | |||
32922 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
32923 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 2", "TestInterface"); | |||
32924 | return false; | |||
32925 | } | |||
32926 | } | |||
32927 | } else { | |||
32928 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 2"); | |||
32929 | return false; | |||
32930 | } | |||
32931 | auto result(StrongOrRawPtr<mozilla::dom::TestInterface>(MOZ_KnownLive(self)(self)->Overload1(NonNullHelper(Constify(arg0)), MOZ_KnownLive(NonNullHelper(arg1))(NonNullHelper(arg1))))); | |||
32932 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32932); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32932; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32933 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
32934 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32934); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 32934; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
32935 | return false; | |||
32936 | } | |||
32937 | return true; | |||
32938 | break; | |||
32939 | } | |||
32940 | default: { | |||
32941 | // Using nsPrintfCString here would require including that | |||
32942 | // header. Let's not worry about it. | |||
32943 | nsAutoCString argCountStr; | |||
32944 | argCountStr.AppendPrintf("%u", args.length()); | |||
32945 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
32946 | } | |||
32947 | } | |||
32948 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 32948); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 32948; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
32949 | return false; | |||
32950 | } | |||
32951 | ||||
32952 | static const JSJitInfo overload1_methodinfo = { | |||
32953 | { (JSJitGetterOp)overload1 }, | |||
32954 | { prototypes::id::TestExampleInterface }, | |||
32955 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
32956 | JSJitInfo::Method, | |||
32957 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
32958 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
32959 | false, /* isInfallible. False in setters. */ | |||
32960 | false, /* isMovable. Not relevant for setters. */ | |||
32961 | false, /* isEliminatable. Not relevant for setters. */ | |||
32962 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
32963 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
32964 | false, /* isTypedMethod. Only relevant for methods. */ | |||
32965 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
32966 | }; | |||
32967 | ||||
32968 | MOZ_CAN_RUN_SCRIPT static bool | |||
32969 | overload2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
32970 | { | |||
32971 | BindingCallContext cx(cx_, "TestExampleInterface.overload2"); | |||
32972 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject32975( cx, "TestExampleInterface" , "overload2", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
32973 | "TestExampleInterface", "overload2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject32975( cx, "TestExampleInterface" , "overload2", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
32974 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject32975( cx, "TestExampleInterface" , "overload2", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
32975 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject32975( cx, "TestExampleInterface" , "overload2", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
32976 | ||||
32977 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
32978 | unsigned argcount = std::min(args.length(), 1u); | |||
32979 | switch (argcount) { | |||
32980 | case 0: { | |||
32981 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
32982 | if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1", false)) { | |||
32983 | return false; | |||
32984 | } | |||
32985 | // NOTE: This assert does NOT call the function. | |||
32986 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload2(cx, Constify(arg0)))>, "Should be returning void here"); | |||
32987 | MOZ_KnownLive(self)(self)->Overload2(cx, Constify(arg0)); | |||
32988 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 32988); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 32988; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
32989 | args.rval().setUndefined(); | |||
32990 | return true; | |||
32991 | break; | |||
32992 | } | |||
32993 | case 1: { | |||
32994 | if (args[0].isNullOrUndefined()) { | |||
32995 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
32996 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
32997 | return false; | |||
32998 | } | |||
32999 | // NOTE: This assert does NOT call the function. | |||
33000 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload2(cx, Constify(arg0)))>, "Should be returning void here"); | |||
33001 | MOZ_KnownLive(self)(self)->Overload2(cx, Constify(arg0)); | |||
33002 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33002); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33002; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33003 | args.rval().setUndefined(); | |||
33004 | return true; | |||
33005 | } | |||
33006 | if (args[0].isObject()) { | |||
33007 | do { | |||
33008 | NonNull<mozilla::dom::TestInterface> arg0; | |||
33009 | { | |||
33010 | // Our JSContext should be in the right global to do unwrapping in. | |||
33011 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
33012 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
33013 | break; | |||
33014 | } | |||
33015 | } | |||
33016 | // NOTE: This assert does NOT call the function. | |||
33017 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload2(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
33018 | MOZ_KnownLive(self)(self)->Overload2(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
33019 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33019); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33019; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33020 | args.rval().setUndefined(); | |||
33021 | return true; | |||
33022 | } while (false); | |||
33023 | do { | |||
33024 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
33025 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
33026 | return false; | |||
33027 | } | |||
33028 | // NOTE: This assert does NOT call the function. | |||
33029 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload2(cx, Constify(arg0)))>, "Should be returning void here"); | |||
33030 | MOZ_KnownLive(self)(self)->Overload2(cx, Constify(arg0)); | |||
33031 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33031); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33031; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33032 | args.rval().setUndefined(); | |||
33033 | return true; | |||
33034 | } while (false); | |||
33035 | } | |||
33036 | if (args[0].isBoolean()) { | |||
33037 | bool arg0; | |||
33038 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33039 | return false; | |||
33040 | } | |||
33041 | // NOTE: This assert does NOT call the function. | |||
33042 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload2(arg0))>, "Should be returning void here"); | |||
33043 | MOZ_KnownLive(self)(self)->Overload2(arg0); | |||
33044 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33044); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33044; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33045 | args.rval().setUndefined(); | |||
33046 | return true; | |||
33047 | } | |||
33048 | binding_detail::FakeString<char16_t> arg0; | |||
33049 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
33050 | return false; | |||
33051 | } | |||
33052 | // NOTE: This assert does NOT call the function. | |||
33053 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload2(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
33054 | MOZ_KnownLive(self)(self)->Overload2(NonNullHelper(Constify(arg0))); | |||
33055 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33055); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33055; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33056 | args.rval().setUndefined(); | |||
33057 | return true; | |||
33058 | break; | |||
33059 | } | |||
33060 | default: { | |||
33061 | // Using nsPrintfCString here would require including that | |||
33062 | // header. Let's not worry about it. | |||
33063 | nsAutoCString argCountStr; | |||
33064 | argCountStr.AppendPrintf("%u", args.length()); | |||
33065 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33066 | } | |||
33067 | } | |||
33068 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33068); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33068; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33069 | return false; | |||
33070 | } | |||
33071 | ||||
33072 | static const JSJitInfo overload2_methodinfo = { | |||
33073 | { (JSJitGetterOp)overload2 }, | |||
33074 | { prototypes::id::TestExampleInterface }, | |||
33075 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33076 | JSJitInfo::Method, | |||
33077 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33078 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33079 | false, /* isInfallible. False in setters. */ | |||
33080 | false, /* isMovable. Not relevant for setters. */ | |||
33081 | false, /* isEliminatable. Not relevant for setters. */ | |||
33082 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33083 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33084 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33085 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33086 | }; | |||
33087 | ||||
33088 | MOZ_CAN_RUN_SCRIPT static bool | |||
33089 | overload3(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33090 | { | |||
33091 | BindingCallContext cx(cx_, "TestExampleInterface.overload3"); | |||
33092 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33095( cx, "TestExampleInterface" , "overload3", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33093 | "TestExampleInterface", "overload3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33095( cx, "TestExampleInterface" , "overload3", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33094 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33095( cx, "TestExampleInterface" , "overload3", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33095 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33095( cx, "TestExampleInterface" , "overload3", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
33096 | ||||
33097 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33098 | unsigned argcount = std::min(args.length(), 1u); | |||
33099 | switch (argcount) { | |||
33100 | case 1: { | |||
33101 | if (args[0].isObject()) { | |||
33102 | do { | |||
33103 | NonNull<mozilla::dom::TestInterface> arg0; | |||
33104 | { | |||
33105 | // Our JSContext should be in the right global to do unwrapping in. | |||
33106 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
33107 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
33108 | break; | |||
33109 | } | |||
33110 | } | |||
33111 | // NOTE: This assert does NOT call the function. | |||
33112 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload3(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
33113 | MOZ_KnownLive(self)(self)->Overload3(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
33114 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33114); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33114; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33115 | args.rval().setUndefined(); | |||
33116 | return true; | |||
33117 | } while (false); | |||
33118 | do { | |||
33119 | RootedCallback<OwningNonNull<binding_detail::FastTestCallback>> arg0(cx); | |||
33120 | if (JS::IsCallable(&args[0].toObject())) { | |||
33121 | { // scope for tempRoot and tempGlobalRoot if needed | |||
33122 | arg0 = new binding_detail::FastTestCallback(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
33123 | } | |||
33124 | } else { | |||
33125 | break; | |||
33126 | } | |||
33127 | // NOTE: This assert does NOT call the function. | |||
33128 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload3(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
33129 | MOZ_KnownLive(self)(self)->Overload3(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
33130 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33130); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33130; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33131 | args.rval().setUndefined(); | |||
33132 | return true; | |||
33133 | } while (false); | |||
33134 | } | |||
33135 | bool arg0; | |||
33136 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33137 | return false; | |||
33138 | } | |||
33139 | // NOTE: This assert does NOT call the function. | |||
33140 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload3(arg0))>, "Should be returning void here"); | |||
33141 | MOZ_KnownLive(self)(self)->Overload3(arg0); | |||
33142 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33142); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33142; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33143 | args.rval().setUndefined(); | |||
33144 | return true; | |||
33145 | break; | |||
33146 | } | |||
33147 | default: { | |||
33148 | // Using nsPrintfCString here would require including that | |||
33149 | // header. Let's not worry about it. | |||
33150 | nsAutoCString argCountStr; | |||
33151 | argCountStr.AppendPrintf("%u", args.length()); | |||
33152 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33153 | } | |||
33154 | } | |||
33155 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33155); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33155; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33156 | return false; | |||
33157 | } | |||
33158 | ||||
33159 | static const JSJitInfo overload3_methodinfo = { | |||
33160 | { (JSJitGetterOp)overload3 }, | |||
33161 | { prototypes::id::TestExampleInterface }, | |||
33162 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33163 | JSJitInfo::Method, | |||
33164 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33165 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33166 | false, /* isInfallible. False in setters. */ | |||
33167 | false, /* isMovable. Not relevant for setters. */ | |||
33168 | false, /* isEliminatable. Not relevant for setters. */ | |||
33169 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33170 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33171 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33172 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33173 | }; | |||
33174 | ||||
33175 | MOZ_CAN_RUN_SCRIPT static bool | |||
33176 | overload4(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33177 | { | |||
33178 | BindingCallContext cx(cx_, "TestExampleInterface.overload4"); | |||
33179 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33182( cx, "TestExampleInterface" , "overload4", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33180 | "TestExampleInterface", "overload4", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33182( cx, "TestExampleInterface" , "overload4", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33181 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33182( cx, "TestExampleInterface" , "overload4", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33182 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33182( cx, "TestExampleInterface" , "overload4", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
33183 | ||||
33184 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33185 | unsigned argcount = std::min(args.length(), 1u); | |||
33186 | switch (argcount) { | |||
33187 | case 1: { | |||
33188 | if (args[0].isObject()) { | |||
33189 | do { | |||
33190 | NonNull<mozilla::dom::TestInterface> arg0; | |||
33191 | { | |||
33192 | // Our JSContext should be in the right global to do unwrapping in. | |||
33193 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
33194 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
33195 | break; | |||
33196 | } | |||
33197 | } | |||
33198 | // NOTE: This assert does NOT call the function. | |||
33199 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload4(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
33200 | MOZ_KnownLive(self)(self)->Overload4(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
33201 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33201); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33201; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33202 | args.rval().setUndefined(); | |||
33203 | return true; | |||
33204 | } while (false); | |||
33205 | do { | |||
33206 | RootedCallback<OwningNonNull<binding_detail::FastTestCallbackInterface>> arg0(cx); | |||
33207 | { // scope for tempRoot and tempGlobalRoot if needed | |||
33208 | arg0 = new binding_detail::FastTestCallbackInterface(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
33209 | } | |||
33210 | // NOTE: This assert does NOT call the function. | |||
33211 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload4(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
33212 | MOZ_KnownLive(self)(self)->Overload4(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
33213 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33213); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33213; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33214 | args.rval().setUndefined(); | |||
33215 | return true; | |||
33216 | } while (false); | |||
33217 | } | |||
33218 | binding_detail::FakeString<char16_t> arg0; | |||
33219 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
33220 | return false; | |||
33221 | } | |||
33222 | // NOTE: This assert does NOT call the function. | |||
33223 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload4(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
33224 | MOZ_KnownLive(self)(self)->Overload4(NonNullHelper(Constify(arg0))); | |||
33225 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33225); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33225; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33226 | args.rval().setUndefined(); | |||
33227 | return true; | |||
33228 | break; | |||
33229 | } | |||
33230 | default: { | |||
33231 | // Using nsPrintfCString here would require including that | |||
33232 | // header. Let's not worry about it. | |||
33233 | nsAutoCString argCountStr; | |||
33234 | argCountStr.AppendPrintf("%u", args.length()); | |||
33235 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33236 | } | |||
33237 | } | |||
33238 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33238); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33238; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33239 | return false; | |||
33240 | } | |||
33241 | ||||
33242 | static const JSJitInfo overload4_methodinfo = { | |||
33243 | { (JSJitGetterOp)overload4 }, | |||
33244 | { prototypes::id::TestExampleInterface }, | |||
33245 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33246 | JSJitInfo::Method, | |||
33247 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33248 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33249 | false, /* isInfallible. False in setters. */ | |||
33250 | false, /* isMovable. Not relevant for setters. */ | |||
33251 | false, /* isEliminatable. Not relevant for setters. */ | |||
33252 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33253 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33254 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33255 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33256 | }; | |||
33257 | ||||
33258 | MOZ_CAN_RUN_SCRIPT static bool | |||
33259 | overload5(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33260 | { | |||
33261 | BindingCallContext cx(cx_, "TestExampleInterface.overload5"); | |||
33262 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33265( cx, "TestExampleInterface" , "overload5", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33263 | "TestExampleInterface", "overload5", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33265( cx, "TestExampleInterface" , "overload5", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33264 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33265( cx, "TestExampleInterface" , "overload5", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33265 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33265( cx, "TestExampleInterface" , "overload5", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
33266 | ||||
33267 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33268 | unsigned argcount = std::min(args.length(), 1u); | |||
33269 | switch (argcount) { | |||
33270 | case 1: { | |||
33271 | if (args[0].isNumber()) { | |||
33272 | int32_t arg0; | |||
33273 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33274 | return false; | |||
33275 | } | |||
33276 | // NOTE: This assert does NOT call the function. | |||
33277 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload5(arg0))>, "Should be returning void here"); | |||
33278 | MOZ_KnownLive(self)(self)->Overload5(arg0); | |||
33279 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33279); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33279; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33280 | args.rval().setUndefined(); | |||
33281 | return true; | |||
33282 | } | |||
33283 | TestEnum arg0; | |||
33284 | { | |||
33285 | int index; | |||
33286 | if (!binding_detail::FindEnumStringIndex<true>(cx, args[0], | |||
33287 | binding_detail::EnumStrings<TestEnum>::Values, | |||
33288 | "TestEnum", "argument 1", | |||
33289 | &index)) { | |||
33290 | return false; | |||
33291 | } | |||
33292 | MOZ_ASSERT(index >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index >= 0", "../TestExampleGenBinding.cpp", 33292); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "index >= 0" ")"); do { *((volatile int* )__null) = 33292; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
33293 | arg0 = static_cast<TestEnum>(index); | |||
33294 | } | |||
33295 | // NOTE: This assert does NOT call the function. | |||
33296 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload5(arg0))>, "Should be returning void here"); | |||
33297 | MOZ_KnownLive(self)(self)->Overload5(arg0); | |||
33298 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33298); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33298; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33299 | args.rval().setUndefined(); | |||
33300 | return true; | |||
33301 | break; | |||
33302 | } | |||
33303 | default: { | |||
33304 | // Using nsPrintfCString here would require including that | |||
33305 | // header. Let's not worry about it. | |||
33306 | nsAutoCString argCountStr; | |||
33307 | argCountStr.AppendPrintf("%u", args.length()); | |||
33308 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33309 | } | |||
33310 | } | |||
33311 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33311); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33311; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33312 | return false; | |||
33313 | } | |||
33314 | ||||
33315 | static const JSJitInfo overload5_methodinfo = { | |||
33316 | { (JSJitGetterOp)overload5 }, | |||
33317 | { prototypes::id::TestExampleInterface }, | |||
33318 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33319 | JSJitInfo::Method, | |||
33320 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33321 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33322 | false, /* isInfallible. False in setters. */ | |||
33323 | false, /* isMovable. Not relevant for setters. */ | |||
33324 | false, /* isEliminatable. Not relevant for setters. */ | |||
33325 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33326 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33327 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33328 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33329 | }; | |||
33330 | ||||
33331 | MOZ_CAN_RUN_SCRIPT static bool | |||
33332 | overload6(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33333 | { | |||
33334 | BindingCallContext cx(cx_, "TestExampleInterface.overload6"); | |||
33335 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33338( cx, "TestExampleInterface" , "overload6", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33336 | "TestExampleInterface", "overload6", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33338( cx, "TestExampleInterface" , "overload6", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33337 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33338( cx, "TestExampleInterface" , "overload6", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33338 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33338( cx, "TestExampleInterface" , "overload6", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
33339 | ||||
33340 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33341 | unsigned argcount = std::min(args.length(), 1u); | |||
33342 | switch (argcount) { | |||
33343 | case 1: { | |||
33344 | if (args[0].isBoolean()) { | |||
33345 | bool arg0; | |||
33346 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33347 | return false; | |||
33348 | } | |||
33349 | // NOTE: This assert does NOT call the function. | |||
33350 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload6(arg0))>, "Should be returning void here"); | |||
33351 | MOZ_KnownLive(self)(self)->Overload6(arg0); | |||
33352 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33352); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33352; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33353 | args.rval().setUndefined(); | |||
33354 | return true; | |||
33355 | } | |||
33356 | int32_t arg0; | |||
33357 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33358 | return false; | |||
33359 | } | |||
33360 | // NOTE: This assert does NOT call the function. | |||
33361 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload6(arg0))>, "Should be returning void here"); | |||
33362 | MOZ_KnownLive(self)(self)->Overload6(arg0); | |||
33363 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33363); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33363; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33364 | args.rval().setUndefined(); | |||
33365 | return true; | |||
33366 | break; | |||
33367 | } | |||
33368 | default: { | |||
33369 | // Using nsPrintfCString here would require including that | |||
33370 | // header. Let's not worry about it. | |||
33371 | nsAutoCString argCountStr; | |||
33372 | argCountStr.AppendPrintf("%u", args.length()); | |||
33373 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33374 | } | |||
33375 | } | |||
33376 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33376); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33376; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33377 | return false; | |||
33378 | } | |||
33379 | ||||
33380 | static const JSJitInfo overload6_methodinfo = { | |||
33381 | { (JSJitGetterOp)overload6 }, | |||
33382 | { prototypes::id::TestExampleInterface }, | |||
33383 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33384 | JSJitInfo::Method, | |||
33385 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33386 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33387 | false, /* isInfallible. False in setters. */ | |||
33388 | false, /* isMovable. Not relevant for setters. */ | |||
33389 | false, /* isEliminatable. Not relevant for setters. */ | |||
33390 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33391 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33392 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33393 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33394 | }; | |||
33395 | ||||
33396 | MOZ_CAN_RUN_SCRIPT static bool | |||
33397 | overload7(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33398 | { | |||
33399 | BindingCallContext cx(cx_, "TestExampleInterface.overload7"); | |||
33400 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33403( cx, "TestExampleInterface" , "overload7", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33401 | "TestExampleInterface", "overload7", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33403( cx, "TestExampleInterface" , "overload7", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33402 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33403( cx, "TestExampleInterface" , "overload7", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33403 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33403( cx, "TestExampleInterface" , "overload7", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
33404 | ||||
33405 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33406 | unsigned argcount = std::min(args.length(), 1u); | |||
33407 | switch (argcount) { | |||
33408 | case 1: { | |||
33409 | if (args[0].isBoolean()) { | |||
33410 | bool arg0; | |||
33411 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33412 | return false; | |||
33413 | } | |||
33414 | // NOTE: This assert does NOT call the function. | |||
33415 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload7(arg0))>, "Should be returning void here"); | |||
33416 | MOZ_KnownLive(self)(self)->Overload7(arg0); | |||
33417 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33417); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33417; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33418 | args.rval().setUndefined(); | |||
33419 | return true; | |||
33420 | } | |||
33421 | if (args[0].isNumber()) { | |||
33422 | int32_t arg0; | |||
33423 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33424 | return false; | |||
33425 | } | |||
33426 | // NOTE: This assert does NOT call the function. | |||
33427 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload7(arg0))>, "Should be returning void here"); | |||
33428 | MOZ_KnownLive(self)(self)->Overload7(arg0); | |||
33429 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33429); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33429; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33430 | args.rval().setUndefined(); | |||
33431 | return true; | |||
33432 | } | |||
33433 | nsCString arg0; | |||
33434 | if (!ConvertJSValueToByteString(cx, args[0], false, "argument 1", arg0)) { | |||
33435 | return false; | |||
33436 | } | |||
33437 | // NOTE: This assert does NOT call the function. | |||
33438 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload7(Constify(arg0)))>, "Should be returning void here"); | |||
33439 | MOZ_KnownLive(self)(self)->Overload7(Constify(arg0)); | |||
33440 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33440); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33440; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33441 | args.rval().setUndefined(); | |||
33442 | return true; | |||
33443 | break; | |||
33444 | } | |||
33445 | default: { | |||
33446 | // Using nsPrintfCString here would require including that | |||
33447 | // header. Let's not worry about it. | |||
33448 | nsAutoCString argCountStr; | |||
33449 | argCountStr.AppendPrintf("%u", args.length()); | |||
33450 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33451 | } | |||
33452 | } | |||
33453 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33453); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33453; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33454 | return false; | |||
33455 | } | |||
33456 | ||||
33457 | static const JSJitInfo overload7_methodinfo = { | |||
33458 | { (JSJitGetterOp)overload7 }, | |||
33459 | { prototypes::id::TestExampleInterface }, | |||
33460 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33461 | JSJitInfo::Method, | |||
33462 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33463 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33464 | false, /* isInfallible. False in setters. */ | |||
33465 | false, /* isMovable. Not relevant for setters. */ | |||
33466 | false, /* isEliminatable. Not relevant for setters. */ | |||
33467 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33468 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33469 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33470 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33471 | }; | |||
33472 | ||||
33473 | MOZ_CAN_RUN_SCRIPT static bool | |||
33474 | overload8(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33475 | { | |||
33476 | BindingCallContext cx(cx_, "TestExampleInterface.overload8"); | |||
33477 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33480( cx, "TestExampleInterface" , "overload8", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33478 | "TestExampleInterface", "overload8", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33480( cx, "TestExampleInterface" , "overload8", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33479 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33480( cx, "TestExampleInterface" , "overload8", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33480 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33480( cx, "TestExampleInterface" , "overload8", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
33481 | ||||
33482 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33483 | unsigned argcount = std::min(args.length(), 1u); | |||
33484 | switch (argcount) { | |||
33485 | case 1: { | |||
33486 | if (args[0].isObject()) { | |||
33487 | do { | |||
33488 | NonNull<mozilla::dom::TestInterface> arg0; | |||
33489 | { | |||
33490 | // Our JSContext should be in the right global to do unwrapping in. | |||
33491 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
33492 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
33493 | break; | |||
33494 | } | |||
33495 | } | |||
33496 | // NOTE: This assert does NOT call the function. | |||
33497 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload8(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
33498 | MOZ_KnownLive(self)(self)->Overload8(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
33499 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33499); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33499; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33500 | args.rval().setUndefined(); | |||
33501 | return true; | |||
33502 | } while (false); | |||
33503 | } | |||
33504 | int32_t arg0; | |||
33505 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33506 | return false; | |||
33507 | } | |||
33508 | // NOTE: This assert does NOT call the function. | |||
33509 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload8(arg0))>, "Should be returning void here"); | |||
33510 | MOZ_KnownLive(self)(self)->Overload8(arg0); | |||
33511 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33511); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33511; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33512 | args.rval().setUndefined(); | |||
33513 | return true; | |||
33514 | break; | |||
33515 | } | |||
33516 | default: { | |||
33517 | // Using nsPrintfCString here would require including that | |||
33518 | // header. Let's not worry about it. | |||
33519 | nsAutoCString argCountStr; | |||
33520 | argCountStr.AppendPrintf("%u", args.length()); | |||
33521 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33522 | } | |||
33523 | } | |||
33524 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33524); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33524; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33525 | return false; | |||
33526 | } | |||
33527 | ||||
33528 | static const JSJitInfo overload8_methodinfo = { | |||
33529 | { (JSJitGetterOp)overload8 }, | |||
33530 | { prototypes::id::TestExampleInterface }, | |||
33531 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33532 | JSJitInfo::Method, | |||
33533 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33534 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33535 | false, /* isInfallible. False in setters. */ | |||
33536 | false, /* isMovable. Not relevant for setters. */ | |||
33537 | false, /* isEliminatable. Not relevant for setters. */ | |||
33538 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33539 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33540 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33541 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33542 | }; | |||
33543 | ||||
33544 | MOZ_CAN_RUN_SCRIPT static bool | |||
33545 | overload9(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33546 | { | |||
33547 | BindingCallContext cx(cx_, "TestExampleInterface.overload9"); | |||
33548 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33551( cx, "TestExampleInterface" , "overload9", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33549 | "TestExampleInterface", "overload9", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33551( cx, "TestExampleInterface" , "overload9", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33550 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33551( cx, "TestExampleInterface" , "overload9", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
33551 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33551( cx, "TestExampleInterface" , "overload9", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
33552 | ||||
33553 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33554 | unsigned argcount = std::min(args.length(), 1u); | |||
33555 | switch (argcount) { | |||
33556 | case 1: { | |||
33557 | if (args[0].isNullOrUndefined()) { | |||
33558 | Nullable<int32_t> arg0; | |||
33559 | if (args[0].isNullOrUndefined()) { | |||
33560 | arg0.SetNull(); | |||
33561 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
33562 | return false; | |||
33563 | } | |||
33564 | // NOTE: This assert does NOT call the function. | |||
33565 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload9(Constify(arg0)))>, "Should be returning void here"); | |||
33566 | MOZ_KnownLive(self)(self)->Overload9(Constify(arg0)); | |||
33567 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33567); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33567; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33568 | args.rval().setUndefined(); | |||
33569 | return true; | |||
33570 | } | |||
33571 | if (args[0].isNumber()) { | |||
33572 | Nullable<int32_t> arg0; | |||
33573 | if (args[0].isNullOrUndefined()) { | |||
33574 | arg0.SetNull(); | |||
33575 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
33576 | return false; | |||
33577 | } | |||
33578 | // NOTE: This assert does NOT call the function. | |||
33579 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload9(Constify(arg0)))>, "Should be returning void here"); | |||
33580 | MOZ_KnownLive(self)(self)->Overload9(Constify(arg0)); | |||
33581 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33581); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33581; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33582 | args.rval().setUndefined(); | |||
33583 | return true; | |||
33584 | } | |||
33585 | binding_detail::FakeString<char16_t> arg0; | |||
33586 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
33587 | return false; | |||
33588 | } | |||
33589 | // NOTE: This assert does NOT call the function. | |||
33590 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload9(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
33591 | MOZ_KnownLive(self)(self)->Overload9(NonNullHelper(Constify(arg0))); | |||
33592 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33592); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33592; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33593 | args.rval().setUndefined(); | |||
33594 | return true; | |||
33595 | break; | |||
33596 | } | |||
33597 | default: { | |||
33598 | // Using nsPrintfCString here would require including that | |||
33599 | // header. Let's not worry about it. | |||
33600 | nsAutoCString argCountStr; | |||
33601 | argCountStr.AppendPrintf("%u", args.length()); | |||
33602 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33603 | } | |||
33604 | } | |||
33605 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33605); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33605; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33606 | return false; | |||
33607 | } | |||
33608 | ||||
33609 | static const JSJitInfo overload9_methodinfo = { | |||
33610 | { (JSJitGetterOp)overload9 }, | |||
33611 | { prototypes::id::TestExampleInterface }, | |||
33612 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33613 | JSJitInfo::Method, | |||
33614 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33615 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33616 | false, /* isInfallible. False in setters. */ | |||
33617 | false, /* isMovable. Not relevant for setters. */ | |||
33618 | false, /* isEliminatable. Not relevant for setters. */ | |||
33619 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33620 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33621 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33622 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33623 | }; | |||
33624 | ||||
33625 | MOZ_CAN_RUN_SCRIPT static bool | |||
33626 | overload10(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33627 | { | |||
33628 | BindingCallContext cx(cx_, "TestExampleInterface.overload10"); | |||
33629 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33632( cx, "TestExampleInterface" , "overload10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33630 | "TestExampleInterface", "overload10", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33632( cx, "TestExampleInterface" , "overload10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33631 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33632( cx, "TestExampleInterface" , "overload10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33632 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33632( cx, "TestExampleInterface" , "overload10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
33633 | ||||
33634 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33635 | unsigned argcount = std::min(args.length(), 1u); | |||
33636 | switch (argcount) { | |||
33637 | case 1: { | |||
33638 | if (args[0].isObject()) { | |||
33639 | do { | |||
33640 | JS::Rooted<JSObject*> arg0(cx); | |||
33641 | arg0 = &args[0].toObject(); | |||
33642 | // NOTE: This assert does NOT call the function. | |||
33643 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload10(cx, arg0))>, "Should be returning void here"); | |||
33644 | MOZ_KnownLive(self)(self)->Overload10(cx, arg0); | |||
33645 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33645); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33645; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33646 | args.rval().setUndefined(); | |||
33647 | return true; | |||
33648 | } while (false); | |||
33649 | } | |||
33650 | Nullable<int32_t> arg0; | |||
33651 | if (args[0].isNullOrUndefined()) { | |||
33652 | arg0.SetNull(); | |||
33653 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
33654 | return false; | |||
33655 | } | |||
33656 | // NOTE: This assert does NOT call the function. | |||
33657 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload10(Constify(arg0)))>, "Should be returning void here"); | |||
33658 | MOZ_KnownLive(self)(self)->Overload10(Constify(arg0)); | |||
33659 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33659); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33659; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33660 | args.rval().setUndefined(); | |||
33661 | return true; | |||
33662 | break; | |||
33663 | } | |||
33664 | default: { | |||
33665 | // Using nsPrintfCString here would require including that | |||
33666 | // header. Let's not worry about it. | |||
33667 | nsAutoCString argCountStr; | |||
33668 | argCountStr.AppendPrintf("%u", args.length()); | |||
33669 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33670 | } | |||
33671 | } | |||
33672 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33672); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33672; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33673 | return false; | |||
33674 | } | |||
33675 | ||||
33676 | static const JSJitInfo overload10_methodinfo = { | |||
33677 | { (JSJitGetterOp)overload10 }, | |||
33678 | { prototypes::id::TestExampleInterface }, | |||
33679 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33680 | JSJitInfo::Method, | |||
33681 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33682 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33683 | false, /* isInfallible. False in setters. */ | |||
33684 | false, /* isMovable. Not relevant for setters. */ | |||
33685 | false, /* isEliminatable. Not relevant for setters. */ | |||
33686 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33687 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33688 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33689 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33690 | }; | |||
33691 | ||||
33692 | MOZ_CAN_RUN_SCRIPT static bool | |||
33693 | overload11(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33694 | { | |||
33695 | BindingCallContext cx(cx_, "TestExampleInterface.overload11"); | |||
33696 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33699( cx, "TestExampleInterface" , "overload11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33697 | "TestExampleInterface", "overload11", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33699( cx, "TestExampleInterface" , "overload11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33698 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33699( cx, "TestExampleInterface" , "overload11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33699 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33699( cx, "TestExampleInterface" , "overload11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
33700 | ||||
33701 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33702 | unsigned argcount = std::min(args.length(), 1u); | |||
33703 | switch (argcount) { | |||
33704 | case 1: { | |||
33705 | if (args[0].isNumber()) { | |||
33706 | int32_t arg0; | |||
33707 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33708 | return false; | |||
33709 | } | |||
33710 | // NOTE: This assert does NOT call the function. | |||
33711 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload11(arg0))>, "Should be returning void here"); | |||
33712 | MOZ_KnownLive(self)(self)->Overload11(arg0); | |||
33713 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33713); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33713; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33714 | args.rval().setUndefined(); | |||
33715 | return true; | |||
33716 | } | |||
33717 | binding_detail::FakeString<char16_t> arg0; | |||
33718 | if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) { | |||
33719 | return false; | |||
33720 | } | |||
33721 | // NOTE: This assert does NOT call the function. | |||
33722 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload11(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
33723 | MOZ_KnownLive(self)(self)->Overload11(NonNullHelper(Constify(arg0))); | |||
33724 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33724); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33724; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33725 | args.rval().setUndefined(); | |||
33726 | return true; | |||
33727 | break; | |||
33728 | } | |||
33729 | default: { | |||
33730 | // Using nsPrintfCString here would require including that | |||
33731 | // header. Let's not worry about it. | |||
33732 | nsAutoCString argCountStr; | |||
33733 | argCountStr.AppendPrintf("%u", args.length()); | |||
33734 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33735 | } | |||
33736 | } | |||
33737 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33737); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33737; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33738 | return false; | |||
33739 | } | |||
33740 | ||||
33741 | static const JSJitInfo overload11_methodinfo = { | |||
33742 | { (JSJitGetterOp)overload11 }, | |||
33743 | { prototypes::id::TestExampleInterface }, | |||
33744 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33745 | JSJitInfo::Method, | |||
33746 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33747 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33748 | false, /* isInfallible. False in setters. */ | |||
33749 | false, /* isMovable. Not relevant for setters. */ | |||
33750 | false, /* isEliminatable. Not relevant for setters. */ | |||
33751 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33752 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33753 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33754 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33755 | }; | |||
33756 | ||||
33757 | MOZ_CAN_RUN_SCRIPT static bool | |||
33758 | overload12(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33759 | { | |||
33760 | BindingCallContext cx(cx_, "TestExampleInterface.overload12"); | |||
33761 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33764( cx, "TestExampleInterface" , "overload12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33762 | "TestExampleInterface", "overload12", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33764( cx, "TestExampleInterface" , "overload12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33763 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33764( cx, "TestExampleInterface" , "overload12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33764 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33764( cx, "TestExampleInterface" , "overload12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
33765 | ||||
33766 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33767 | unsigned argcount = std::min(args.length(), 1u); | |||
33768 | switch (argcount) { | |||
33769 | case 1: { | |||
33770 | if (args[0].isNullOrUndefined()) { | |||
33771 | Nullable<bool> arg0; | |||
33772 | if (args[0].isNullOrUndefined()) { | |||
33773 | arg0.SetNull(); | |||
33774 | } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
33775 | return false; | |||
33776 | } | |||
33777 | // NOTE: This assert does NOT call the function. | |||
33778 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload12(Constify(arg0)))>, "Should be returning void here"); | |||
33779 | MOZ_KnownLive(self)(self)->Overload12(Constify(arg0)); | |||
33780 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33780); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33780; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33781 | args.rval().setUndefined(); | |||
33782 | return true; | |||
33783 | } | |||
33784 | if (args[0].isBoolean()) { | |||
33785 | Nullable<bool> arg0; | |||
33786 | if (args[0].isNullOrUndefined()) { | |||
33787 | arg0.SetNull(); | |||
33788 | } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
33789 | return false; | |||
33790 | } | |||
33791 | // NOTE: This assert does NOT call the function. | |||
33792 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload12(Constify(arg0)))>, "Should be returning void here"); | |||
33793 | MOZ_KnownLive(self)(self)->Overload12(Constify(arg0)); | |||
33794 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33794); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33794; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33795 | args.rval().setUndefined(); | |||
33796 | return true; | |||
33797 | } | |||
33798 | int32_t arg0; | |||
33799 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33800 | return false; | |||
33801 | } | |||
33802 | // NOTE: This assert does NOT call the function. | |||
33803 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload12(arg0))>, "Should be returning void here"); | |||
33804 | MOZ_KnownLive(self)(self)->Overload12(arg0); | |||
33805 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33805); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33805; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33806 | args.rval().setUndefined(); | |||
33807 | return true; | |||
33808 | break; | |||
33809 | } | |||
33810 | default: { | |||
33811 | // Using nsPrintfCString here would require including that | |||
33812 | // header. Let's not worry about it. | |||
33813 | nsAutoCString argCountStr; | |||
33814 | argCountStr.AppendPrintf("%u", args.length()); | |||
33815 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33816 | } | |||
33817 | } | |||
33818 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33818); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33818; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33819 | return false; | |||
33820 | } | |||
33821 | ||||
33822 | static const JSJitInfo overload12_methodinfo = { | |||
33823 | { (JSJitGetterOp)overload12 }, | |||
33824 | { prototypes::id::TestExampleInterface }, | |||
33825 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33826 | JSJitInfo::Method, | |||
33827 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33828 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33829 | false, /* isInfallible. False in setters. */ | |||
33830 | false, /* isMovable. Not relevant for setters. */ | |||
33831 | false, /* isEliminatable. Not relevant for setters. */ | |||
33832 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33833 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33834 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33835 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33836 | }; | |||
33837 | ||||
33838 | MOZ_CAN_RUN_SCRIPT static bool | |||
33839 | overload13(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33840 | { | |||
33841 | BindingCallContext cx(cx_, "TestExampleInterface.overload13"); | |||
33842 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33845( cx, "TestExampleInterface" , "overload13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33843 | "TestExampleInterface", "overload13", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33845( cx, "TestExampleInterface" , "overload13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33844 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33845( cx, "TestExampleInterface" , "overload13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33845 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33845( cx, "TestExampleInterface" , "overload13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
33846 | ||||
33847 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33848 | unsigned argcount = std::min(args.length(), 1u); | |||
33849 | switch (argcount) { | |||
33850 | case 1: { | |||
33851 | if (args[0].isBoolean()) { | |||
33852 | bool arg0; | |||
33853 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
33854 | return false; | |||
33855 | } | |||
33856 | // NOTE: This assert does NOT call the function. | |||
33857 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload13(arg0))>, "Should be returning void here"); | |||
33858 | MOZ_KnownLive(self)(self)->Overload13(arg0); | |||
33859 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33859); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33859; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33860 | args.rval().setUndefined(); | |||
33861 | return true; | |||
33862 | } | |||
33863 | Nullable<int32_t> arg0; | |||
33864 | if (args[0].isNullOrUndefined()) { | |||
33865 | arg0.SetNull(); | |||
33866 | } else if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0.SetValue())) { | |||
33867 | return false; | |||
33868 | } | |||
33869 | // NOTE: This assert does NOT call the function. | |||
33870 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload13(Constify(arg0)))>, "Should be returning void here"); | |||
33871 | MOZ_KnownLive(self)(self)->Overload13(Constify(arg0)); | |||
33872 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33872); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33872; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33873 | args.rval().setUndefined(); | |||
33874 | return true; | |||
33875 | break; | |||
33876 | } | |||
33877 | default: { | |||
33878 | // Using nsPrintfCString here would require including that | |||
33879 | // header. Let's not worry about it. | |||
33880 | nsAutoCString argCountStr; | |||
33881 | argCountStr.AppendPrintf("%u", args.length()); | |||
33882 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33883 | } | |||
33884 | } | |||
33885 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33885); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33885; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33886 | return false; | |||
33887 | } | |||
33888 | ||||
33889 | static const JSJitInfo overload13_methodinfo = { | |||
33890 | { (JSJitGetterOp)overload13 }, | |||
33891 | { prototypes::id::TestExampleInterface }, | |||
33892 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33893 | JSJitInfo::Method, | |||
33894 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33895 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33896 | false, /* isInfallible. False in setters. */ | |||
33897 | false, /* isMovable. Not relevant for setters. */ | |||
33898 | false, /* isEliminatable. Not relevant for setters. */ | |||
33899 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33900 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33901 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33902 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33903 | }; | |||
33904 | ||||
33905 | MOZ_CAN_RUN_SCRIPT static bool | |||
33906 | overload14(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33907 | { | |||
33908 | BindingCallContext cx(cx_, "TestExampleInterface.overload14"); | |||
33909 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject33912( cx, "TestExampleInterface" , "overload14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33910 | "TestExampleInterface", "overload14", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject33912( cx, "TestExampleInterface" , "overload14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33911 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject33912( cx, "TestExampleInterface" , "overload14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
33912 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject33912( cx, "TestExampleInterface" , "overload14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
33913 | ||||
33914 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
33915 | unsigned argcount = std::min(args.length(), 1u); | |||
33916 | switch (argcount) { | |||
33917 | case 0: { | |||
33918 | Optional<int32_t> arg0; | |||
33919 | if (args.hasDefined(0)) { | |||
33920 | arg0.Construct(); | |||
33921 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
33922 | return false; | |||
33923 | } | |||
33924 | } | |||
33925 | // NOTE: This assert does NOT call the function. | |||
33926 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload14(Constify(arg0)))>, "Should be returning void here"); | |||
33927 | MOZ_KnownLive(self)(self)->Overload14(Constify(arg0)); | |||
33928 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33928); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33928; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33929 | args.rval().setUndefined(); | |||
33930 | return true; | |||
33931 | break; | |||
33932 | } | |||
33933 | case 1: { | |||
33934 | if (args[0].isObject()) { | |||
33935 | do { | |||
33936 | NonNull<mozilla::dom::TestInterface> arg0; | |||
33937 | { | |||
33938 | // Our JSContext should be in the right global to do unwrapping in. | |||
33939 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
33940 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
33941 | break; | |||
33942 | } | |||
33943 | } | |||
33944 | // NOTE: This assert does NOT call the function. | |||
33945 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload14(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
33946 | MOZ_KnownLive(self)(self)->Overload14(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
33947 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33947); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33947; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33948 | args.rval().setUndefined(); | |||
33949 | return true; | |||
33950 | } while (false); | |||
33951 | } | |||
33952 | Optional<int32_t> arg0; | |||
33953 | if (args.hasDefined(0)) { | |||
33954 | arg0.Construct(); | |||
33955 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
33956 | return false; | |||
33957 | } | |||
33958 | } | |||
33959 | // NOTE: This assert does NOT call the function. | |||
33960 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload14(Constify(arg0)))>, "Should be returning void here"); | |||
33961 | MOZ_KnownLive(self)(self)->Overload14(Constify(arg0)); | |||
33962 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 33962); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 33962; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
33963 | args.rval().setUndefined(); | |||
33964 | return true; | |||
33965 | break; | |||
33966 | } | |||
33967 | default: { | |||
33968 | // Using nsPrintfCString here would require including that | |||
33969 | // header. Let's not worry about it. | |||
33970 | nsAutoCString argCountStr; | |||
33971 | argCountStr.AppendPrintf("%u", args.length()); | |||
33972 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
33973 | } | |||
33974 | } | |||
33975 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 33975); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 33975; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
33976 | return false; | |||
33977 | } | |||
33978 | ||||
33979 | static const JSJitInfo overload14_methodinfo = { | |||
33980 | { (JSJitGetterOp)overload14 }, | |||
33981 | { prototypes::id::TestExampleInterface }, | |||
33982 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
33983 | JSJitInfo::Method, | |||
33984 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
33985 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
33986 | false, /* isInfallible. False in setters. */ | |||
33987 | false, /* isMovable. Not relevant for setters. */ | |||
33988 | false, /* isEliminatable. Not relevant for setters. */ | |||
33989 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
33990 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
33991 | false, /* isTypedMethod. Only relevant for methods. */ | |||
33992 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
33993 | }; | |||
33994 | ||||
33995 | MOZ_CAN_RUN_SCRIPT static bool | |||
33996 | overload15(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
33997 | { | |||
33998 | BindingCallContext cx(cx_, "TestExampleInterface.overload15"); | |||
33999 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34002( cx, "TestExampleInterface" , "overload15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34000 | "TestExampleInterface", "overload15", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34002( cx, "TestExampleInterface" , "overload15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34001 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject34002( cx, "TestExampleInterface" , "overload15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34002 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34002( cx, "TestExampleInterface" , "overload15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
34003 | ||||
34004 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34005 | unsigned argcount = std::min(args.length(), 1u); | |||
34006 | switch (argcount) { | |||
34007 | case 0: { | |||
34008 | Optional<NonNull<mozilla::dom::TestInterface>> arg0; | |||
34009 | if (args.hasDefined(0)) { | |||
34010 | arg0.Construct(); | |||
34011 | if (args[0].isObject()) { | |||
34012 | { | |||
34013 | // Our JSContext should be in the right global to do unwrapping in. | |||
34014 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0.Value(), cx); | |||
34015 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
34016 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
34017 | return false; | |||
34018 | } | |||
34019 | } | |||
34020 | } else { | |||
34021 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
34022 | return false; | |||
34023 | } | |||
34024 | } | |||
34025 | // NOTE: This assert does NOT call the function. | |||
34026 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload15(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))))>, "Should be returning void here"); | |||
34027 | MOZ_KnownLive(self)(self)->Overload15(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))); | |||
34028 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34028); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34028; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34029 | args.rval().setUndefined(); | |||
34030 | return true; | |||
34031 | break; | |||
34032 | } | |||
34033 | case 1: { | |||
34034 | if (args[0].isUndefined()) { | |||
34035 | Optional<NonNull<mozilla::dom::TestInterface>> arg0; | |||
34036 | if (args.hasDefined(0)) { | |||
34037 | arg0.Construct(); | |||
34038 | if (args[0].isObject()) { | |||
34039 | { | |||
34040 | // Our JSContext should be in the right global to do unwrapping in. | |||
34041 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0.Value(), cx); | |||
34042 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
34043 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
34044 | return false; | |||
34045 | } | |||
34046 | } | |||
34047 | } else { | |||
34048 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
34049 | return false; | |||
34050 | } | |||
34051 | } | |||
34052 | // NOTE: This assert does NOT call the function. | |||
34053 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload15(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))))>, "Should be returning void here"); | |||
34054 | MOZ_KnownLive(self)(self)->Overload15(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))); | |||
34055 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34055); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34055; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34056 | args.rval().setUndefined(); | |||
34057 | return true; | |||
34058 | } | |||
34059 | if (args[0].isObject()) { | |||
34060 | do { | |||
34061 | Optional<NonNull<mozilla::dom::TestInterface>> arg0; | |||
34062 | if (args.hasDefined(0)) { | |||
34063 | arg0.Construct(); | |||
34064 | { | |||
34065 | // Our JSContext should be in the right global to do unwrapping in. | |||
34066 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0.Value(), cx); | |||
34067 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
34068 | break; | |||
34069 | } | |||
34070 | } | |||
34071 | } | |||
34072 | // NOTE: This assert does NOT call the function. | |||
34073 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload15(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))))>, "Should be returning void here"); | |||
34074 | MOZ_KnownLive(self)(self)->Overload15(MOZ_KnownLive(NonNullHelper(Constify(arg0)))(NonNullHelper(Constify(arg0)))); | |||
34075 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34075); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34075; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34076 | args.rval().setUndefined(); | |||
34077 | return true; | |||
34078 | } while (false); | |||
34079 | } | |||
34080 | int32_t arg0; | |||
34081 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
34082 | return false; | |||
34083 | } | |||
34084 | // NOTE: This assert does NOT call the function. | |||
34085 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload15(arg0))>, "Should be returning void here"); | |||
34086 | MOZ_KnownLive(self)(self)->Overload15(arg0); | |||
34087 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34087); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34087; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34088 | args.rval().setUndefined(); | |||
34089 | return true; | |||
34090 | break; | |||
34091 | } | |||
34092 | default: { | |||
34093 | // Using nsPrintfCString here would require including that | |||
34094 | // header. Let's not worry about it. | |||
34095 | nsAutoCString argCountStr; | |||
34096 | argCountStr.AppendPrintf("%u", args.length()); | |||
34097 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
34098 | } | |||
34099 | } | |||
34100 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 34100); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 34100; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
34101 | return false; | |||
34102 | } | |||
34103 | ||||
34104 | static const JSJitInfo overload15_methodinfo = { | |||
34105 | { (JSJitGetterOp)overload15 }, | |||
34106 | { prototypes::id::TestExampleInterface }, | |||
34107 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34108 | JSJitInfo::Method, | |||
34109 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34110 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
34111 | false, /* isInfallible. False in setters. */ | |||
34112 | false, /* isMovable. Not relevant for setters. */ | |||
34113 | false, /* isEliminatable. Not relevant for setters. */ | |||
34114 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34115 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34116 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34117 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34118 | }; | |||
34119 | ||||
34120 | MOZ_CAN_RUN_SCRIPT static bool | |||
34121 | overload16(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
34122 | { | |||
34123 | BindingCallContext cx(cx_, "TestExampleInterface.overload16"); | |||
34124 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34127( cx, "TestExampleInterface" , "overload16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34125 | "TestExampleInterface", "overload16", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34127( cx, "TestExampleInterface" , "overload16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34126 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject34127( cx, "TestExampleInterface" , "overload16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34127 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34127( cx, "TestExampleInterface" , "overload16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
34128 | ||||
34129 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34130 | unsigned argcount = std::min(args.length(), 1u); | |||
34131 | switch (argcount) { | |||
34132 | case 0: { | |||
34133 | Optional<mozilla::dom::TestInterface*> arg0; | |||
34134 | if (args.hasDefined(0)) { | |||
34135 | arg0.Construct(); | |||
34136 | if (args[0].isObject()) { | |||
34137 | { | |||
34138 | // Our JSContext should be in the right global to do unwrapping in. | |||
34139 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0.Value(), cx); | |||
34140 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
34141 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestInterface"); | |||
34142 | return false; | |||
34143 | } | |||
34144 | } | |||
34145 | } else if (args[0].isNullOrUndefined()) { | |||
34146 | arg0.Value() = nullptr; | |||
34147 | } else { | |||
34148 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
34149 | return false; | |||
34150 | } | |||
34151 | } | |||
34152 | // NOTE: This assert does NOT call the function. | |||
34153 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload16(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
34154 | MOZ_KnownLive(self)(self)->Overload16(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
34155 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34155); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34155; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34156 | args.rval().setUndefined(); | |||
34157 | return true; | |||
34158 | break; | |||
34159 | } | |||
34160 | case 1: { | |||
34161 | if (args[0].isNullOrUndefined()) { | |||
34162 | Optional<mozilla::dom::TestInterface*> arg0; | |||
34163 | if (args.hasDefined(0)) { | |||
34164 | arg0.Construct(); | |||
34165 | arg0.Value() = nullptr; | |||
34166 | } | |||
34167 | // NOTE: This assert does NOT call the function. | |||
34168 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload16(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
34169 | MOZ_KnownLive(self)(self)->Overload16(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
34170 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34170); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34170; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34171 | args.rval().setUndefined(); | |||
34172 | return true; | |||
34173 | } | |||
34174 | if (args[0].isObject()) { | |||
34175 | do { | |||
34176 | Optional<mozilla::dom::TestInterface*> arg0; | |||
34177 | if (args.hasDefined(0)) { | |||
34178 | arg0.Construct(); | |||
34179 | { | |||
34180 | // Our JSContext should be in the right global to do unwrapping in. | |||
34181 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0.Value(), cx); | |||
34182 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
34183 | break; | |||
34184 | } | |||
34185 | } | |||
34186 | } | |||
34187 | // NOTE: This assert does NOT call the function. | |||
34188 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload16(MOZ_KnownLive(Constify(arg0))(Constify(arg0))))>, "Should be returning void here"); | |||
34189 | MOZ_KnownLive(self)(self)->Overload16(MOZ_KnownLive(Constify(arg0))(Constify(arg0))); | |||
34190 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34190); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34190; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34191 | args.rval().setUndefined(); | |||
34192 | return true; | |||
34193 | } while (false); | |||
34194 | } | |||
34195 | int32_t arg0; | |||
34196 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
34197 | return false; | |||
34198 | } | |||
34199 | // NOTE: This assert does NOT call the function. | |||
34200 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload16(arg0))>, "Should be returning void here"); | |||
34201 | MOZ_KnownLive(self)(self)->Overload16(arg0); | |||
34202 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34202); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34202; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34203 | args.rval().setUndefined(); | |||
34204 | return true; | |||
34205 | break; | |||
34206 | } | |||
34207 | default: { | |||
34208 | // Using nsPrintfCString here would require including that | |||
34209 | // header. Let's not worry about it. | |||
34210 | nsAutoCString argCountStr; | |||
34211 | argCountStr.AppendPrintf("%u", args.length()); | |||
34212 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
34213 | } | |||
34214 | } | |||
34215 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 34215); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 34215; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
34216 | return false; | |||
34217 | } | |||
34218 | ||||
34219 | static const JSJitInfo overload16_methodinfo = { | |||
34220 | { (JSJitGetterOp)overload16 }, | |||
34221 | { prototypes::id::TestExampleInterface }, | |||
34222 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34223 | JSJitInfo::Method, | |||
34224 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34225 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
34226 | false, /* isInfallible. False in setters. */ | |||
34227 | false, /* isMovable. Not relevant for setters. */ | |||
34228 | false, /* isEliminatable. Not relevant for setters. */ | |||
34229 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34230 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34231 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34232 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34233 | }; | |||
34234 | ||||
34235 | MOZ_CAN_RUN_SCRIPT static bool | |||
34236 | overload17(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
34237 | { | |||
34238 | BindingCallContext cx(cx_, "TestExampleInterface.overload17"); | |||
34239 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34242( cx, "TestExampleInterface" , "overload17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34240 | "TestExampleInterface", "overload17", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34242( cx, "TestExampleInterface" , "overload17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34241 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject34242( cx, "TestExampleInterface" , "overload17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34242 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34242( cx, "TestExampleInterface" , "overload17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
34243 | ||||
34244 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34245 | unsigned argcount = std::min(args.length(), 1u); | |||
34246 | switch (argcount) { | |||
34247 | case 1: { | |||
34248 | if (args[0].isObject()) { | |||
34249 | do { | |||
34250 | binding_detail::AutoSequence<int32_t> arg0; | |||
34251 | JS::ForOfIterator iter(cx); | |||
34252 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
34253 | return false; | |||
34254 | } | |||
34255 | if (!iter.valueIsIterable()) { | |||
34256 | break; | |||
34257 | } | |||
34258 | binding_detail::AutoSequence<int32_t> &arr = arg0; | |||
34259 | JS::Rooted<JS::Value> temp(cx); | |||
34260 | while (true) { | |||
34261 | bool done; | |||
34262 | if (!iter.next(&temp, &done)) { | |||
34263 | return false; | |||
34264 | } | |||
34265 | if (done) { | |||
34266 | break; | |||
34267 | } | |||
34268 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
34269 | if (!slotPtr) { | |||
34270 | JS_ReportOutOfMemory(cx); | |||
34271 | return false; | |||
34272 | } | |||
34273 | int32_t& slot = *slotPtr; | |||
34274 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
34275 | return false; | |||
34276 | } | |||
34277 | } | |||
34278 | // NOTE: This assert does NOT call the function. | |||
34279 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload17(Constify(arg0)))>, "Should be returning void here"); | |||
34280 | MOZ_KnownLive(self)(self)->Overload17(Constify(arg0)); | |||
34281 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34281); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34281; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34282 | args.rval().setUndefined(); | |||
34283 | return true; | |||
34284 | } while (false); | |||
34285 | do { | |||
34286 | Record<nsString, int32_t> arg0; | |||
34287 | auto& recordEntries = arg0.Entries(); | |||
34288 | ||||
34289 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
34290 | JS::RootedVector<jsid> ids(cx); | |||
34291 | if (!js::GetPropertyKeys(cx, recordObj, | |||
34292 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
34293 | return false; | |||
34294 | } | |||
34295 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
34296 | JS_ReportOutOfMemory(cx); | |||
34297 | return false; | |||
34298 | } | |||
34299 | JS::Rooted<JS::Value> propNameValue(cx); | |||
34300 | JS::Rooted<JS::Value> temp(cx); | |||
34301 | JS::Rooted<jsid> curId(cx); | |||
34302 | JS::Rooted<JS::Value> idVal(cx); | |||
34303 | // Use a hashset to keep track of ids seen, to avoid | |||
34304 | // introducing nasty O(N^2) behavior scanning for them all the | |||
34305 | // time. Ideally we'd use a data structure with O(1) lookup | |||
34306 | // _and_ ordering for the MozMap, but we don't have one lying | |||
34307 | // around. | |||
34308 | nsTHashtable<nsStringHashKey> idsSeen; | |||
34309 | for (size_t i = 0; i < ids.length(); ++i) { | |||
34310 | curId = ids[i]; | |||
34311 | ||||
34312 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
34313 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
34314 | &desc)) { | |||
34315 | return false; | |||
34316 | } | |||
34317 | ||||
34318 | if (desc.isNothing() || !desc->enumerable()) { | |||
34319 | continue; | |||
34320 | } | |||
34321 | ||||
34322 | idVal = js::IdToValue(curId); | |||
34323 | nsString propName; | |||
34324 | // This will just throw if idVal is a Symbol, like the spec says | |||
34325 | // to do. | |||
34326 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
34327 | return false; | |||
34328 | } | |||
34329 | ||||
34330 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
34331 | return false; | |||
34332 | } | |||
34333 | ||||
34334 | Record<nsString, int32_t>::EntryType* entry; | |||
34335 | if (!idsSeen.EnsureInserted(propName)) { | |||
34336 | // Find the existing entry. | |||
34337 | auto idx = recordEntries.IndexOf(propName); | |||
34338 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 34339); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 34339; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
34339 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 34339); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 34339; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
34340 | // Now blow it away to make it look like it was just added | |||
34341 | // to the array, because it's not obvious that it's | |||
34342 | // safe to write to its already-initialized mValue via our | |||
34343 | // normal codegen conversions. For example, the value | |||
34344 | // could be a union and this would change its type, but | |||
34345 | // codegen assumes we won't do that. | |||
34346 | entry = recordEntries.ReconstructElementAt(idx); | |||
34347 | } else { | |||
34348 | // Safe to do an infallible append here, because we did a | |||
34349 | // SetCapacity above to the right capacity. | |||
34350 | entry = recordEntries.AppendElement(); | |||
34351 | } | |||
34352 | entry->mKey = propName; | |||
34353 | int32_t& slot = entry->mValue; | |||
34354 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Value in argument 1", &slot)) { | |||
34355 | return false; | |||
34356 | } | |||
34357 | } | |||
34358 | // NOTE: This assert does NOT call the function. | |||
34359 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload17(Constify(arg0)))>, "Should be returning void here"); | |||
34360 | MOZ_KnownLive(self)(self)->Overload17(Constify(arg0)); | |||
34361 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34361); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34361; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34362 | args.rval().setUndefined(); | |||
34363 | return true; | |||
34364 | } while (false); | |||
34365 | } | |||
34366 | return cx.ThrowErrorMessage<MSG_OVERLOAD_RESOLUTION_FAILED>("1", "1"); | |||
34367 | break; | |||
34368 | } | |||
34369 | default: { | |||
34370 | // Using nsPrintfCString here would require including that | |||
34371 | // header. Let's not worry about it. | |||
34372 | nsAutoCString argCountStr; | |||
34373 | argCountStr.AppendPrintf("%u", args.length()); | |||
34374 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
34375 | } | |||
34376 | } | |||
34377 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 34377); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 34377; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
34378 | return false; | |||
34379 | } | |||
34380 | ||||
34381 | static const JSJitInfo overload17_methodinfo = { | |||
34382 | { (JSJitGetterOp)overload17 }, | |||
34383 | { prototypes::id::TestExampleInterface }, | |||
34384 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34385 | JSJitInfo::Method, | |||
34386 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34387 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
34388 | false, /* isInfallible. False in setters. */ | |||
34389 | false, /* isMovable. Not relevant for setters. */ | |||
34390 | false, /* isEliminatable. Not relevant for setters. */ | |||
34391 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34392 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34393 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34394 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34395 | }; | |||
34396 | ||||
34397 | MOZ_CAN_RUN_SCRIPT static bool | |||
34398 | overload18(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
34399 | { | |||
34400 | BindingCallContext cx(cx_, "TestExampleInterface.overload18"); | |||
34401 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34404( cx, "TestExampleInterface" , "overload18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34402 | "TestExampleInterface", "overload18", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34404( cx, "TestExampleInterface" , "overload18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34403 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject34404( cx, "TestExampleInterface" , "overload18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34404 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34404( cx, "TestExampleInterface" , "overload18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
34405 | ||||
34406 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34407 | unsigned argcount = std::min(args.length(), 1u); | |||
34408 | switch (argcount) { | |||
34409 | case 1: { | |||
34410 | if (args[0].isObject()) { | |||
34411 | do { | |||
34412 | binding_detail::AutoSequence<nsString> arg0; | |||
34413 | JS::ForOfIterator iter(cx); | |||
34414 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
34415 | return false; | |||
34416 | } | |||
34417 | if (!iter.valueIsIterable()) { | |||
34418 | break; | |||
34419 | } | |||
34420 | binding_detail::AutoSequence<nsString> &arr = arg0; | |||
34421 | JS::Rooted<JS::Value> temp(cx); | |||
34422 | while (true) { | |||
34423 | bool done; | |||
34424 | if (!iter.next(&temp, &done)) { | |||
34425 | return false; | |||
34426 | } | |||
34427 | if (done) { | |||
34428 | break; | |||
34429 | } | |||
34430 | nsString* slotPtr = arr.AppendElement(mozilla::fallible); | |||
34431 | if (!slotPtr) { | |||
34432 | JS_ReportOutOfMemory(cx); | |||
34433 | return false; | |||
34434 | } | |||
34435 | nsString& slot = *slotPtr; | |||
34436 | if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) { | |||
34437 | return false; | |||
34438 | } | |||
34439 | } | |||
34440 | // NOTE: This assert does NOT call the function. | |||
34441 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload18(Constify(arg0)))>, "Should be returning void here"); | |||
34442 | MOZ_KnownLive(self)(self)->Overload18(Constify(arg0)); | |||
34443 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34443); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34443; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34444 | args.rval().setUndefined(); | |||
34445 | return true; | |||
34446 | } while (false); | |||
34447 | do { | |||
34448 | Record<nsString, nsString> arg0; | |||
34449 | auto& recordEntries = arg0.Entries(); | |||
34450 | ||||
34451 | JS::Rooted<JSObject*> recordObj(cx, &args[0].toObject()); | |||
34452 | JS::RootedVector<jsid> ids(cx); | |||
34453 | if (!js::GetPropertyKeys(cx, recordObj, | |||
34454 | JSITER_OWNONLY0x8 | JSITER_HIDDEN0x10 | JSITER_SYMBOLS0x20, &ids)) { | |||
34455 | return false; | |||
34456 | } | |||
34457 | if (!recordEntries.SetCapacity(ids.length(), mozilla::fallible)) { | |||
34458 | JS_ReportOutOfMemory(cx); | |||
34459 | return false; | |||
34460 | } | |||
34461 | JS::Rooted<JS::Value> propNameValue(cx); | |||
34462 | JS::Rooted<JS::Value> temp(cx); | |||
34463 | JS::Rooted<jsid> curId(cx); | |||
34464 | JS::Rooted<JS::Value> idVal(cx); | |||
34465 | // Use a hashset to keep track of ids seen, to avoid | |||
34466 | // introducing nasty O(N^2) behavior scanning for them all the | |||
34467 | // time. Ideally we'd use a data structure with O(1) lookup | |||
34468 | // _and_ ordering for the MozMap, but we don't have one lying | |||
34469 | // around. | |||
34470 | nsTHashtable<nsStringHashKey> idsSeen; | |||
34471 | for (size_t i = 0; i < ids.length(); ++i) { | |||
34472 | curId = ids[i]; | |||
34473 | ||||
34474 | JS::Rooted<mozilla::Maybe<JS::PropertyDescriptor>> desc(cx); | |||
34475 | if (!JS_GetOwnPropertyDescriptorById(cx, recordObj, curId, | |||
34476 | &desc)) { | |||
34477 | return false; | |||
34478 | } | |||
34479 | ||||
34480 | if (desc.isNothing() || !desc->enumerable()) { | |||
34481 | continue; | |||
34482 | } | |||
34483 | ||||
34484 | idVal = js::IdToValue(curId); | |||
34485 | nsString propName; | |||
34486 | // This will just throw if idVal is a Symbol, like the spec says | |||
34487 | // to do. | |||
34488 | if (!ConvertJSValueToString(cx, idVal, "key of argument 1", propName)) { | |||
34489 | return false; | |||
34490 | } | |||
34491 | ||||
34492 | if (!JS_GetPropertyById(cx, recordObj, curId, &temp)) { | |||
34493 | return false; | |||
34494 | } | |||
34495 | ||||
34496 | Record<nsString, nsString>::EntryType* entry; | |||
34497 | if (!idsSeen.EnsureInserted(propName)) { | |||
34498 | // Find the existing entry. | |||
34499 | auto idx = recordEntries.IndexOf(propName); | |||
34500 | MOZ_ASSERT(idx != recordEntries.NoIndex,do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 34501); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 34501; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
34501 | "Why is it not found?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(idx != recordEntries.NoIndex)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(idx != recordEntries.NoIndex ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "idx != recordEntries.NoIndex" " (" "Why is it not found?" ")" , "../TestExampleGenBinding.cpp", 34501); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "idx != recordEntries.NoIndex" ") (" "Why is it not found?" ")"); do { *((volatile int*)__null) = 34501; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
34502 | // Now blow it away to make it look like it was just added | |||
34503 | // to the array, because it's not obvious that it's | |||
34504 | // safe to write to its already-initialized mValue via our | |||
34505 | // normal codegen conversions. For example, the value | |||
34506 | // could be a union and this would change its type, but | |||
34507 | // codegen assumes we won't do that. | |||
34508 | entry = recordEntries.ReconstructElementAt(idx); | |||
34509 | } else { | |||
34510 | // Safe to do an infallible append here, because we did a | |||
34511 | // SetCapacity above to the right capacity. | |||
34512 | entry = recordEntries.AppendElement(); | |||
34513 | } | |||
34514 | entry->mKey = propName; | |||
34515 | nsString& slot = entry->mValue; | |||
34516 | if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) { | |||
34517 | return false; | |||
34518 | } | |||
34519 | } | |||
34520 | // NOTE: This assert does NOT call the function. | |||
34521 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload18(Constify(arg0)))>, "Should be returning void here"); | |||
34522 | MOZ_KnownLive(self)(self)->Overload18(Constify(arg0)); | |||
34523 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34523); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34523; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34524 | args.rval().setUndefined(); | |||
34525 | return true; | |||
34526 | } while (false); | |||
34527 | } | |||
34528 | return cx.ThrowErrorMessage<MSG_OVERLOAD_RESOLUTION_FAILED>("1", "1"); | |||
34529 | break; | |||
34530 | } | |||
34531 | default: { | |||
34532 | // Using nsPrintfCString here would require including that | |||
34533 | // header. Let's not worry about it. | |||
34534 | nsAutoCString argCountStr; | |||
34535 | argCountStr.AppendPrintf("%u", args.length()); | |||
34536 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
34537 | } | |||
34538 | } | |||
34539 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 34539); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 34539; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
34540 | return false; | |||
34541 | } | |||
34542 | ||||
34543 | static const JSJitInfo overload18_methodinfo = { | |||
34544 | { (JSJitGetterOp)overload18 }, | |||
34545 | { prototypes::id::TestExampleInterface }, | |||
34546 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34547 | JSJitInfo::Method, | |||
34548 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34549 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
34550 | false, /* isInfallible. False in setters. */ | |||
34551 | false, /* isMovable. Not relevant for setters. */ | |||
34552 | false, /* isEliminatable. Not relevant for setters. */ | |||
34553 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34554 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34555 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34556 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34557 | }; | |||
34558 | ||||
34559 | MOZ_CAN_RUN_SCRIPT static bool | |||
34560 | overload19(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
34561 | { | |||
34562 | BindingCallContext cx(cx_, "TestExampleInterface.overload19"); | |||
34563 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34566( cx, "TestExampleInterface" , "overload19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34564 | "TestExampleInterface", "overload19", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34566( cx, "TestExampleInterface" , "overload19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34565 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject34566( cx, "TestExampleInterface" , "overload19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34566 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34566( cx, "TestExampleInterface" , "overload19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
34567 | ||||
34568 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34569 | unsigned argcount = std::min(args.length(), 1u); | |||
34570 | switch (argcount) { | |||
34571 | case 0: { | |||
34572 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
34573 | if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1", false)) { | |||
34574 | return false; | |||
34575 | } | |||
34576 | // NOTE: This assert does NOT call the function. | |||
34577 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload19(cx, Constify(arg0)))>, "Should be returning void here"); | |||
34578 | MOZ_KnownLive(self)(self)->Overload19(cx, Constify(arg0)); | |||
34579 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34579); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34579; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34580 | args.rval().setUndefined(); | |||
34581 | return true; | |||
34582 | break; | |||
34583 | } | |||
34584 | case 1: { | |||
34585 | if (args[0].isNullOrUndefined()) { | |||
34586 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
34587 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
34588 | return false; | |||
34589 | } | |||
34590 | // NOTE: This assert does NOT call the function. | |||
34591 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload19(cx, Constify(arg0)))>, "Should be returning void here"); | |||
34592 | MOZ_KnownLive(self)(self)->Overload19(cx, Constify(arg0)); | |||
34593 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34593); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34593; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34594 | args.rval().setUndefined(); | |||
34595 | return true; | |||
34596 | } | |||
34597 | if (args[0].isObject()) { | |||
34598 | do { | |||
34599 | binding_detail::AutoSequence<int32_t> arg0; | |||
34600 | JS::ForOfIterator iter(cx); | |||
34601 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
34602 | return false; | |||
34603 | } | |||
34604 | if (!iter.valueIsIterable()) { | |||
34605 | break; | |||
34606 | } | |||
34607 | binding_detail::AutoSequence<int32_t> &arr = arg0; | |||
34608 | JS::Rooted<JS::Value> temp(cx); | |||
34609 | while (true) { | |||
34610 | bool done; | |||
34611 | if (!iter.next(&temp, &done)) { | |||
34612 | return false; | |||
34613 | } | |||
34614 | if (done) { | |||
34615 | break; | |||
34616 | } | |||
34617 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
34618 | if (!slotPtr) { | |||
34619 | JS_ReportOutOfMemory(cx); | |||
34620 | return false; | |||
34621 | } | |||
34622 | int32_t& slot = *slotPtr; | |||
34623 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
34624 | return false; | |||
34625 | } | |||
34626 | } | |||
34627 | // NOTE: This assert does NOT call the function. | |||
34628 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload19(Constify(arg0)))>, "Should be returning void here"); | |||
34629 | MOZ_KnownLive(self)(self)->Overload19(Constify(arg0)); | |||
34630 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34630); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34630; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34631 | args.rval().setUndefined(); | |||
34632 | return true; | |||
34633 | } while (false); | |||
34634 | do { | |||
34635 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
34636 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
34637 | return false; | |||
34638 | } | |||
34639 | // NOTE: This assert does NOT call the function. | |||
34640 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload19(cx, Constify(arg0)))>, "Should be returning void here"); | |||
34641 | MOZ_KnownLive(self)(self)->Overload19(cx, Constify(arg0)); | |||
34642 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34642); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34642; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34643 | args.rval().setUndefined(); | |||
34644 | return true; | |||
34645 | } while (false); | |||
34646 | } | |||
34647 | return cx.ThrowErrorMessage<MSG_OVERLOAD_RESOLUTION_FAILED>("1", "1"); | |||
34648 | break; | |||
34649 | } | |||
34650 | default: { | |||
34651 | // Using nsPrintfCString here would require including that | |||
34652 | // header. Let's not worry about it. | |||
34653 | nsAutoCString argCountStr; | |||
34654 | argCountStr.AppendPrintf("%u", args.length()); | |||
34655 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
34656 | } | |||
34657 | } | |||
34658 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 34658); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 34658; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
34659 | return false; | |||
34660 | } | |||
34661 | ||||
34662 | static const JSJitInfo overload19_methodinfo = { | |||
34663 | { (JSJitGetterOp)overload19 }, | |||
34664 | { prototypes::id::TestExampleInterface }, | |||
34665 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34666 | JSJitInfo::Method, | |||
34667 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34668 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
34669 | false, /* isInfallible. False in setters. */ | |||
34670 | false, /* isMovable. Not relevant for setters. */ | |||
34671 | false, /* isEliminatable. Not relevant for setters. */ | |||
34672 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34673 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34674 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34675 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34676 | }; | |||
34677 | ||||
34678 | MOZ_CAN_RUN_SCRIPT static bool | |||
34679 | overload20(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
34680 | { | |||
34681 | BindingCallContext cx(cx_, "TestExampleInterface.overload20"); | |||
34682 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34685( cx, "TestExampleInterface" , "overload20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34683 | "TestExampleInterface", "overload20", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34685( cx, "TestExampleInterface" , "overload20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34684 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject34685( cx, "TestExampleInterface" , "overload20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34685 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34685( cx, "TestExampleInterface" , "overload20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
34686 | ||||
34687 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34688 | unsigned argcount = std::min(args.length(), 1u); | |||
34689 | switch (argcount) { | |||
34690 | case 0: { | |||
34691 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
34692 | if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue, "Argument 1", false)) { | |||
34693 | return false; | |||
34694 | } | |||
34695 | // NOTE: This assert does NOT call the function. | |||
34696 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload20(cx, Constify(arg0)))>, "Should be returning void here"); | |||
34697 | MOZ_KnownLive(self)(self)->Overload20(cx, Constify(arg0)); | |||
34698 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34698); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34698; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34699 | args.rval().setUndefined(); | |||
34700 | return true; | |||
34701 | break; | |||
34702 | } | |||
34703 | case 1: { | |||
34704 | if (args[0].isNullOrUndefined()) { | |||
34705 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
34706 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
34707 | return false; | |||
34708 | } | |||
34709 | // NOTE: This assert does NOT call the function. | |||
34710 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload20(cx, Constify(arg0)))>, "Should be returning void here"); | |||
34711 | MOZ_KnownLive(self)(self)->Overload20(cx, Constify(arg0)); | |||
34712 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34712); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34712; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34713 | args.rval().setUndefined(); | |||
34714 | return true; | |||
34715 | } | |||
34716 | if (args[0].isObject()) { | |||
34717 | do { | |||
34718 | binding_detail::AutoSequence<int32_t> arg0; | |||
34719 | JS::ForOfIterator iter(cx); | |||
34720 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
34721 | return false; | |||
34722 | } | |||
34723 | if (!iter.valueIsIterable()) { | |||
34724 | break; | |||
34725 | } | |||
34726 | binding_detail::AutoSequence<int32_t> &arr = arg0; | |||
34727 | JS::Rooted<JS::Value> temp(cx); | |||
34728 | while (true) { | |||
34729 | bool done; | |||
34730 | if (!iter.next(&temp, &done)) { | |||
34731 | return false; | |||
34732 | } | |||
34733 | if (done) { | |||
34734 | break; | |||
34735 | } | |||
34736 | int32_t* slotPtr = arr.AppendElement(mozilla::fallible); | |||
34737 | if (!slotPtr) { | |||
34738 | JS_ReportOutOfMemory(cx); | |||
34739 | return false; | |||
34740 | } | |||
34741 | int32_t& slot = *slotPtr; | |||
34742 | if (!ValueToPrimitive<int32_t, eDefault>(cx, temp, "Element of argument 1", &slot)) { | |||
34743 | return false; | |||
34744 | } | |||
34745 | } | |||
34746 | // NOTE: This assert does NOT call the function. | |||
34747 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload20(Constify(arg0)))>, "Should be returning void here"); | |||
34748 | MOZ_KnownLive(self)(self)->Overload20(Constify(arg0)); | |||
34749 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34749); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34749; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34750 | args.rval().setUndefined(); | |||
34751 | return true; | |||
34752 | } while (false); | |||
34753 | do { | |||
34754 | RootedDictionary<binding_detail::FastDict> arg0(cx); | |||
34755 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
34756 | return false; | |||
34757 | } | |||
34758 | // NOTE: This assert does NOT call the function. | |||
34759 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Overload20(cx, Constify(arg0)))>, "Should be returning void here"); | |||
34760 | MOZ_KnownLive(self)(self)->Overload20(cx, Constify(arg0)); | |||
34761 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34761); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34761; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34762 | args.rval().setUndefined(); | |||
34763 | return true; | |||
34764 | } while (false); | |||
34765 | } | |||
34766 | return cx.ThrowErrorMessage<MSG_OVERLOAD_RESOLUTION_FAILED>("1", "1"); | |||
34767 | break; | |||
34768 | } | |||
34769 | default: { | |||
34770 | // Using nsPrintfCString here would require including that | |||
34771 | // header. Let's not worry about it. | |||
34772 | nsAutoCString argCountStr; | |||
34773 | argCountStr.AppendPrintf("%u", args.length()); | |||
34774 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
34775 | } | |||
34776 | } | |||
34777 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 34777); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 34777; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
34778 | return false; | |||
34779 | } | |||
34780 | ||||
34781 | static const JSJitInfo overload20_methodinfo = { | |||
34782 | { (JSJitGetterOp)overload20 }, | |||
34783 | { prototypes::id::TestExampleInterface }, | |||
34784 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34785 | JSJitInfo::Method, | |||
34786 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34787 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
34788 | false, /* isInfallible. False in setters. */ | |||
34789 | false, /* isMovable. Not relevant for setters. */ | |||
34790 | false, /* isEliminatable. Not relevant for setters. */ | |||
34791 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34792 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34793 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34794 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34795 | }; | |||
34796 | ||||
34797 | MOZ_CAN_RUN_SCRIPT static bool | |||
34798 | passVariadicThirdArg(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
34799 | { | |||
34800 | BindingCallContext cx(cx_, "TestExampleInterface.passVariadicThirdArg"); | |||
34801 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34804( cx, "TestExampleInterface" , "passVariadicThirdArg", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34802 | "TestExampleInterface", "passVariadicThirdArg", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34804( cx, "TestExampleInterface" , "passVariadicThirdArg", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34803 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject34804( cx, "TestExampleInterface" , "passVariadicThirdArg", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
34804 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34804( cx, "TestExampleInterface" , "passVariadicThirdArg", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
34805 | ||||
34806 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34807 | if (!args.requireAtLeast(cx, "TestExampleInterface.passVariadicThirdArg", 2)) { | |||
34808 | return false; | |||
34809 | } | |||
34810 | binding_detail::FakeString<char16_t> arg0; | |||
34811 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
34812 | return false; | |||
34813 | } | |||
34814 | int32_t arg1; | |||
34815 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], "Argument 2", &arg1)) { | |||
34816 | return false; | |||
34817 | } | |||
34818 | AutoSequence<OwningNonNull<mozilla::dom::TestInterface>> arg2; | |||
34819 | if (args.length() > 2) { | |||
34820 | if (!arg2.SetCapacity(args.length() - 2, mozilla::fallible)) { | |||
34821 | JS_ReportOutOfMemory(cx); | |||
34822 | return false; | |||
34823 | } | |||
34824 | for (uint32_t variadicArg = 2; variadicArg < args.length(); ++variadicArg) { | |||
34825 | // OK to do infallible append here, since we ensured capacity already. | |||
34826 | OwningNonNull<mozilla::dom::TestInterface>& slot = *arg2.AppendElement(); | |||
34827 | if (args[variadicArg].isObject()) { | |||
34828 | static_assert(IsRefcounted<mozilla::dom::TestInterface>::value, "We can only store refcounted classes."); | |||
34829 | { | |||
34830 | // Our JSContext should be in the right global to do unwrapping in. | |||
34831 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[variadicArg], slot, cx); | |||
34832 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
34833 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 3", "TestInterface"); | |||
34834 | return false; | |||
34835 | } | |||
34836 | } | |||
34837 | } else { | |||
34838 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 3"); | |||
34839 | return false; | |||
34840 | } | |||
34841 | } | |||
34842 | } | |||
34843 | // NOTE: This assert does NOT call the function. | |||
34844 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassVariadicThirdArg(NonNullHelper(Constify(arg0)), arg1, MOZ_KnownLive(NonNullHelper(Constify(arg2)))(NonNullHelper(Constify(arg2)))))>, "Should be returning void here"); | |||
34845 | MOZ_KnownLive(self)(self)->PassVariadicThirdArg(NonNullHelper(Constify(arg0)), arg1, MOZ_KnownLive(NonNullHelper(Constify(arg2)))(NonNullHelper(Constify(arg2)))); | |||
34846 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34846); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34846; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34847 | args.rval().setUndefined(); | |||
34848 | return true; | |||
34849 | } | |||
34850 | ||||
34851 | static const JSJitInfo passVariadicThirdArg_methodinfo = { | |||
34852 | { (JSJitGetterOp)passVariadicThirdArg }, | |||
34853 | { prototypes::id::TestExampleInterface }, | |||
34854 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34855 | JSJitInfo::Method, | |||
34856 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34857 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
34858 | false, /* isInfallible. False in setters. */ | |||
34859 | false, /* isMovable. Not relevant for setters. */ | |||
34860 | false, /* isEliminatable. Not relevant for setters. */ | |||
34861 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34862 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34863 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34864 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34865 | }; | |||
34866 | ||||
34867 | MOZ_CAN_RUN_SCRIPT static bool | |||
34868 | get_prefable1(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
34869 | { | |||
34870 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34873( cx, "TestExampleInterface" , "prefable1", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34871 | "TestExampleInterface", "prefable1", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34873( cx, "TestExampleInterface" , "prefable1", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34872 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject34873( cx, "TestExampleInterface" , "prefable1", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34873 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34873( cx, "TestExampleInterface" , "prefable1", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
34874 | ||||
34875 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34876 | bool result(MOZ_KnownLive(self)(self)->Prefable1()); | |||
34877 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34877); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34877; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34878 | args.rval().setBoolean(result); | |||
34879 | return true; | |||
34880 | } | |||
34881 | ||||
34882 | static const JSJitInfo prefable1_getterinfo = { | |||
34883 | { get_prefable1 }, | |||
34884 | { prototypes::id::TestExampleInterface }, | |||
34885 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34886 | JSJitInfo::Getter, | |||
34887 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34888 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
34889 | true, /* isInfallible. False in setters. */ | |||
34890 | false, /* isMovable. Not relevant for setters. */ | |||
34891 | false, /* isEliminatable. Not relevant for setters. */ | |||
34892 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34893 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34894 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34895 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34896 | }; | |||
34897 | ||||
34898 | MOZ_CAN_RUN_SCRIPT static bool | |||
34899 | get_prefable2(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
34900 | { | |||
34901 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34904( cx, "TestExampleInterface" , "prefable2", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34902 | "TestExampleInterface", "prefable2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34904( cx, "TestExampleInterface" , "prefable2", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34903 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject34904( cx, "TestExampleInterface" , "prefable2", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34904 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34904( cx, "TestExampleInterface" , "prefable2", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
34905 | ||||
34906 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34907 | bool result(MOZ_KnownLive(self)(self)->Prefable2()); | |||
34908 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34908); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34908; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34909 | args.rval().setBoolean(result); | |||
34910 | return true; | |||
34911 | } | |||
34912 | ||||
34913 | static const JSJitInfo prefable2_getterinfo = { | |||
34914 | { get_prefable2 }, | |||
34915 | { prototypes::id::TestExampleInterface }, | |||
34916 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34917 | JSJitInfo::Getter, | |||
34918 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34919 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
34920 | true, /* isInfallible. False in setters. */ | |||
34921 | false, /* isMovable. Not relevant for setters. */ | |||
34922 | false, /* isEliminatable. Not relevant for setters. */ | |||
34923 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34924 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34925 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34926 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34927 | }; | |||
34928 | ||||
34929 | MOZ_CAN_RUN_SCRIPT static bool | |||
34930 | get_prefable3(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
34931 | { | |||
34932 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34935( cx, "TestExampleInterface" , "prefable3", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34933 | "TestExampleInterface", "prefable3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34935( cx, "TestExampleInterface" , "prefable3", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34934 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject34935( cx, "TestExampleInterface" , "prefable3", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34935 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34935( cx, "TestExampleInterface" , "prefable3", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
34936 | ||||
34937 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34938 | bool result(MOZ_KnownLive(self)(self)->Prefable3()); | |||
34939 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34939); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34939; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34940 | args.rval().setBoolean(result); | |||
34941 | return true; | |||
34942 | } | |||
34943 | ||||
34944 | static const JSJitInfo prefable3_getterinfo = { | |||
34945 | { get_prefable3 }, | |||
34946 | { prototypes::id::TestExampleInterface }, | |||
34947 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34948 | JSJitInfo::Getter, | |||
34949 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34950 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
34951 | true, /* isInfallible. False in setters. */ | |||
34952 | false, /* isMovable. Not relevant for setters. */ | |||
34953 | false, /* isEliminatable. Not relevant for setters. */ | |||
34954 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34955 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34956 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34957 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34958 | }; | |||
34959 | ||||
34960 | MOZ_CAN_RUN_SCRIPT static bool | |||
34961 | get_prefable4(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
34962 | { | |||
34963 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34966( cx, "TestExampleInterface" , "prefable4", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34964 | "TestExampleInterface", "prefable4", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34966( cx, "TestExampleInterface" , "prefable4", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34965 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject34966( cx, "TestExampleInterface" , "prefable4", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34966 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34966( cx, "TestExampleInterface" , "prefable4", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
34967 | ||||
34968 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
34969 | bool result(MOZ_KnownLive(self)(self)->Prefable4()); | |||
34970 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 34970); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 34970; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
34971 | args.rval().setBoolean(result); | |||
34972 | return true; | |||
34973 | } | |||
34974 | ||||
34975 | static const JSJitInfo prefable4_getterinfo = { | |||
34976 | { get_prefable4 }, | |||
34977 | { prototypes::id::TestExampleInterface }, | |||
34978 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
34979 | JSJitInfo::Getter, | |||
34980 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
34981 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
34982 | true, /* isInfallible. False in setters. */ | |||
34983 | false, /* isMovable. Not relevant for setters. */ | |||
34984 | false, /* isEliminatable. Not relevant for setters. */ | |||
34985 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
34986 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
34987 | false, /* isTypedMethod. Only relevant for methods. */ | |||
34988 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
34989 | }; | |||
34990 | ||||
34991 | MOZ_CAN_RUN_SCRIPT static bool | |||
34992 | get_prefable5(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
34993 | { | |||
34994 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject34997( cx, "TestExampleInterface" , "prefable5", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34995 | "TestExampleInterface", "prefable5", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject34997( cx, "TestExampleInterface" , "prefable5", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34996 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject34997( cx, "TestExampleInterface" , "prefable5", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
34997 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject34997( cx, "TestExampleInterface" , "prefable5", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
34998 | ||||
34999 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35000 | bool result(MOZ_KnownLive(self)(self)->Prefable5()); | |||
35001 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35001); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35001; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35002 | args.rval().setBoolean(result); | |||
35003 | return true; | |||
35004 | } | |||
35005 | ||||
35006 | static const JSJitInfo prefable5_getterinfo = { | |||
35007 | { get_prefable5 }, | |||
35008 | { prototypes::id::TestExampleInterface }, | |||
35009 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35010 | JSJitInfo::Getter, | |||
35011 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35012 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35013 | true, /* isInfallible. False in setters. */ | |||
35014 | false, /* isMovable. Not relevant for setters. */ | |||
35015 | false, /* isEliminatable. Not relevant for setters. */ | |||
35016 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35017 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35018 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35019 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35020 | }; | |||
35021 | ||||
35022 | MOZ_CAN_RUN_SCRIPT static bool | |||
35023 | get_prefable6(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35024 | { | |||
35025 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35028( cx, "TestExampleInterface" , "prefable6", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35026 | "TestExampleInterface", "prefable6", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35028( cx, "TestExampleInterface" , "prefable6", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35027 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35028( cx, "TestExampleInterface" , "prefable6", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35028 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35028( cx, "TestExampleInterface" , "prefable6", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
35029 | ||||
35030 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35031 | bool result(MOZ_KnownLive(self)(self)->Prefable6()); | |||
35032 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35032); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35032; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35033 | args.rval().setBoolean(result); | |||
35034 | return true; | |||
35035 | } | |||
35036 | ||||
35037 | static const JSJitInfo prefable6_getterinfo = { | |||
35038 | { get_prefable6 }, | |||
35039 | { prototypes::id::TestExampleInterface }, | |||
35040 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35041 | JSJitInfo::Getter, | |||
35042 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35043 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35044 | true, /* isInfallible. False in setters. */ | |||
35045 | false, /* isMovable. Not relevant for setters. */ | |||
35046 | false, /* isEliminatable. Not relevant for setters. */ | |||
35047 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35048 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35049 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35050 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35051 | }; | |||
35052 | ||||
35053 | MOZ_CAN_RUN_SCRIPT static bool | |||
35054 | get_prefable7(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35055 | { | |||
35056 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35059( cx, "TestExampleInterface" , "prefable7", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35057 | "TestExampleInterface", "prefable7", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35059( cx, "TestExampleInterface" , "prefable7", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35058 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35059( cx, "TestExampleInterface" , "prefable7", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35059 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35059( cx, "TestExampleInterface" , "prefable7", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
35060 | ||||
35061 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35062 | bool result(MOZ_KnownLive(self)(self)->Prefable7()); | |||
35063 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35063); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35063; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35064 | args.rval().setBoolean(result); | |||
35065 | return true; | |||
35066 | } | |||
35067 | ||||
35068 | static const JSJitInfo prefable7_getterinfo = { | |||
35069 | { get_prefable7 }, | |||
35070 | { prototypes::id::TestExampleInterface }, | |||
35071 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35072 | JSJitInfo::Getter, | |||
35073 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35074 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35075 | true, /* isInfallible. False in setters. */ | |||
35076 | false, /* isMovable. Not relevant for setters. */ | |||
35077 | false, /* isEliminatable. Not relevant for setters. */ | |||
35078 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35079 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35080 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35081 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35082 | }; | |||
35083 | ||||
35084 | MOZ_CAN_RUN_SCRIPT static bool | |||
35085 | get_prefable8(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35086 | { | |||
35087 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35090( cx, "TestExampleInterface" , "prefable8", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35088 | "TestExampleInterface", "prefable8", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35090( cx, "TestExampleInterface" , "prefable8", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35089 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35090( cx, "TestExampleInterface" , "prefable8", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35090 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35090( cx, "TestExampleInterface" , "prefable8", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
35091 | ||||
35092 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35093 | bool result(MOZ_KnownLive(self)(self)->Prefable8()); | |||
35094 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35094); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35094; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35095 | args.rval().setBoolean(result); | |||
35096 | return true; | |||
35097 | } | |||
35098 | ||||
35099 | static const JSJitInfo prefable8_getterinfo = { | |||
35100 | { get_prefable8 }, | |||
35101 | { prototypes::id::TestExampleInterface }, | |||
35102 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35103 | JSJitInfo::Getter, | |||
35104 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35105 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35106 | true, /* isInfallible. False in setters. */ | |||
35107 | false, /* isMovable. Not relevant for setters. */ | |||
35108 | false, /* isEliminatable. Not relevant for setters. */ | |||
35109 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35110 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35111 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35112 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35113 | }; | |||
35114 | ||||
35115 | MOZ_CAN_RUN_SCRIPT static bool | |||
35116 | get_prefable9(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35117 | { | |||
35118 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35121( cx, "TestExampleInterface" , "prefable9", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35119 | "TestExampleInterface", "prefable9", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35121( cx, "TestExampleInterface" , "prefable9", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35120 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35121( cx, "TestExampleInterface" , "prefable9", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
35121 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35121( cx, "TestExampleInterface" , "prefable9", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
35122 | ||||
35123 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35124 | bool result(MOZ_KnownLive(self)(self)->Prefable9()); | |||
35125 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35125); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35125; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35126 | args.rval().setBoolean(result); | |||
35127 | return true; | |||
35128 | } | |||
35129 | ||||
35130 | static const JSJitInfo prefable9_getterinfo = { | |||
35131 | { get_prefable9 }, | |||
35132 | { prototypes::id::TestExampleInterface }, | |||
35133 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35134 | JSJitInfo::Getter, | |||
35135 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35136 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35137 | true, /* isInfallible. False in setters. */ | |||
35138 | false, /* isMovable. Not relevant for setters. */ | |||
35139 | false, /* isEliminatable. Not relevant for setters. */ | |||
35140 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35141 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35142 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35143 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35144 | }; | |||
35145 | ||||
35146 | MOZ_CAN_RUN_SCRIPT static bool | |||
35147 | prefable10(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35148 | { | |||
35149 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35152( cx, "TestExampleInterface" , "prefable10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35150 | "TestExampleInterface", "prefable10", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35152( cx, "TestExampleInterface" , "prefable10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35151 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35152( cx, "TestExampleInterface" , "prefable10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35152 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35152( cx, "TestExampleInterface" , "prefable10", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35153 | ||||
35154 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35155 | // NOTE: This assert does NOT call the function. | |||
35156 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Prefable10())>, "Should be returning void here"); | |||
35157 | MOZ_KnownLive(self)(self)->Prefable10(); | |||
35158 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35158); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35158; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35159 | args.rval().setUndefined(); | |||
35160 | return true; | |||
35161 | } | |||
35162 | ||||
35163 | static const JSJitInfo prefable10_methodinfo = { | |||
35164 | { (JSJitGetterOp)prefable10 }, | |||
35165 | { prototypes::id::TestExampleInterface }, | |||
35166 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35167 | JSJitInfo::Method, | |||
35168 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35169 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35170 | true, /* isInfallible. False in setters. */ | |||
35171 | false, /* isMovable. Not relevant for setters. */ | |||
35172 | false, /* isEliminatable. Not relevant for setters. */ | |||
35173 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35174 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35175 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35176 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35177 | }; | |||
35178 | ||||
35179 | MOZ_CAN_RUN_SCRIPT static bool | |||
35180 | prefable11(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35181 | { | |||
35182 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35185( cx, "TestExampleInterface" , "prefable11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35183 | "TestExampleInterface", "prefable11", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35185( cx, "TestExampleInterface" , "prefable11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35184 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35185( cx, "TestExampleInterface" , "prefable11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35185 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35185( cx, "TestExampleInterface" , "prefable11", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35186 | ||||
35187 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35188 | // NOTE: This assert does NOT call the function. | |||
35189 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Prefable11())>, "Should be returning void here"); | |||
35190 | MOZ_KnownLive(self)(self)->Prefable11(); | |||
35191 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35191); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35191; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35192 | args.rval().setUndefined(); | |||
35193 | return true; | |||
35194 | } | |||
35195 | ||||
35196 | static const JSJitInfo prefable11_methodinfo = { | |||
35197 | { (JSJitGetterOp)prefable11 }, | |||
35198 | { prototypes::id::TestExampleInterface }, | |||
35199 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35200 | JSJitInfo::Method, | |||
35201 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35202 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35203 | true, /* isInfallible. False in setters. */ | |||
35204 | false, /* isMovable. Not relevant for setters. */ | |||
35205 | false, /* isEliminatable. Not relevant for setters. */ | |||
35206 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35207 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35208 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35209 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35210 | }; | |||
35211 | ||||
35212 | MOZ_CAN_RUN_SCRIPT static bool | |||
35213 | get_prefable12(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35214 | { | |||
35215 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35218( cx, "TestExampleInterface" , "prefable12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35216 | "TestExampleInterface", "prefable12", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35218( cx, "TestExampleInterface" , "prefable12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35217 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35218( cx, "TestExampleInterface" , "prefable12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35218 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35218( cx, "TestExampleInterface" , "prefable12", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35219 | ||||
35220 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35221 | bool result(MOZ_KnownLive(self)(self)->Prefable12()); | |||
35222 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35222); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35222; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35223 | args.rval().setBoolean(result); | |||
35224 | return true; | |||
35225 | } | |||
35226 | ||||
35227 | static const JSJitInfo prefable12_getterinfo = { | |||
35228 | { get_prefable12 }, | |||
35229 | { prototypes::id::TestExampleInterface }, | |||
35230 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35231 | JSJitInfo::Getter, | |||
35232 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35233 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35234 | true, /* isInfallible. False in setters. */ | |||
35235 | false, /* isMovable. Not relevant for setters. */ | |||
35236 | false, /* isEliminatable. Not relevant for setters. */ | |||
35237 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35238 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35239 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35240 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35241 | }; | |||
35242 | ||||
35243 | MOZ_CAN_RUN_SCRIPT static bool | |||
35244 | prefable13(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35245 | { | |||
35246 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35249( cx, "TestExampleInterface" , "prefable13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35247 | "TestExampleInterface", "prefable13", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35249( cx, "TestExampleInterface" , "prefable13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35248 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35249( cx, "TestExampleInterface" , "prefable13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35249 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35249( cx, "TestExampleInterface" , "prefable13", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35250 | ||||
35251 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35252 | // NOTE: This assert does NOT call the function. | |||
35253 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Prefable13())>, "Should be returning void here"); | |||
35254 | MOZ_KnownLive(self)(self)->Prefable13(); | |||
35255 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35255); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35255; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35256 | args.rval().setUndefined(); | |||
35257 | return true; | |||
35258 | } | |||
35259 | ||||
35260 | static const JSJitInfo prefable13_methodinfo = { | |||
35261 | { (JSJitGetterOp)prefable13 }, | |||
35262 | { prototypes::id::TestExampleInterface }, | |||
35263 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35264 | JSJitInfo::Method, | |||
35265 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35266 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35267 | true, /* isInfallible. False in setters. */ | |||
35268 | false, /* isMovable. Not relevant for setters. */ | |||
35269 | false, /* isEliminatable. Not relevant for setters. */ | |||
35270 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35271 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35272 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35273 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35274 | }; | |||
35275 | ||||
35276 | MOZ_CAN_RUN_SCRIPT static bool | |||
35277 | get_prefable14(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35278 | { | |||
35279 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35282( cx, "TestExampleInterface" , "prefable14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35280 | "TestExampleInterface", "prefable14", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35282( cx, "TestExampleInterface" , "prefable14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35281 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35282( cx, "TestExampleInterface" , "prefable14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35282 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35282( cx, "TestExampleInterface" , "prefable14", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35283 | ||||
35284 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35285 | bool result(MOZ_KnownLive(self)(self)->Prefable14()); | |||
35286 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35286); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35286; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35287 | args.rval().setBoolean(result); | |||
35288 | return true; | |||
35289 | } | |||
35290 | ||||
35291 | static const JSJitInfo prefable14_getterinfo = { | |||
35292 | { get_prefable14 }, | |||
35293 | { prototypes::id::TestExampleInterface }, | |||
35294 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35295 | JSJitInfo::Getter, | |||
35296 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35297 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35298 | true, /* isInfallible. False in setters. */ | |||
35299 | false, /* isMovable. Not relevant for setters. */ | |||
35300 | false, /* isEliminatable. Not relevant for setters. */ | |||
35301 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35302 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35303 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35304 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35305 | }; | |||
35306 | ||||
35307 | MOZ_CAN_RUN_SCRIPT static bool | |||
35308 | get_prefable15(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35309 | { | |||
35310 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35313( cx, "TestExampleInterface" , "prefable15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35311 | "TestExampleInterface", "prefable15", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35313( cx, "TestExampleInterface" , "prefable15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35312 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35313( cx, "TestExampleInterface" , "prefable15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35313 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35313( cx, "TestExampleInterface" , "prefable15", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35314 | ||||
35315 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35316 | bool result(MOZ_KnownLive(self)(self)->Prefable15()); | |||
35317 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35317); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35317; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35318 | args.rval().setBoolean(result); | |||
35319 | return true; | |||
35320 | } | |||
35321 | ||||
35322 | static const JSJitInfo prefable15_getterinfo = { | |||
35323 | { get_prefable15 }, | |||
35324 | { prototypes::id::TestExampleInterface }, | |||
35325 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35326 | JSJitInfo::Getter, | |||
35327 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35328 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35329 | true, /* isInfallible. False in setters. */ | |||
35330 | false, /* isMovable. Not relevant for setters. */ | |||
35331 | false, /* isEliminatable. Not relevant for setters. */ | |||
35332 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35333 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35334 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35335 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35336 | }; | |||
35337 | ||||
35338 | MOZ_CAN_RUN_SCRIPT static bool | |||
35339 | get_prefable16(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35340 | { | |||
35341 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35344( cx, "TestExampleInterface" , "prefable16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35342 | "TestExampleInterface", "prefable16", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35344( cx, "TestExampleInterface" , "prefable16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35343 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35344( cx, "TestExampleInterface" , "prefable16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35344 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35344( cx, "TestExampleInterface" , "prefable16", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35345 | ||||
35346 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35347 | bool result(MOZ_KnownLive(self)(self)->Prefable16()); | |||
35348 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35348); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35348; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35349 | args.rval().setBoolean(result); | |||
35350 | return true; | |||
35351 | } | |||
35352 | ||||
35353 | static const JSJitInfo prefable16_getterinfo = { | |||
35354 | { get_prefable16 }, | |||
35355 | { prototypes::id::TestExampleInterface }, | |||
35356 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35357 | JSJitInfo::Getter, | |||
35358 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35359 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35360 | true, /* isInfallible. False in setters. */ | |||
35361 | false, /* isMovable. Not relevant for setters. */ | |||
35362 | false, /* isEliminatable. Not relevant for setters. */ | |||
35363 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35364 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35365 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35366 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35367 | }; | |||
35368 | ||||
35369 | MOZ_CAN_RUN_SCRIPT static bool | |||
35370 | prefable17(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35371 | { | |||
35372 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35375( cx, "TestExampleInterface" , "prefable17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35373 | "TestExampleInterface", "prefable17", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35375( cx, "TestExampleInterface" , "prefable17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35374 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35375( cx, "TestExampleInterface" , "prefable17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35375 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35375( cx, "TestExampleInterface" , "prefable17", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35376 | ||||
35377 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35378 | // NOTE: This assert does NOT call the function. | |||
35379 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Prefable17())>, "Should be returning void here"); | |||
35380 | MOZ_KnownLive(self)(self)->Prefable17(); | |||
35381 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35381); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35381; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35382 | args.rval().setUndefined(); | |||
35383 | return true; | |||
35384 | } | |||
35385 | ||||
35386 | static const JSJitInfo prefable17_methodinfo = { | |||
35387 | { (JSJitGetterOp)prefable17 }, | |||
35388 | { prototypes::id::TestExampleInterface }, | |||
35389 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35390 | JSJitInfo::Method, | |||
35391 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35392 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35393 | true, /* isInfallible. False in setters. */ | |||
35394 | false, /* isMovable. Not relevant for setters. */ | |||
35395 | false, /* isEliminatable. Not relevant for setters. */ | |||
35396 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35397 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35398 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35399 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35400 | }; | |||
35401 | ||||
35402 | MOZ_CAN_RUN_SCRIPT static bool | |||
35403 | prefable18(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35404 | { | |||
35405 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35408( cx, "TestExampleInterface" , "prefable18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35406 | "TestExampleInterface", "prefable18", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35408( cx, "TestExampleInterface" , "prefable18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35407 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35408( cx, "TestExampleInterface" , "prefable18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35408 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35408( cx, "TestExampleInterface" , "prefable18", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35409 | ||||
35410 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35411 | // NOTE: This assert does NOT call the function. | |||
35412 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Prefable18())>, "Should be returning void here"); | |||
35413 | MOZ_KnownLive(self)(self)->Prefable18(); | |||
35414 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35414); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35414; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35415 | args.rval().setUndefined(); | |||
35416 | return true; | |||
35417 | } | |||
35418 | ||||
35419 | static const JSJitInfo prefable18_methodinfo = { | |||
35420 | { (JSJitGetterOp)prefable18 }, | |||
35421 | { prototypes::id::TestExampleInterface }, | |||
35422 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35423 | JSJitInfo::Method, | |||
35424 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35425 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35426 | true, /* isInfallible. False in setters. */ | |||
35427 | false, /* isMovable. Not relevant for setters. */ | |||
35428 | false, /* isEliminatable. Not relevant for setters. */ | |||
35429 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35430 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35431 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35432 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35433 | }; | |||
35434 | ||||
35435 | MOZ_CAN_RUN_SCRIPT static bool | |||
35436 | prefable19(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35437 | { | |||
35438 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35441( cx, "TestExampleInterface" , "prefable19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35439 | "TestExampleInterface", "prefable19", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35441( cx, "TestExampleInterface" , "prefable19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35440 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35441( cx, "TestExampleInterface" , "prefable19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35441 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35441( cx, "TestExampleInterface" , "prefable19", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35442 | ||||
35443 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35444 | // NOTE: This assert does NOT call the function. | |||
35445 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Prefable19())>, "Should be returning void here"); | |||
35446 | MOZ_KnownLive(self)(self)->Prefable19(); | |||
35447 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35447); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35447; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35448 | args.rval().setUndefined(); | |||
35449 | return true; | |||
35450 | } | |||
35451 | ||||
35452 | static const JSJitInfo prefable19_methodinfo = { | |||
35453 | { (JSJitGetterOp)prefable19 }, | |||
35454 | { prototypes::id::TestExampleInterface }, | |||
35455 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35456 | JSJitInfo::Method, | |||
35457 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35458 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35459 | true, /* isInfallible. False in setters. */ | |||
35460 | false, /* isMovable. Not relevant for setters. */ | |||
35461 | false, /* isEliminatable. Not relevant for setters. */ | |||
35462 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35463 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35464 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35465 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35466 | }; | |||
35467 | ||||
35468 | MOZ_CAN_RUN_SCRIPT static bool | |||
35469 | prefable20(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35470 | { | |||
35471 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35474( cx, "TestExampleInterface" , "prefable20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35472 | "TestExampleInterface", "prefable20", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35474( cx, "TestExampleInterface" , "prefable20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35473 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35474( cx, "TestExampleInterface" , "prefable20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35474 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35474( cx, "TestExampleInterface" , "prefable20", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35475 | ||||
35476 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35477 | // NOTE: This assert does NOT call the function. | |||
35478 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Prefable20())>, "Should be returning void here"); | |||
35479 | MOZ_KnownLive(self)(self)->Prefable20(); | |||
35480 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35480); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35480; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35481 | args.rval().setUndefined(); | |||
35482 | return true; | |||
35483 | } | |||
35484 | ||||
35485 | static const JSJitInfo prefable20_methodinfo = { | |||
35486 | { (JSJitGetterOp)prefable20 }, | |||
35487 | { prototypes::id::TestExampleInterface }, | |||
35488 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35489 | JSJitInfo::Method, | |||
35490 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35491 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35492 | true, /* isInfallible. False in setters. */ | |||
35493 | false, /* isMovable. Not relevant for setters. */ | |||
35494 | false, /* isEliminatable. Not relevant for setters. */ | |||
35495 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35496 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35497 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35498 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35499 | }; | |||
35500 | ||||
35501 | MOZ_CAN_RUN_SCRIPT static bool | |||
35502 | get_prefable21(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35503 | { | |||
35504 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35507( cx, "TestExampleInterface" , "prefable21", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35505 | "TestExampleInterface", "prefable21", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35507( cx, "TestExampleInterface" , "prefable21", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35506 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35507( cx, "TestExampleInterface" , "prefable21", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35507 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35507( cx, "TestExampleInterface" , "prefable21", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35508 | ||||
35509 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35510 | bool result(MOZ_KnownLive(self)(self)->Prefable21()); | |||
35511 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35511); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35511; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35512 | args.rval().setBoolean(result); | |||
35513 | return true; | |||
35514 | } | |||
35515 | ||||
35516 | static const JSJitInfo prefable21_getterinfo = { | |||
35517 | { get_prefable21 }, | |||
35518 | { prototypes::id::TestExampleInterface }, | |||
35519 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35520 | JSJitInfo::Getter, | |||
35521 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35522 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35523 | true, /* isInfallible. False in setters. */ | |||
35524 | false, /* isMovable. Not relevant for setters. */ | |||
35525 | false, /* isEliminatable. Not relevant for setters. */ | |||
35526 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35527 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35528 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35529 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35530 | }; | |||
35531 | ||||
35532 | MOZ_CAN_RUN_SCRIPT static bool | |||
35533 | get_prefable22(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35534 | { | |||
35535 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35538( cx, "TestExampleInterface" , "prefable22", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35536 | "TestExampleInterface", "prefable22", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35538( cx, "TestExampleInterface" , "prefable22", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35537 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35538( cx, "TestExampleInterface" , "prefable22", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35538 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35538( cx, "TestExampleInterface" , "prefable22", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35539 | ||||
35540 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35541 | bool result(MOZ_KnownLive(self)(self)->Prefable22()); | |||
35542 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35542); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35542; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35543 | args.rval().setBoolean(result); | |||
35544 | return true; | |||
35545 | } | |||
35546 | ||||
35547 | static const JSJitInfo prefable22_getterinfo = { | |||
35548 | { get_prefable22 }, | |||
35549 | { prototypes::id::TestExampleInterface }, | |||
35550 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35551 | JSJitInfo::Getter, | |||
35552 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35553 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35554 | true, /* isInfallible. False in setters. */ | |||
35555 | false, /* isMovable. Not relevant for setters. */ | |||
35556 | false, /* isEliminatable. Not relevant for setters. */ | |||
35557 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35558 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35559 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35560 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35561 | }; | |||
35562 | ||||
35563 | MOZ_CAN_RUN_SCRIPT static bool | |||
35564 | get_conditionalOnSecureContext1(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35565 | { | |||
35566 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35569( cx, "TestExampleInterface" , "conditionalOnSecureContext1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35567 | "TestExampleInterface", "conditionalOnSecureContext1", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35569( cx, "TestExampleInterface" , "conditionalOnSecureContext1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35568 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35569( cx, "TestExampleInterface" , "conditionalOnSecureContext1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35569 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35569( cx, "TestExampleInterface" , "conditionalOnSecureContext1", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35570 | ||||
35571 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35572 | bool result(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext1()); | |||
35573 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35573); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35573; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35574 | args.rval().setBoolean(result); | |||
35575 | return true; | |||
35576 | } | |||
35577 | ||||
35578 | static const JSJitInfo conditionalOnSecureContext1_getterinfo = { | |||
35579 | { get_conditionalOnSecureContext1 }, | |||
35580 | { prototypes::id::TestExampleInterface }, | |||
35581 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35582 | JSJitInfo::Getter, | |||
35583 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35584 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35585 | true, /* isInfallible. False in setters. */ | |||
35586 | false, /* isMovable. Not relevant for setters. */ | |||
35587 | false, /* isEliminatable. Not relevant for setters. */ | |||
35588 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35589 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35590 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35591 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35592 | }; | |||
35593 | ||||
35594 | MOZ_CAN_RUN_SCRIPT static bool | |||
35595 | get_conditionalOnSecureContext2(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35596 | { | |||
35597 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35600( cx, "TestExampleInterface" , "conditionalOnSecureContext2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35598 | "TestExampleInterface", "conditionalOnSecureContext2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35600( cx, "TestExampleInterface" , "conditionalOnSecureContext2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35599 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35600( cx, "TestExampleInterface" , "conditionalOnSecureContext2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35600 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35600( cx, "TestExampleInterface" , "conditionalOnSecureContext2", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35601 | ||||
35602 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35603 | bool result(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext2()); | |||
35604 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35604); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35604; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35605 | args.rval().setBoolean(result); | |||
35606 | return true; | |||
35607 | } | |||
35608 | ||||
35609 | static const JSJitInfo conditionalOnSecureContext2_getterinfo = { | |||
35610 | { get_conditionalOnSecureContext2 }, | |||
35611 | { prototypes::id::TestExampleInterface }, | |||
35612 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35613 | JSJitInfo::Getter, | |||
35614 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35615 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35616 | true, /* isInfallible. False in setters. */ | |||
35617 | false, /* isMovable. Not relevant for setters. */ | |||
35618 | false, /* isEliminatable. Not relevant for setters. */ | |||
35619 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35620 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35621 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35622 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35623 | }; | |||
35624 | ||||
35625 | MOZ_CAN_RUN_SCRIPT static bool | |||
35626 | get_conditionalOnSecureContext3(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35627 | { | |||
35628 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35631( cx, "TestExampleInterface" , "conditionalOnSecureContext3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35629 | "TestExampleInterface", "conditionalOnSecureContext3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35631( cx, "TestExampleInterface" , "conditionalOnSecureContext3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35630 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35631( cx, "TestExampleInterface" , "conditionalOnSecureContext3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35631 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35631( cx, "TestExampleInterface" , "conditionalOnSecureContext3", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35632 | ||||
35633 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35634 | bool result(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext3()); | |||
35635 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35635); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35635; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35636 | args.rval().setBoolean(result); | |||
35637 | return true; | |||
35638 | } | |||
35639 | ||||
35640 | static const JSJitInfo conditionalOnSecureContext3_getterinfo = { | |||
35641 | { get_conditionalOnSecureContext3 }, | |||
35642 | { prototypes::id::TestExampleInterface }, | |||
35643 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35644 | JSJitInfo::Getter, | |||
35645 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35646 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35647 | true, /* isInfallible. False in setters. */ | |||
35648 | false, /* isMovable. Not relevant for setters. */ | |||
35649 | false, /* isEliminatable. Not relevant for setters. */ | |||
35650 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35651 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35652 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35653 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35654 | }; | |||
35655 | ||||
35656 | MOZ_CAN_RUN_SCRIPT static bool | |||
35657 | get_conditionalOnSecureContext4(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35658 | { | |||
35659 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35662( cx, "TestExampleInterface" , "conditionalOnSecureContext4", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35660 | "TestExampleInterface", "conditionalOnSecureContext4", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35662( cx, "TestExampleInterface" , "conditionalOnSecureContext4", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35661 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35662( cx, "TestExampleInterface" , "conditionalOnSecureContext4", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35662 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35662( cx, "TestExampleInterface" , "conditionalOnSecureContext4", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35663 | ||||
35664 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35665 | bool result(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext4()); | |||
35666 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35666); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35666; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35667 | args.rval().setBoolean(result); | |||
35668 | return true; | |||
35669 | } | |||
35670 | ||||
35671 | static const JSJitInfo conditionalOnSecureContext4_getterinfo = { | |||
35672 | { get_conditionalOnSecureContext4 }, | |||
35673 | { prototypes::id::TestExampleInterface }, | |||
35674 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35675 | JSJitInfo::Getter, | |||
35676 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35677 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35678 | true, /* isInfallible. False in setters. */ | |||
35679 | false, /* isMovable. Not relevant for setters. */ | |||
35680 | false, /* isEliminatable. Not relevant for setters. */ | |||
35681 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35682 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35683 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35684 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35685 | }; | |||
35686 | ||||
35687 | MOZ_CAN_RUN_SCRIPT static bool | |||
35688 | conditionalOnSecureContext5(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35689 | { | |||
35690 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35693( cx, "TestExampleInterface" , "conditionalOnSecureContext5", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35691 | "TestExampleInterface", "conditionalOnSecureContext5", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35693( cx, "TestExampleInterface" , "conditionalOnSecureContext5", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35692 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35693( cx, "TestExampleInterface" , "conditionalOnSecureContext5", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35693 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35693( cx, "TestExampleInterface" , "conditionalOnSecureContext5", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35694 | ||||
35695 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35696 | // NOTE: This assert does NOT call the function. | |||
35697 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext5())>, "Should be returning void here"); | |||
35698 | MOZ_KnownLive(self)(self)->ConditionalOnSecureContext5(); | |||
35699 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35699); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35699; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35700 | args.rval().setUndefined(); | |||
35701 | return true; | |||
35702 | } | |||
35703 | ||||
35704 | static const JSJitInfo conditionalOnSecureContext5_methodinfo = { | |||
35705 | { (JSJitGetterOp)conditionalOnSecureContext5 }, | |||
35706 | { prototypes::id::TestExampleInterface }, | |||
35707 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35708 | JSJitInfo::Method, | |||
35709 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35710 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35711 | true, /* isInfallible. False in setters. */ | |||
35712 | false, /* isMovable. Not relevant for setters. */ | |||
35713 | false, /* isEliminatable. Not relevant for setters. */ | |||
35714 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35715 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35716 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35717 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35718 | }; | |||
35719 | ||||
35720 | MOZ_CAN_RUN_SCRIPT static bool | |||
35721 | conditionalOnSecureContext6(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35722 | { | |||
35723 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35726( cx, "TestExampleInterface" , "conditionalOnSecureContext6", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35724 | "TestExampleInterface", "conditionalOnSecureContext6", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35726( cx, "TestExampleInterface" , "conditionalOnSecureContext6", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35725 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35726( cx, "TestExampleInterface" , "conditionalOnSecureContext6", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35726 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35726( cx, "TestExampleInterface" , "conditionalOnSecureContext6", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35727 | ||||
35728 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35729 | // NOTE: This assert does NOT call the function. | |||
35730 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext6())>, "Should be returning void here"); | |||
35731 | MOZ_KnownLive(self)(self)->ConditionalOnSecureContext6(); | |||
35732 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35732); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35732; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35733 | args.rval().setUndefined(); | |||
35734 | return true; | |||
35735 | } | |||
35736 | ||||
35737 | static const JSJitInfo conditionalOnSecureContext6_methodinfo = { | |||
35738 | { (JSJitGetterOp)conditionalOnSecureContext6 }, | |||
35739 | { prototypes::id::TestExampleInterface }, | |||
35740 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35741 | JSJitInfo::Method, | |||
35742 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35743 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35744 | true, /* isInfallible. False in setters. */ | |||
35745 | false, /* isMovable. Not relevant for setters. */ | |||
35746 | false, /* isEliminatable. Not relevant for setters. */ | |||
35747 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35748 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35749 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35750 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35751 | }; | |||
35752 | ||||
35753 | MOZ_CAN_RUN_SCRIPT static bool | |||
35754 | conditionalOnSecureContext7(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35755 | { | |||
35756 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35759( cx, "TestExampleInterface" , "conditionalOnSecureContext7", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35757 | "TestExampleInterface", "conditionalOnSecureContext7", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35759( cx, "TestExampleInterface" , "conditionalOnSecureContext7", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35758 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35759( cx, "TestExampleInterface" , "conditionalOnSecureContext7", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35759 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35759( cx, "TestExampleInterface" , "conditionalOnSecureContext7", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35760 | ||||
35761 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35762 | // NOTE: This assert does NOT call the function. | |||
35763 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext7())>, "Should be returning void here"); | |||
35764 | MOZ_KnownLive(self)(self)->ConditionalOnSecureContext7(); | |||
35765 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35765); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35765; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35766 | args.rval().setUndefined(); | |||
35767 | return true; | |||
35768 | } | |||
35769 | ||||
35770 | static const JSJitInfo conditionalOnSecureContext7_methodinfo = { | |||
35771 | { (JSJitGetterOp)conditionalOnSecureContext7 }, | |||
35772 | { prototypes::id::TestExampleInterface }, | |||
35773 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35774 | JSJitInfo::Method, | |||
35775 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35776 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35777 | true, /* isInfallible. False in setters. */ | |||
35778 | false, /* isMovable. Not relevant for setters. */ | |||
35779 | false, /* isEliminatable. Not relevant for setters. */ | |||
35780 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35781 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35782 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35783 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35784 | }; | |||
35785 | ||||
35786 | MOZ_CAN_RUN_SCRIPT static bool | |||
35787 | conditionalOnSecureContext8(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35788 | { | |||
35789 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35792( cx, "TestExampleInterface" , "conditionalOnSecureContext8", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35790 | "TestExampleInterface", "conditionalOnSecureContext8", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35792( cx, "TestExampleInterface" , "conditionalOnSecureContext8", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35791 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35792( cx, "TestExampleInterface" , "conditionalOnSecureContext8", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35792 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35792( cx, "TestExampleInterface" , "conditionalOnSecureContext8", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35793 | ||||
35794 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35795 | // NOTE: This assert does NOT call the function. | |||
35796 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext8())>, "Should be returning void here"); | |||
35797 | MOZ_KnownLive(self)(self)->ConditionalOnSecureContext8(); | |||
35798 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35798); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35798; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35799 | args.rval().setUndefined(); | |||
35800 | return true; | |||
35801 | } | |||
35802 | ||||
35803 | static const JSJitInfo conditionalOnSecureContext8_methodinfo = { | |||
35804 | { (JSJitGetterOp)conditionalOnSecureContext8 }, | |||
35805 | { prototypes::id::TestExampleInterface }, | |||
35806 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35807 | JSJitInfo::Method, | |||
35808 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35809 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35810 | true, /* isInfallible. False in setters. */ | |||
35811 | false, /* isMovable. Not relevant for setters. */ | |||
35812 | false, /* isEliminatable. Not relevant for setters. */ | |||
35813 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35814 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35815 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35816 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35817 | }; | |||
35818 | ||||
35819 | MOZ_CAN_RUN_SCRIPT static bool | |||
35820 | get_conditionalOnSecureContext9(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35821 | { | |||
35822 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35825( cx, "TestExampleInterface" , "conditionalOnSecureContext9", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35823 | "TestExampleInterface", "conditionalOnSecureContext9", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35825( cx, "TestExampleInterface" , "conditionalOnSecureContext9", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35824 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35825( cx, "TestExampleInterface" , "conditionalOnSecureContext9", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35825 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35825( cx, "TestExampleInterface" , "conditionalOnSecureContext9", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35826 | ||||
35827 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35828 | bool result(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext9()); | |||
35829 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35829); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35829; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35830 | args.rval().setBoolean(result); | |||
35831 | return true; | |||
35832 | } | |||
35833 | ||||
35834 | static const JSJitInfo conditionalOnSecureContext9_getterinfo = { | |||
35835 | { get_conditionalOnSecureContext9 }, | |||
35836 | { prototypes::id::TestExampleInterface }, | |||
35837 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35838 | JSJitInfo::Getter, | |||
35839 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35840 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
35841 | true, /* isInfallible. False in setters. */ | |||
35842 | false, /* isMovable. Not relevant for setters. */ | |||
35843 | false, /* isEliminatable. Not relevant for setters. */ | |||
35844 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35845 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35846 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35847 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35848 | }; | |||
35849 | ||||
35850 | MOZ_CAN_RUN_SCRIPT static bool | |||
35851 | conditionalOnSecureContext10(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
35852 | { | |||
35853 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35856( cx, "TestExampleInterface" , "conditionalOnSecureContext10", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35854 | "TestExampleInterface", "conditionalOnSecureContext10", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35856( cx, "TestExampleInterface" , "conditionalOnSecureContext10", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35855 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject35856( cx, "TestExampleInterface" , "conditionalOnSecureContext10", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
35856 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35856( cx, "TestExampleInterface" , "conditionalOnSecureContext10", JS::ProfilingCategoryPair:: DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
35857 | ||||
35858 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35859 | // NOTE: This assert does NOT call the function. | |||
35860 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ConditionalOnSecureContext10())>, "Should be returning void here"); | |||
35861 | MOZ_KnownLive(self)(self)->ConditionalOnSecureContext10(); | |||
35862 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35862); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35862; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35863 | args.rval().setUndefined(); | |||
35864 | return true; | |||
35865 | } | |||
35866 | ||||
35867 | static const JSJitInfo conditionalOnSecureContext10_methodinfo = { | |||
35868 | { (JSJitGetterOp)conditionalOnSecureContext10 }, | |||
35869 | { prototypes::id::TestExampleInterface }, | |||
35870 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35871 | JSJitInfo::Method, | |||
35872 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35873 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35874 | true, /* isInfallible. False in setters. */ | |||
35875 | false, /* isMovable. Not relevant for setters. */ | |||
35876 | false, /* isEliminatable. Not relevant for setters. */ | |||
35877 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35878 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35879 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35880 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35881 | }; | |||
35882 | ||||
35883 | MOZ_CAN_RUN_SCRIPT static bool | |||
35884 | get_attrWithLenientThis(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35885 | { | |||
35886 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35889( cx, "TestExampleInterface" , "attrWithLenientThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35887 | "TestExampleInterface", "attrWithLenientThis", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35889( cx, "TestExampleInterface" , "attrWithLenientThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35888 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35889( cx, "TestExampleInterface" , "attrWithLenientThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35889 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35889( cx, "TestExampleInterface" , "attrWithLenientThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35890 | ||||
35891 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35892 | int32_t result(MOZ_KnownLive(self)(self)->AttrWithLenientThis()); | |||
35893 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35893); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35893; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35894 | args.rval().setInt32(int32_t(result)); | |||
35895 | return true; | |||
35896 | } | |||
35897 | ||||
35898 | MOZ_CAN_RUN_SCRIPT static bool | |||
35899 | set_attrWithLenientThis(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
35900 | { | |||
35901 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35904( cx, "TestExampleInterface" , "attrWithLenientThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35902 | "TestExampleInterface", "attrWithLenientThis", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35904( cx, "TestExampleInterface" , "attrWithLenientThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35903 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject35904( cx, "TestExampleInterface" , "attrWithLenientThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35904 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35904( cx, "TestExampleInterface" , "attrWithLenientThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35905 | ||||
35906 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35907 | int32_t arg0; | |||
35908 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
35909 | return false; | |||
35910 | } | |||
35911 | // NOTE: This assert does NOT call the function. | |||
35912 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetAttrWithLenientThis(arg0))>, "Should be returning void here"); | |||
35913 | MOZ_KnownLive(self)(self)->SetAttrWithLenientThis(arg0); | |||
35914 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35914); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35914; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35915 | ||||
35916 | return true; | |||
35917 | } | |||
35918 | ||||
35919 | static const JSJitInfo attrWithLenientThis_getterinfo = { | |||
35920 | { get_attrWithLenientThis }, | |||
35921 | { prototypes::id::TestExampleInterface }, | |||
35922 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35923 | JSJitInfo::Getter, | |||
35924 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35925 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
35926 | true, /* isInfallible. False in setters. */ | |||
35927 | false, /* isMovable. Not relevant for setters. */ | |||
35928 | false, /* isEliminatable. Not relevant for setters. */ | |||
35929 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35930 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35931 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35932 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35933 | }; | |||
35934 | static const JSJitInfo attrWithLenientThis_setterinfo = { | |||
35935 | { (JSJitGetterOp)set_attrWithLenientThis }, | |||
35936 | { prototypes::id::TestExampleInterface }, | |||
35937 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35938 | JSJitInfo::Setter, | |||
35939 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35940 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
35941 | false, /* isInfallible. False in setters. */ | |||
35942 | false, /* isMovable. Not relevant for setters. */ | |||
35943 | false, /* isEliminatable. Not relevant for setters. */ | |||
35944 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35945 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35946 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35947 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35948 | }; | |||
35949 | ||||
35950 | MOZ_CAN_RUN_SCRIPT static bool | |||
35951 | get_unforgeableAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35952 | { | |||
35953 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35956( cx, "TestExampleInterface" , "unforgeableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35954 | "TestExampleInterface", "unforgeableAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35956( cx, "TestExampleInterface" , "unforgeableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35955 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35956( cx, "TestExampleInterface" , "unforgeableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35956 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35956( cx, "TestExampleInterface" , "unforgeableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35957 | ||||
35958 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35959 | int32_t result(MOZ_KnownLive(self)(self)->UnforgeableAttr()); | |||
35960 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35960); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35960; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35961 | args.rval().setInt32(int32_t(result)); | |||
35962 | return true; | |||
35963 | } | |||
35964 | ||||
35965 | static const JSJitInfo unforgeableAttr_getterinfo = { | |||
35966 | { get_unforgeableAttr }, | |||
35967 | { prototypes::id::TestExampleInterface }, | |||
35968 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
35969 | JSJitInfo::Getter, | |||
35970 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
35971 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
35972 | true, /* isInfallible. False in setters. */ | |||
35973 | false, /* isMovable. Not relevant for setters. */ | |||
35974 | false, /* isEliminatable. Not relevant for setters. */ | |||
35975 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
35976 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
35977 | false, /* isTypedMethod. Only relevant for methods. */ | |||
35978 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
35979 | }; | |||
35980 | ||||
35981 | MOZ_CAN_RUN_SCRIPT static bool | |||
35982 | get_unforgeableAttr2(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
35983 | { | |||
35984 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject35987( cx, "TestExampleInterface" , "unforgeableAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35985 | "TestExampleInterface", "unforgeableAttr2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject35987( cx, "TestExampleInterface" , "unforgeableAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35986 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject35987( cx, "TestExampleInterface" , "unforgeableAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
35987 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject35987( cx, "TestExampleInterface" , "unforgeableAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
35988 | ||||
35989 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
35990 | int32_t result(MOZ_KnownLive(self)(self)->UnforgeableAttr2()); | |||
35991 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 35991); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 35991; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
35992 | args.rval().setInt32(int32_t(result)); | |||
35993 | return true; | |||
35994 | } | |||
35995 | ||||
35996 | static const JSJitInfo unforgeableAttr2_getterinfo = { | |||
35997 | { get_unforgeableAttr2 }, | |||
35998 | { prototypes::id::TestExampleInterface }, | |||
35999 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36000 | JSJitInfo::Getter, | |||
36001 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36002 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
36003 | true, /* isInfallible. False in setters. */ | |||
36004 | false, /* isMovable. Not relevant for setters. */ | |||
36005 | false, /* isEliminatable. Not relevant for setters. */ | |||
36006 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36007 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36008 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36009 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36010 | }; | |||
36011 | ||||
36012 | MOZ_CAN_RUN_SCRIPT static bool | |||
36013 | unforgeableMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
36014 | { | |||
36015 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36018( cx, "TestExampleInterface" , "unforgeableMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36016 | "TestExampleInterface", "unforgeableMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36018( cx, "TestExampleInterface" , "unforgeableMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36017 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject36018( cx, "TestExampleInterface" , "unforgeableMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36018 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36018( cx, "TestExampleInterface" , "unforgeableMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36019 | ||||
36020 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36021 | int32_t result(MOZ_KnownLive(self)(self)->UnforgeableMethod()); | |||
36022 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36022); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36022; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36023 | args.rval().setInt32(int32_t(result)); | |||
36024 | return true; | |||
36025 | } | |||
36026 | ||||
36027 | static const JSJitInfo unforgeableMethod_methodinfo = { | |||
36028 | { (JSJitGetterOp)unforgeableMethod }, | |||
36029 | { prototypes::id::TestExampleInterface }, | |||
36030 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36031 | JSJitInfo::Method, | |||
36032 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36033 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
36034 | true, /* isInfallible. False in setters. */ | |||
36035 | false, /* isMovable. Not relevant for setters. */ | |||
36036 | false, /* isEliminatable. Not relevant for setters. */ | |||
36037 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36038 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36039 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36040 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36041 | }; | |||
36042 | ||||
36043 | MOZ_CAN_RUN_SCRIPT static bool | |||
36044 | unforgeableMethod2(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
36045 | { | |||
36046 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36049( cx, "TestExampleInterface" , "unforgeableMethod2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36047 | "TestExampleInterface", "unforgeableMethod2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36049( cx, "TestExampleInterface" , "unforgeableMethod2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36048 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject36049( cx, "TestExampleInterface" , "unforgeableMethod2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36049 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36049( cx, "TestExampleInterface" , "unforgeableMethod2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36050 | ||||
36051 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36052 | int32_t result(MOZ_KnownLive(self)(self)->UnforgeableMethod2()); | |||
36053 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36053); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36053; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36054 | args.rval().setInt32(int32_t(result)); | |||
36055 | return true; | |||
36056 | } | |||
36057 | ||||
36058 | static const JSJitInfo unforgeableMethod2_methodinfo = { | |||
36059 | { (JSJitGetterOp)unforgeableMethod2 }, | |||
36060 | { prototypes::id::TestExampleInterface }, | |||
36061 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36062 | JSJitInfo::Method, | |||
36063 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36064 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
36065 | true, /* isInfallible. False in setters. */ | |||
36066 | false, /* isMovable. Not relevant for setters. */ | |||
36067 | false, /* isEliminatable. Not relevant for setters. */ | |||
36068 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36069 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36070 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36071 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36072 | }; | |||
36073 | ||||
36074 | MOZ_CAN_RUN_SCRIPT static bool | |||
36075 | __stringifier(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
36076 | { | |||
36077 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36080( cx, "TestExampleInterface" , "__stringifier", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36078 | "TestExampleInterface", "__stringifier", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36080( cx, "TestExampleInterface" , "__stringifier", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36079 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject36080( cx, "TestExampleInterface" , "__stringifier", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36080 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36080( cx, "TestExampleInterface" , "__stringifier", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36081 | ||||
36082 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36083 | DOMString result; | |||
36084 | // NOTE: This assert does NOT call the function. | |||
36085 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Stringify(result))>, "Should be returning void here"); | |||
36086 | MOZ_KnownLive(self)(self)->Stringify(result); | |||
36087 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36087); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36087; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36088 | if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) { | |||
36089 | return false; | |||
36090 | } | |||
36091 | return true; | |||
36092 | } | |||
36093 | ||||
36094 | static const JSJitInfo __stringifier_methodinfo = { | |||
36095 | { (JSJitGetterOp)__stringifier }, | |||
36096 | { prototypes::id::TestExampleInterface }, | |||
36097 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36098 | JSJitInfo::Method, | |||
36099 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36100 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
36101 | false, /* isInfallible. False in setters. */ | |||
36102 | false, /* isMovable. Not relevant for setters. */ | |||
36103 | false, /* isEliminatable. Not relevant for setters. */ | |||
36104 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36105 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36106 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36107 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36108 | }; | |||
36109 | ||||
36110 | MOZ_CAN_RUN_SCRIPT static bool | |||
36111 | passRenamedInterface(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
36112 | { | |||
36113 | BindingCallContext cx(cx_, "TestExampleInterface.passRenamedInterface"); | |||
36114 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36117( cx, "TestExampleInterface" , "passRenamedInterface", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36115 | "TestExampleInterface", "passRenamedInterface", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36117( cx, "TestExampleInterface" , "passRenamedInterface", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36116 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject36117( cx, "TestExampleInterface" , "passRenamedInterface", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36117 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36117( cx, "TestExampleInterface" , "passRenamedInterface", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36118 | ||||
36119 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36120 | if (!args.requireAtLeast(cx, "TestExampleInterface.passRenamedInterface", 1)) { | |||
36121 | return false; | |||
36122 | } | |||
36123 | NonNull<nsRenamedInterface> arg0; | |||
36124 | if (args[0].isObject()) { | |||
36125 | { | |||
36126 | // Our JSContext should be in the right global to do unwrapping in. | |||
36127 | nsresult rv = UnwrapObject<prototypes::id::TestRenamedInterface, nsRenamedInterface>(args[0], arg0, cx); | |||
36128 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
36129 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "TestRenamedInterface"); | |||
36130 | return false; | |||
36131 | } | |||
36132 | } | |||
36133 | } else { | |||
36134 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
36135 | return false; | |||
36136 | } | |||
36137 | // NOTE: This assert does NOT call the function. | |||
36138 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassRenamedInterface(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
36139 | MOZ_KnownLive(self)(self)->PassRenamedInterface(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
36140 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36140); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36140; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36141 | args.rval().setUndefined(); | |||
36142 | return true; | |||
36143 | } | |||
36144 | ||||
36145 | static const JSJitInfo passRenamedInterface_methodinfo = { | |||
36146 | { (JSJitGetterOp)passRenamedInterface }, | |||
36147 | { prototypes::id::TestExampleInterface }, | |||
36148 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36149 | JSJitInfo::Method, | |||
36150 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36151 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36152 | false, /* isInfallible. False in setters. */ | |||
36153 | false, /* isMovable. Not relevant for setters. */ | |||
36154 | false, /* isEliminatable. Not relevant for setters. */ | |||
36155 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36156 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36157 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36158 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36159 | }; | |||
36160 | ||||
36161 | MOZ_CAN_RUN_SCRIPT static bool | |||
36162 | get_putForwardsAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36163 | { | |||
36164 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36167( cx, "TestExampleInterface" , "putForwardsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36165 | "TestExampleInterface", "putForwardsAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36167( cx, "TestExampleInterface" , "putForwardsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36166 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36167( cx, "TestExampleInterface" , "putForwardsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36167 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36167( cx, "TestExampleInterface" , "putForwardsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36168 | ||||
36169 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36170 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(MOZ_KnownLive(self)(self)->PutForwardsAttr())); | |||
36171 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36171); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36171; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36172 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
36173 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36173); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 36173; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
36174 | return false; | |||
36175 | } | |||
36176 | return true; | |||
36177 | } | |||
36178 | ||||
36179 | MOZ_CAN_RUN_SCRIPT static bool | |||
36180 | set_putForwardsAttr(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36181 | { | |||
36182 | BindingCallContext cx(cx_, "TestExampleInterface.putForwardsAttr setter"); | |||
36183 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36186( cx, "TestExampleInterface" , "putForwardsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36184 | "TestExampleInterface", "putForwardsAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36186( cx, "TestExampleInterface" , "putForwardsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36185 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36186( cx, "TestExampleInterface" , "putForwardsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36186 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36186( cx, "TestExampleInterface" , "putForwardsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36187 | ||||
36188 | JS::Rooted<JS::Value> v(cx); | |||
36189 | if (!JS_GetProperty(cx, obj, "putForwardsAttr", &v)) { | |||
36190 | return false; | |||
36191 | } | |||
36192 | ||||
36193 | if (!v.isObject()) { | |||
36194 | return cx.ThrowErrorMessage<MSG_NOT_OBJECT>("TestExampleInterface.putForwardsAttr"); | |||
36195 | } | |||
36196 | ||||
36197 | JS::Rooted<JSObject*> targetObj(cx, &v.toObject()); | |||
36198 | return JS_SetProperty(cx, targetObj, "writableByte", args[0]); | |||
36199 | } | |||
36200 | ||||
36201 | static const JSJitInfo putForwardsAttr_getterinfo = { | |||
36202 | { get_putForwardsAttr }, | |||
36203 | { prototypes::id::TestExampleInterface }, | |||
36204 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36205 | JSJitInfo::Getter, | |||
36206 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36207 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
36208 | false, /* isInfallible. False in setters. */ | |||
36209 | false, /* isMovable. Not relevant for setters. */ | |||
36210 | false, /* isEliminatable. Not relevant for setters. */ | |||
36211 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36212 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36213 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36214 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36215 | }; | |||
36216 | static const JSJitInfo putForwardsAttr_setterinfo = { | |||
36217 | { (JSJitGetterOp)set_putForwardsAttr }, | |||
36218 | { prototypes::id::TestExampleInterface }, | |||
36219 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36220 | JSJitInfo::Setter, | |||
36221 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36222 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36223 | false, /* isInfallible. False in setters. */ | |||
36224 | false, /* isMovable. Not relevant for setters. */ | |||
36225 | false, /* isEliminatable. Not relevant for setters. */ | |||
36226 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36227 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36228 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36229 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36230 | }; | |||
36231 | ||||
36232 | MOZ_CAN_RUN_SCRIPT static bool | |||
36233 | get_putForwardsAttr2(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36234 | { | |||
36235 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36238( cx, "TestExampleInterface" , "putForwardsAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36236 | "TestExampleInterface", "putForwardsAttr2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36238( cx, "TestExampleInterface" , "putForwardsAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36237 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36238( cx, "TestExampleInterface" , "putForwardsAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36238 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36238( cx, "TestExampleInterface" , "putForwardsAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36239 | ||||
36240 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36241 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(MOZ_KnownLive(self)(self)->PutForwardsAttr2())); | |||
36242 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36242); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36242; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36243 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
36244 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36244); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 36244; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
36245 | return false; | |||
36246 | } | |||
36247 | return true; | |||
36248 | } | |||
36249 | ||||
36250 | MOZ_CAN_RUN_SCRIPT static bool | |||
36251 | set_putForwardsAttr2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36252 | { | |||
36253 | BindingCallContext cx(cx_, "TestExampleInterface.putForwardsAttr2 setter"); | |||
36254 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36257( cx, "TestExampleInterface" , "putForwardsAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36255 | "TestExampleInterface", "putForwardsAttr2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36257( cx, "TestExampleInterface" , "putForwardsAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36256 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36257( cx, "TestExampleInterface" , "putForwardsAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36257 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36257( cx, "TestExampleInterface" , "putForwardsAttr2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36258 | ||||
36259 | JS::Rooted<JS::Value> v(cx); | |||
36260 | if (!JS_GetProperty(cx, obj, "putForwardsAttr2", &v)) { | |||
36261 | return false; | |||
36262 | } | |||
36263 | ||||
36264 | if (!v.isObject()) { | |||
36265 | return cx.ThrowErrorMessage<MSG_NOT_OBJECT>("TestExampleInterface.putForwardsAttr2"); | |||
36266 | } | |||
36267 | ||||
36268 | JS::Rooted<JSObject*> targetObj(cx, &v.toObject()); | |||
36269 | return JS_SetProperty(cx, targetObj, "writableByte", args[0]); | |||
36270 | } | |||
36271 | ||||
36272 | static const JSJitInfo putForwardsAttr2_getterinfo = { | |||
36273 | { get_putForwardsAttr2 }, | |||
36274 | { prototypes::id::TestExampleInterface }, | |||
36275 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36276 | JSJitInfo::Getter, | |||
36277 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36278 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
36279 | false, /* isInfallible. False in setters. */ | |||
36280 | false, /* isMovable. Not relevant for setters. */ | |||
36281 | false, /* isEliminatable. Not relevant for setters. */ | |||
36282 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36283 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36284 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36285 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36286 | }; | |||
36287 | static const JSJitInfo putForwardsAttr2_setterinfo = { | |||
36288 | { (JSJitGetterOp)set_putForwardsAttr2 }, | |||
36289 | { prototypes::id::TestExampleInterface }, | |||
36290 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36291 | JSJitInfo::Setter, | |||
36292 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36293 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36294 | false, /* isInfallible. False in setters. */ | |||
36295 | false, /* isMovable. Not relevant for setters. */ | |||
36296 | false, /* isEliminatable. Not relevant for setters. */ | |||
36297 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36298 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36299 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36300 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36301 | }; | |||
36302 | ||||
36303 | MOZ_CAN_RUN_SCRIPT static bool | |||
36304 | get_putForwardsAttr3(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36305 | { | |||
36306 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36309( cx, "TestExampleInterface" , "putForwardsAttr3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36307 | "TestExampleInterface", "putForwardsAttr3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36309( cx, "TestExampleInterface" , "putForwardsAttr3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36308 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36309( cx, "TestExampleInterface" , "putForwardsAttr3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36309 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36309( cx, "TestExampleInterface" , "putForwardsAttr3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36310 | ||||
36311 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36312 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(MOZ_KnownLive(self)(self)->PutForwardsAttr3())); | |||
36313 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36313); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36313; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36314 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
36315 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36315); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 36315; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
36316 | return false; | |||
36317 | } | |||
36318 | return true; | |||
36319 | } | |||
36320 | ||||
36321 | MOZ_CAN_RUN_SCRIPT static bool | |||
36322 | set_putForwardsAttr3(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36323 | { | |||
36324 | BindingCallContext cx(cx_, "TestExampleInterface.putForwardsAttr3 setter"); | |||
36325 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36328( cx, "TestExampleInterface" , "putForwardsAttr3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36326 | "TestExampleInterface", "putForwardsAttr3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36328( cx, "TestExampleInterface" , "putForwardsAttr3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36327 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36328( cx, "TestExampleInterface" , "putForwardsAttr3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36328 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36328( cx, "TestExampleInterface" , "putForwardsAttr3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36329 | ||||
36330 | JS::Rooted<JS::Value> v(cx); | |||
36331 | if (!JS_GetProperty(cx, obj, "putForwardsAttr3", &v)) { | |||
36332 | return false; | |||
36333 | } | |||
36334 | ||||
36335 | if (!v.isObject()) { | |||
36336 | return cx.ThrowErrorMessage<MSG_NOT_OBJECT>("TestExampleInterface.putForwardsAttr3"); | |||
36337 | } | |||
36338 | ||||
36339 | JS::Rooted<JSObject*> targetObj(cx, &v.toObject()); | |||
36340 | return JS_SetProperty(cx, targetObj, "writableByte", args[0]); | |||
36341 | } | |||
36342 | ||||
36343 | static const JSJitInfo putForwardsAttr3_getterinfo = { | |||
36344 | { get_putForwardsAttr3 }, | |||
36345 | { prototypes::id::TestExampleInterface }, | |||
36346 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36347 | JSJitInfo::Getter, | |||
36348 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36349 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
36350 | false, /* isInfallible. False in setters. */ | |||
36351 | false, /* isMovable. Not relevant for setters. */ | |||
36352 | false, /* isEliminatable. Not relevant for setters. */ | |||
36353 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36354 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36355 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36356 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36357 | }; | |||
36358 | static const JSJitInfo putForwardsAttr3_setterinfo = { | |||
36359 | { (JSJitGetterOp)set_putForwardsAttr3 }, | |||
36360 | { prototypes::id::TestExampleInterface }, | |||
36361 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36362 | JSJitInfo::Setter, | |||
36363 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36364 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36365 | false, /* isInfallible. False in setters. */ | |||
36366 | false, /* isMovable. Not relevant for setters. */ | |||
36367 | false, /* isEliminatable. Not relevant for setters. */ | |||
36368 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36369 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36370 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36371 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36372 | }; | |||
36373 | ||||
36374 | MOZ_CAN_RUN_SCRIPT static bool | |||
36375 | throwingMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
36376 | { | |||
36377 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36380( cx, "TestExampleInterface" , "throwingMethod", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36378 | "TestExampleInterface", "throwingMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36380( cx, "TestExampleInterface" , "throwingMethod", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36379 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject36380( cx, "TestExampleInterface" , "throwingMethod", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36380 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36380( cx, "TestExampleInterface" , "throwingMethod", JS::ProfilingCategoryPair::DOM, uint32_t( js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36381 | ||||
36382 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36383 | FastErrorResult rv; | |||
36384 | // NOTE: This assert does NOT call the function. | |||
36385 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ThrowingMethod(rv))>, "Should be returning void here"); | |||
36386 | MOZ_KnownLive(self)(self)->ThrowingMethod(rv); | |||
36387 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingMethod"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingMethod" )), 0))) { | |||
36388 | return false; | |||
36389 | } | |||
36390 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36390); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36390; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36391 | args.rval().setUndefined(); | |||
36392 | return true; | |||
36393 | } | |||
36394 | ||||
36395 | static const JSJitInfo throwingMethod_methodinfo = { | |||
36396 | { (JSJitGetterOp)throwingMethod }, | |||
36397 | { prototypes::id::TestExampleInterface }, | |||
36398 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36399 | JSJitInfo::Method, | |||
36400 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36401 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36402 | false, /* isInfallible. False in setters. */ | |||
36403 | false, /* isMovable. Not relevant for setters. */ | |||
36404 | false, /* isEliminatable. Not relevant for setters. */ | |||
36405 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36406 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36407 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36408 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36409 | }; | |||
36410 | ||||
36411 | MOZ_CAN_RUN_SCRIPT static bool | |||
36412 | get_throwingAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36413 | { | |||
36414 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36417( cx, "TestExampleInterface" , "throwingAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36415 | "TestExampleInterface", "throwingAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36417( cx, "TestExampleInterface" , "throwingAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36416 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36417( cx, "TestExampleInterface" , "throwingAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36417 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36417( cx, "TestExampleInterface" , "throwingAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36418 | ||||
36419 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36420 | FastErrorResult rv; | |||
36421 | bool result(MOZ_KnownLive(self)(self)->GetThrowingAttr(rv)); | |||
36422 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingAttr getter"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingAttr getter" )), 0))) { | |||
36423 | return false; | |||
36424 | } | |||
36425 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36425); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36425; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36426 | args.rval().setBoolean(result); | |||
36427 | return true; | |||
36428 | } | |||
36429 | ||||
36430 | MOZ_CAN_RUN_SCRIPT static bool | |||
36431 | set_throwingAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36432 | { | |||
36433 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36436( cx, "TestExampleInterface" , "throwingAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36434 | "TestExampleInterface", "throwingAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36436( cx, "TestExampleInterface" , "throwingAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36435 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36436( cx, "TestExampleInterface" , "throwingAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36436 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36436( cx, "TestExampleInterface" , "throwingAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36437 | ||||
36438 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36439 | bool arg0; | |||
36440 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
36441 | return false; | |||
36442 | } | |||
36443 | FastErrorResult rv; | |||
36444 | // NOTE: This assert does NOT call the function. | |||
36445 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetThrowingAttr(arg0, rv))>, "Should be returning void here"); | |||
36446 | MOZ_KnownLive(self)(self)->SetThrowingAttr(arg0, rv); | |||
36447 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingAttr setter"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingAttr setter" )), 0))) { | |||
36448 | return false; | |||
36449 | } | |||
36450 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36450); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36450; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36451 | ||||
36452 | return true; | |||
36453 | } | |||
36454 | ||||
36455 | static const JSJitInfo throwingAttr_getterinfo = { | |||
36456 | { get_throwingAttr }, | |||
36457 | { prototypes::id::TestExampleInterface }, | |||
36458 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36459 | JSJitInfo::Getter, | |||
36460 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36461 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
36462 | false, /* isInfallible. False in setters. */ | |||
36463 | false, /* isMovable. Not relevant for setters. */ | |||
36464 | false, /* isEliminatable. Not relevant for setters. */ | |||
36465 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36466 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36467 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36468 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36469 | }; | |||
36470 | static const JSJitInfo throwingAttr_setterinfo = { | |||
36471 | { (JSJitGetterOp)set_throwingAttr }, | |||
36472 | { prototypes::id::TestExampleInterface }, | |||
36473 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36474 | JSJitInfo::Setter, | |||
36475 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36476 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36477 | false, /* isInfallible. False in setters. */ | |||
36478 | false, /* isMovable. Not relevant for setters. */ | |||
36479 | false, /* isEliminatable. Not relevant for setters. */ | |||
36480 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36481 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36482 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36483 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36484 | }; | |||
36485 | ||||
36486 | MOZ_CAN_RUN_SCRIPT static bool | |||
36487 | get_throwingGetterAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36488 | { | |||
36489 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36492( cx, "TestExampleInterface" , "throwingGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36490 | "TestExampleInterface", "throwingGetterAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36492( cx, "TestExampleInterface" , "throwingGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36491 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36492( cx, "TestExampleInterface" , "throwingGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36492 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36492( cx, "TestExampleInterface" , "throwingGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36493 | ||||
36494 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36495 | FastErrorResult rv; | |||
36496 | bool result(MOZ_KnownLive(self)(self)->GetThrowingGetterAttr(rv)); | |||
36497 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingGetterAttr getter"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingGetterAttr getter" )), 0))) { | |||
36498 | return false; | |||
36499 | } | |||
36500 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36500); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36500; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36501 | args.rval().setBoolean(result); | |||
36502 | return true; | |||
36503 | } | |||
36504 | ||||
36505 | MOZ_CAN_RUN_SCRIPT static bool | |||
36506 | set_throwingGetterAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36507 | { | |||
36508 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36511( cx, "TestExampleInterface" , "throwingGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36509 | "TestExampleInterface", "throwingGetterAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36511( cx, "TestExampleInterface" , "throwingGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36510 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36511( cx, "TestExampleInterface" , "throwingGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36511 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36511( cx, "TestExampleInterface" , "throwingGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36512 | ||||
36513 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36514 | bool arg0; | |||
36515 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
36516 | return false; | |||
36517 | } | |||
36518 | // NOTE: This assert does NOT call the function. | |||
36519 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetThrowingGetterAttr(arg0))>, "Should be returning void here"); | |||
36520 | MOZ_KnownLive(self)(self)->SetThrowingGetterAttr(arg0); | |||
36521 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36521); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36521; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36522 | ||||
36523 | return true; | |||
36524 | } | |||
36525 | ||||
36526 | static const JSJitInfo throwingGetterAttr_getterinfo = { | |||
36527 | { get_throwingGetterAttr }, | |||
36528 | { prototypes::id::TestExampleInterface }, | |||
36529 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36530 | JSJitInfo::Getter, | |||
36531 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36532 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
36533 | false, /* isInfallible. False in setters. */ | |||
36534 | false, /* isMovable. Not relevant for setters. */ | |||
36535 | false, /* isEliminatable. Not relevant for setters. */ | |||
36536 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36537 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36538 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36539 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36540 | }; | |||
36541 | static const JSJitInfo throwingGetterAttr_setterinfo = { | |||
36542 | { (JSJitGetterOp)set_throwingGetterAttr }, | |||
36543 | { prototypes::id::TestExampleInterface }, | |||
36544 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36545 | JSJitInfo::Setter, | |||
36546 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36547 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36548 | false, /* isInfallible. False in setters. */ | |||
36549 | false, /* isMovable. Not relevant for setters. */ | |||
36550 | false, /* isEliminatable. Not relevant for setters. */ | |||
36551 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36552 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36553 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36554 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36555 | }; | |||
36556 | ||||
36557 | MOZ_CAN_RUN_SCRIPT static bool | |||
36558 | get_throwingSetterAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36559 | { | |||
36560 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36563( cx, "TestExampleInterface" , "throwingSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36561 | "TestExampleInterface", "throwingSetterAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36563( cx, "TestExampleInterface" , "throwingSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36562 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36563( cx, "TestExampleInterface" , "throwingSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36563 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36563( cx, "TestExampleInterface" , "throwingSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36564 | ||||
36565 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36566 | bool result(MOZ_KnownLive(self)(self)->ThrowingSetterAttr()); | |||
36567 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36567); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36567; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36568 | args.rval().setBoolean(result); | |||
36569 | return true; | |||
36570 | } | |||
36571 | ||||
36572 | MOZ_CAN_RUN_SCRIPT static bool | |||
36573 | set_throwingSetterAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36574 | { | |||
36575 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36578( cx, "TestExampleInterface" , "throwingSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36576 | "TestExampleInterface", "throwingSetterAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36578( cx, "TestExampleInterface" , "throwingSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36577 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36578( cx, "TestExampleInterface" , "throwingSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36578 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36578( cx, "TestExampleInterface" , "throwingSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36579 | ||||
36580 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36581 | bool arg0; | |||
36582 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
36583 | return false; | |||
36584 | } | |||
36585 | FastErrorResult rv; | |||
36586 | // NOTE: This assert does NOT call the function. | |||
36587 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetThrowingSetterAttr(arg0, rv))>, "Should be returning void here"); | |||
36588 | MOZ_KnownLive(self)(self)->SetThrowingSetterAttr(arg0, rv); | |||
36589 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingSetterAttr setter"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.throwingSetterAttr setter" )), 0))) { | |||
36590 | return false; | |||
36591 | } | |||
36592 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36592); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36592; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36593 | ||||
36594 | return true; | |||
36595 | } | |||
36596 | ||||
36597 | static const JSJitInfo throwingSetterAttr_getterinfo = { | |||
36598 | { get_throwingSetterAttr }, | |||
36599 | { prototypes::id::TestExampleInterface }, | |||
36600 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36601 | JSJitInfo::Getter, | |||
36602 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36603 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
36604 | true, /* isInfallible. False in setters. */ | |||
36605 | false, /* isMovable. Not relevant for setters. */ | |||
36606 | false, /* isEliminatable. Not relevant for setters. */ | |||
36607 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36608 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36609 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36610 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36611 | }; | |||
36612 | static const JSJitInfo throwingSetterAttr_setterinfo = { | |||
36613 | { (JSJitGetterOp)set_throwingSetterAttr }, | |||
36614 | { prototypes::id::TestExampleInterface }, | |||
36615 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36616 | JSJitInfo::Setter, | |||
36617 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36618 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36619 | false, /* isInfallible. False in setters. */ | |||
36620 | false, /* isMovable. Not relevant for setters. */ | |||
36621 | false, /* isEliminatable. Not relevant for setters. */ | |||
36622 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36623 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36624 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36625 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36626 | }; | |||
36627 | ||||
36628 | MOZ_CAN_RUN_SCRIPT static bool | |||
36629 | canOOMMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
36630 | { | |||
36631 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36634( cx, "TestExampleInterface" , "canOOMMethod", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36632 | "TestExampleInterface", "canOOMMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36634( cx, "TestExampleInterface" , "canOOMMethod", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36633 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject36634( cx, "TestExampleInterface" , "canOOMMethod", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36634 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36634( cx, "TestExampleInterface" , "canOOMMethod", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36635 | ||||
36636 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36637 | FastErrorResult rv; | |||
36638 | // NOTE: This assert does NOT call the function. | |||
36639 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->CanOOMMethod(OOMReporter::From(rv)))>, "Should be returning void here"); | |||
36640 | MOZ_KnownLive(self)(self)->CanOOMMethod(OOMReporter::From(rv)); | |||
36641 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMMethod"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMMethod" )), 0))) { | |||
36642 | return false; | |||
36643 | } | |||
36644 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36644); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36644; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36645 | args.rval().setUndefined(); | |||
36646 | return true; | |||
36647 | } | |||
36648 | ||||
36649 | static const JSJitInfo canOOMMethod_methodinfo = { | |||
36650 | { (JSJitGetterOp)canOOMMethod }, | |||
36651 | { prototypes::id::TestExampleInterface }, | |||
36652 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36653 | JSJitInfo::Method, | |||
36654 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36655 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36656 | false, /* isInfallible. False in setters. */ | |||
36657 | false, /* isMovable. Not relevant for setters. */ | |||
36658 | false, /* isEliminatable. Not relevant for setters. */ | |||
36659 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36660 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36661 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36662 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36663 | }; | |||
36664 | ||||
36665 | MOZ_CAN_RUN_SCRIPT static bool | |||
36666 | get_canOOMAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36667 | { | |||
36668 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36671( cx, "TestExampleInterface" , "canOOMAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36669 | "TestExampleInterface", "canOOMAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36671( cx, "TestExampleInterface" , "canOOMAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36670 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36671( cx, "TestExampleInterface" , "canOOMAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36671 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36671( cx, "TestExampleInterface" , "canOOMAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36672 | ||||
36673 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36674 | FastErrorResult rv; | |||
36675 | bool result(MOZ_KnownLive(self)(self)->GetCanOOMAttr(OOMReporter::From(rv))); | |||
36676 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMAttr getter"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMAttr getter" )), 0))) { | |||
36677 | return false; | |||
36678 | } | |||
36679 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36679); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36679; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36680 | args.rval().setBoolean(result); | |||
36681 | return true; | |||
36682 | } | |||
36683 | ||||
36684 | MOZ_CAN_RUN_SCRIPT static bool | |||
36685 | set_canOOMAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36686 | { | |||
36687 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36690( cx, "TestExampleInterface" , "canOOMAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36688 | "TestExampleInterface", "canOOMAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36690( cx, "TestExampleInterface" , "canOOMAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36689 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36690( cx, "TestExampleInterface" , "canOOMAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36690 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36690( cx, "TestExampleInterface" , "canOOMAttr", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36691 | ||||
36692 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36693 | bool arg0; | |||
36694 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
36695 | return false; | |||
36696 | } | |||
36697 | FastErrorResult rv; | |||
36698 | // NOTE: This assert does NOT call the function. | |||
36699 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetCanOOMAttr(arg0, OOMReporter::From(rv)))>, "Should be returning void here"); | |||
36700 | MOZ_KnownLive(self)(self)->SetCanOOMAttr(arg0, OOMReporter::From(rv)); | |||
36701 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMAttr setter"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMAttr setter" )), 0))) { | |||
36702 | return false; | |||
36703 | } | |||
36704 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36704); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36704; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36705 | ||||
36706 | return true; | |||
36707 | } | |||
36708 | ||||
36709 | static const JSJitInfo canOOMAttr_getterinfo = { | |||
36710 | { get_canOOMAttr }, | |||
36711 | { prototypes::id::TestExampleInterface }, | |||
36712 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36713 | JSJitInfo::Getter, | |||
36714 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36715 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
36716 | false, /* isInfallible. False in setters. */ | |||
36717 | false, /* isMovable. Not relevant for setters. */ | |||
36718 | false, /* isEliminatable. Not relevant for setters. */ | |||
36719 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36720 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36721 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36722 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36723 | }; | |||
36724 | static const JSJitInfo canOOMAttr_setterinfo = { | |||
36725 | { (JSJitGetterOp)set_canOOMAttr }, | |||
36726 | { prototypes::id::TestExampleInterface }, | |||
36727 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36728 | JSJitInfo::Setter, | |||
36729 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36730 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36731 | false, /* isInfallible. False in setters. */ | |||
36732 | false, /* isMovable. Not relevant for setters. */ | |||
36733 | false, /* isEliminatable. Not relevant for setters. */ | |||
36734 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36735 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36736 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36737 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36738 | }; | |||
36739 | ||||
36740 | MOZ_CAN_RUN_SCRIPT static bool | |||
36741 | get_canOOMGetterAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36742 | { | |||
36743 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36746( cx, "TestExampleInterface" , "canOOMGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36744 | "TestExampleInterface", "canOOMGetterAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36746( cx, "TestExampleInterface" , "canOOMGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36745 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36746( cx, "TestExampleInterface" , "canOOMGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36746 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36746( cx, "TestExampleInterface" , "canOOMGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36747 | ||||
36748 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36749 | FastErrorResult rv; | |||
36750 | bool result(MOZ_KnownLive(self)(self)->GetCanOOMGetterAttr(OOMReporter::From(rv))); | |||
36751 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMGetterAttr getter"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMGetterAttr getter" )), 0))) { | |||
36752 | return false; | |||
36753 | } | |||
36754 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36754); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36754; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36755 | args.rval().setBoolean(result); | |||
36756 | return true; | |||
36757 | } | |||
36758 | ||||
36759 | MOZ_CAN_RUN_SCRIPT static bool | |||
36760 | set_canOOMGetterAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36761 | { | |||
36762 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36765( cx, "TestExampleInterface" , "canOOMGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36763 | "TestExampleInterface", "canOOMGetterAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36765( cx, "TestExampleInterface" , "canOOMGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36764 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36765( cx, "TestExampleInterface" , "canOOMGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36765 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36765( cx, "TestExampleInterface" , "canOOMGetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36766 | ||||
36767 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36768 | bool arg0; | |||
36769 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
36770 | return false; | |||
36771 | } | |||
36772 | // NOTE: This assert does NOT call the function. | |||
36773 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetCanOOMGetterAttr(arg0))>, "Should be returning void here"); | |||
36774 | MOZ_KnownLive(self)(self)->SetCanOOMGetterAttr(arg0); | |||
36775 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36775); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36775; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36776 | ||||
36777 | return true; | |||
36778 | } | |||
36779 | ||||
36780 | static const JSJitInfo canOOMGetterAttr_getterinfo = { | |||
36781 | { get_canOOMGetterAttr }, | |||
36782 | { prototypes::id::TestExampleInterface }, | |||
36783 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36784 | JSJitInfo::Getter, | |||
36785 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36786 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
36787 | false, /* isInfallible. False in setters. */ | |||
36788 | false, /* isMovable. Not relevant for setters. */ | |||
36789 | false, /* isEliminatable. Not relevant for setters. */ | |||
36790 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36791 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36792 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36793 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36794 | }; | |||
36795 | static const JSJitInfo canOOMGetterAttr_setterinfo = { | |||
36796 | { (JSJitGetterOp)set_canOOMGetterAttr }, | |||
36797 | { prototypes::id::TestExampleInterface }, | |||
36798 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36799 | JSJitInfo::Setter, | |||
36800 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36801 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36802 | false, /* isInfallible. False in setters. */ | |||
36803 | false, /* isMovable. Not relevant for setters. */ | |||
36804 | false, /* isEliminatable. Not relevant for setters. */ | |||
36805 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36806 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36807 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36808 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36809 | }; | |||
36810 | ||||
36811 | MOZ_CAN_RUN_SCRIPT static bool | |||
36812 | get_canOOMSetterAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36813 | { | |||
36814 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36817( cx, "TestExampleInterface" , "canOOMSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36815 | "TestExampleInterface", "canOOMSetterAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36817( cx, "TestExampleInterface" , "canOOMSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36816 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36817( cx, "TestExampleInterface" , "canOOMSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36817 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36817( cx, "TestExampleInterface" , "canOOMSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36818 | ||||
36819 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36820 | bool result(MOZ_KnownLive(self)(self)->CanOOMSetterAttr()); | |||
36821 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36821); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36821; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36822 | args.rval().setBoolean(result); | |||
36823 | return true; | |||
36824 | } | |||
36825 | ||||
36826 | MOZ_CAN_RUN_SCRIPT static bool | |||
36827 | set_canOOMSetterAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36828 | { | |||
36829 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36832( cx, "TestExampleInterface" , "canOOMSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36830 | "TestExampleInterface", "canOOMSetterAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36832( cx, "TestExampleInterface" , "canOOMSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36831 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36832( cx, "TestExampleInterface" , "canOOMSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
36832 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36832( cx, "TestExampleInterface" , "canOOMSetterAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
36833 | ||||
36834 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36835 | bool arg0; | |||
36836 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
36837 | return false; | |||
36838 | } | |||
36839 | FastErrorResult rv; | |||
36840 | // NOTE: This assert does NOT call the function. | |||
36841 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetCanOOMSetterAttr(arg0, OOMReporter::From(rv)))>, "Should be returning void here"); | |||
36842 | MOZ_KnownLive(self)(self)->SetCanOOMSetterAttr(arg0, OOMReporter::From(rv)); | |||
36843 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMSetterAttr setter"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleInterface.canOOMSetterAttr setter" )), 0))) { | |||
36844 | return false; | |||
36845 | } | |||
36846 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36846); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36846; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36847 | ||||
36848 | return true; | |||
36849 | } | |||
36850 | ||||
36851 | static const JSJitInfo canOOMSetterAttr_getterinfo = { | |||
36852 | { get_canOOMSetterAttr }, | |||
36853 | { prototypes::id::TestExampleInterface }, | |||
36854 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36855 | JSJitInfo::Getter, | |||
36856 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36857 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
36858 | true, /* isInfallible. False in setters. */ | |||
36859 | false, /* isMovable. Not relevant for setters. */ | |||
36860 | false, /* isEliminatable. Not relevant for setters. */ | |||
36861 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36862 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36863 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36864 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36865 | }; | |||
36866 | static const JSJitInfo canOOMSetterAttr_setterinfo = { | |||
36867 | { (JSJitGetterOp)set_canOOMSetterAttr }, | |||
36868 | { prototypes::id::TestExampleInterface }, | |||
36869 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36870 | JSJitInfo::Setter, | |||
36871 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36872 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36873 | false, /* isInfallible. False in setters. */ | |||
36874 | false, /* isMovable. Not relevant for setters. */ | |||
36875 | false, /* isEliminatable. Not relevant for setters. */ | |||
36876 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36877 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36878 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36879 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36880 | }; | |||
36881 | ||||
36882 | MOZ_CAN_RUN_SCRIPT static bool | |||
36883 | needsSubjectPrincipalMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
36884 | { | |||
36885 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36888( cx, "TestExampleInterface" , "needsSubjectPrincipalMethod", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36886 | "TestExampleInterface", "needsSubjectPrincipalMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36888( cx, "TestExampleInterface" , "needsSubjectPrincipalMethod", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36887 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject36888( cx, "TestExampleInterface" , "needsSubjectPrincipalMethod", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36888 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36888( cx, "TestExampleInterface" , "needsSubjectPrincipalMethod", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
36889 | ||||
36890 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36891 | NonNull<nsIPrincipal> subjectPrincipal; | |||
36892 | { | |||
36893 | JS::Realm* realm = js::GetContextRealm(cx); | |||
36894 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 36894); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 36894; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
36895 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
36896 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
36897 | ||||
36898 | subjectPrincipal = principal; | |||
36899 | } | |||
36900 | // NOTE: This assert does NOT call the function. | |||
36901 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NeedsSubjectPrincipalMethod(MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal))))>, "Should be returning void here"); | |||
36902 | MOZ_KnownLive(self)(self)->NeedsSubjectPrincipalMethod(MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal))); | |||
36903 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36903); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36903; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36904 | args.rval().setUndefined(); | |||
36905 | return true; | |||
36906 | } | |||
36907 | ||||
36908 | static const JSJitInfo needsSubjectPrincipalMethod_methodinfo = { | |||
36909 | { (JSJitGetterOp)needsSubjectPrincipalMethod }, | |||
36910 | { prototypes::id::TestExampleInterface }, | |||
36911 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36912 | JSJitInfo::Method, | |||
36913 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36914 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
36915 | true, /* isInfallible. False in setters. */ | |||
36916 | false, /* isMovable. Not relevant for setters. */ | |||
36917 | false, /* isEliminatable. Not relevant for setters. */ | |||
36918 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36919 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36920 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36921 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36922 | }; | |||
36923 | ||||
36924 | MOZ_CAN_RUN_SCRIPT static bool | |||
36925 | get_needsSubjectPrincipalAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
36926 | { | |||
36927 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36930( cx, "TestExampleInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36928 | "TestExampleInterface", "needsSubjectPrincipalAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36930( cx, "TestExampleInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36929 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject36930( cx, "TestExampleInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36930 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36930( cx, "TestExampleInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
36931 | ||||
36932 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36933 | NonNull<nsIPrincipal> subjectPrincipal; | |||
36934 | { | |||
36935 | JS::Realm* realm = js::GetContextRealm(cx); | |||
36936 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 36936); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 36936; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
36937 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
36938 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
36939 | ||||
36940 | subjectPrincipal = principal; | |||
36941 | } | |||
36942 | bool result(MOZ_KnownLive(self)(self)->NeedsSubjectPrincipalAttr(MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal)))); | |||
36943 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36943); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36943; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36944 | args.rval().setBoolean(result); | |||
36945 | return true; | |||
36946 | } | |||
36947 | ||||
36948 | MOZ_CAN_RUN_SCRIPT static bool | |||
36949 | set_needsSubjectPrincipalAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
36950 | { | |||
36951 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject36954( cx, "TestExampleInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36952 | "TestExampleInterface", "needsSubjectPrincipalAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject36954( cx, "TestExampleInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36953 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject36954( cx, "TestExampleInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
36954 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject36954( cx, "TestExampleInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
36955 | ||||
36956 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
36957 | bool arg0; | |||
36958 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
36959 | return false; | |||
36960 | } | |||
36961 | NonNull<nsIPrincipal> subjectPrincipal; | |||
36962 | { | |||
36963 | JS::Realm* realm = js::GetContextRealm(cx); | |||
36964 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 36964); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 36964; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
36965 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
36966 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
36967 | ||||
36968 | subjectPrincipal = principal; | |||
36969 | } | |||
36970 | // NOTE: This assert does NOT call the function. | |||
36971 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNeedsSubjectPrincipalAttr(arg0, MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal))))>, "Should be returning void here"); | |||
36972 | MOZ_KnownLive(self)(self)->SetNeedsSubjectPrincipalAttr(arg0, MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal))); | |||
36973 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 36973); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 36973; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
36974 | ||||
36975 | return true; | |||
36976 | } | |||
36977 | ||||
36978 | static const JSJitInfo needsSubjectPrincipalAttr_getterinfo = { | |||
36979 | { get_needsSubjectPrincipalAttr }, | |||
36980 | { prototypes::id::TestExampleInterface }, | |||
36981 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36982 | JSJitInfo::Getter, | |||
36983 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36984 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
36985 | true, /* isInfallible. False in setters. */ | |||
36986 | false, /* isMovable. Not relevant for setters. */ | |||
36987 | false, /* isEliminatable. Not relevant for setters. */ | |||
36988 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
36989 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
36990 | false, /* isTypedMethod. Only relevant for methods. */ | |||
36991 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
36992 | }; | |||
36993 | static const JSJitInfo needsSubjectPrincipalAttr_setterinfo = { | |||
36994 | { (JSJitGetterOp)set_needsSubjectPrincipalAttr }, | |||
36995 | { prototypes::id::TestExampleInterface }, | |||
36996 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
36997 | JSJitInfo::Setter, | |||
36998 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
36999 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37000 | false, /* isInfallible. False in setters. */ | |||
37001 | false, /* isMovable. Not relevant for setters. */ | |||
37002 | false, /* isEliminatable. Not relevant for setters. */ | |||
37003 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37004 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37005 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37006 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37007 | }; | |||
37008 | ||||
37009 | MOZ_CAN_RUN_SCRIPT static bool | |||
37010 | needsNonSystemSubjectPrincipalMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
37011 | { | |||
37012 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37015( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalMethod", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37013 | "TestExampleInterface", "needsNonSystemSubjectPrincipalMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37015( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalMethod", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37014 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject37015( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalMethod", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37015 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37015( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalMethod", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
37016 | ||||
37017 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37018 | nsIPrincipal* subjectPrincipal; | |||
37019 | { | |||
37020 | JS::Realm* realm = js::GetContextRealm(cx); | |||
37021 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 37021); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 37021; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
37022 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
37023 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
37024 | if (principal->IsSystemPrincipal()) { | |||
37025 | principal = nullptr; | |||
37026 | } | |||
37027 | ||||
37028 | subjectPrincipal = principal; | |||
37029 | } | |||
37030 | // NOTE: This assert does NOT call the function. | |||
37031 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NeedsNonSystemSubjectPrincipalMethod(MOZ_KnownLive(subjectPrincipal)(subjectPrincipal)))>, "Should be returning void here"); | |||
37032 | MOZ_KnownLive(self)(self)->NeedsNonSystemSubjectPrincipalMethod(MOZ_KnownLive(subjectPrincipal)(subjectPrincipal)); | |||
37033 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37033); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37033; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37034 | args.rval().setUndefined(); | |||
37035 | return true; | |||
37036 | } | |||
37037 | ||||
37038 | static const JSJitInfo needsNonSystemSubjectPrincipalMethod_methodinfo = { | |||
37039 | { (JSJitGetterOp)needsNonSystemSubjectPrincipalMethod }, | |||
37040 | { prototypes::id::TestExampleInterface }, | |||
37041 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37042 | JSJitInfo::Method, | |||
37043 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37044 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37045 | true, /* isInfallible. False in setters. */ | |||
37046 | false, /* isMovable. Not relevant for setters. */ | |||
37047 | false, /* isEliminatable. Not relevant for setters. */ | |||
37048 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37049 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37050 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37051 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37052 | }; | |||
37053 | ||||
37054 | MOZ_CAN_RUN_SCRIPT static bool | |||
37055 | get_needsNonSystemSubjectPrincipalAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37056 | { | |||
37057 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37060( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37058 | "TestExampleInterface", "needsNonSystemSubjectPrincipalAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37060( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37059 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37060( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37060 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37060( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
37061 | ||||
37062 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37063 | nsIPrincipal* subjectPrincipal; | |||
37064 | { | |||
37065 | JS::Realm* realm = js::GetContextRealm(cx); | |||
37066 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 37066); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 37066; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
37067 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
37068 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
37069 | if (principal->IsSystemPrincipal()) { | |||
37070 | principal = nullptr; | |||
37071 | } | |||
37072 | ||||
37073 | subjectPrincipal = principal; | |||
37074 | } | |||
37075 | bool result(MOZ_KnownLive(self)(self)->NeedsNonSystemSubjectPrincipalAttr(MOZ_KnownLive(subjectPrincipal)(subjectPrincipal))); | |||
37076 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37076); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37076; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37077 | args.rval().setBoolean(result); | |||
37078 | return true; | |||
37079 | } | |||
37080 | ||||
37081 | MOZ_CAN_RUN_SCRIPT static bool | |||
37082 | set_needsNonSystemSubjectPrincipalAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37083 | { | |||
37084 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37087( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37085 | "TestExampleInterface", "needsNonSystemSubjectPrincipalAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37087( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37086 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37087( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37087 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37087( cx, "TestExampleInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
37088 | ||||
37089 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37090 | bool arg0; | |||
37091 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
37092 | return false; | |||
37093 | } | |||
37094 | nsIPrincipal* subjectPrincipal; | |||
37095 | { | |||
37096 | JS::Realm* realm = js::GetContextRealm(cx); | |||
37097 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 37097); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 37097; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
37098 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
37099 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
37100 | if (principal->IsSystemPrincipal()) { | |||
37101 | principal = nullptr; | |||
37102 | } | |||
37103 | ||||
37104 | subjectPrincipal = principal; | |||
37105 | } | |||
37106 | // NOTE: This assert does NOT call the function. | |||
37107 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNeedsNonSystemSubjectPrincipalAttr(arg0, MOZ_KnownLive(subjectPrincipal)(subjectPrincipal)))>, "Should be returning void here"); | |||
37108 | MOZ_KnownLive(self)(self)->SetNeedsNonSystemSubjectPrincipalAttr(arg0, MOZ_KnownLive(subjectPrincipal)(subjectPrincipal)); | |||
37109 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37109); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37109; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37110 | ||||
37111 | return true; | |||
37112 | } | |||
37113 | ||||
37114 | static const JSJitInfo needsNonSystemSubjectPrincipalAttr_getterinfo = { | |||
37115 | { get_needsNonSystemSubjectPrincipalAttr }, | |||
37116 | { prototypes::id::TestExampleInterface }, | |||
37117 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37118 | JSJitInfo::Getter, | |||
37119 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37120 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
37121 | true, /* isInfallible. False in setters. */ | |||
37122 | false, /* isMovable. Not relevant for setters. */ | |||
37123 | false, /* isEliminatable. Not relevant for setters. */ | |||
37124 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37125 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37126 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37127 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37128 | }; | |||
37129 | static const JSJitInfo needsNonSystemSubjectPrincipalAttr_setterinfo = { | |||
37130 | { (JSJitGetterOp)set_needsNonSystemSubjectPrincipalAttr }, | |||
37131 | { prototypes::id::TestExampleInterface }, | |||
37132 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37133 | JSJitInfo::Setter, | |||
37134 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37135 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37136 | false, /* isInfallible. False in setters. */ | |||
37137 | false, /* isMovable. Not relevant for setters. */ | |||
37138 | false, /* isEliminatable. Not relevant for setters. */ | |||
37139 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37140 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37141 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37142 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37143 | }; | |||
37144 | ||||
37145 | MOZ_CAN_RUN_SCRIPT static bool | |||
37146 | needsCallerTypeMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
37147 | { | |||
37148 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37151( cx, "TestExampleInterface" , "needsCallerTypeMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37149 | "TestExampleInterface", "needsCallerTypeMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37151( cx, "TestExampleInterface" , "needsCallerTypeMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37150 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject37151( cx, "TestExampleInterface" , "needsCallerTypeMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37151 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37151( cx, "TestExampleInterface" , "needsCallerTypeMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37152 | ||||
37153 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37154 | // NOTE: This assert does NOT call the function. | |||
37155 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NeedsCallerTypeMethod(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem))>, "Should be returning void here"); | |||
37156 | MOZ_KnownLive(self)(self)->NeedsCallerTypeMethod(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem); | |||
37157 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37157); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37157; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37158 | args.rval().setUndefined(); | |||
37159 | return true; | |||
37160 | } | |||
37161 | ||||
37162 | static const JSJitInfo needsCallerTypeMethod_methodinfo = { | |||
37163 | { (JSJitGetterOp)needsCallerTypeMethod }, | |||
37164 | { prototypes::id::TestExampleInterface }, | |||
37165 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37166 | JSJitInfo::Method, | |||
37167 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37168 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37169 | true, /* isInfallible. False in setters. */ | |||
37170 | false, /* isMovable. Not relevant for setters. */ | |||
37171 | false, /* isEliminatable. Not relevant for setters. */ | |||
37172 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37173 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37174 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37175 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37176 | }; | |||
37177 | ||||
37178 | MOZ_CAN_RUN_SCRIPT static bool | |||
37179 | get_needsCallerTypeAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37180 | { | |||
37181 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37184( cx, "TestExampleInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37182 | "TestExampleInterface", "needsCallerTypeAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37184( cx, "TestExampleInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37183 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37184( cx, "TestExampleInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37184 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37184( cx, "TestExampleInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37185 | ||||
37186 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37187 | bool result(MOZ_KnownLive(self)(self)->NeedsCallerTypeAttr(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem)); | |||
37188 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37188); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37188; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37189 | args.rval().setBoolean(result); | |||
37190 | return true; | |||
37191 | } | |||
37192 | ||||
37193 | MOZ_CAN_RUN_SCRIPT static bool | |||
37194 | set_needsCallerTypeAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37195 | { | |||
37196 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37199( cx, "TestExampleInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37197 | "TestExampleInterface", "needsCallerTypeAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37199( cx, "TestExampleInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37198 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37199( cx, "TestExampleInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37199 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37199( cx, "TestExampleInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37200 | ||||
37201 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37202 | bool arg0; | |||
37203 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
37204 | return false; | |||
37205 | } | |||
37206 | // NOTE: This assert does NOT call the function. | |||
37207 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNeedsCallerTypeAttr(arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem))>, "Should be returning void here"); | |||
37208 | MOZ_KnownLive(self)(self)->SetNeedsCallerTypeAttr(arg0, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem); | |||
37209 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37209); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37209; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37210 | ||||
37211 | return true; | |||
37212 | } | |||
37213 | ||||
37214 | static const JSJitInfo needsCallerTypeAttr_getterinfo = { | |||
37215 | { get_needsCallerTypeAttr }, | |||
37216 | { prototypes::id::TestExampleInterface }, | |||
37217 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37218 | JSJitInfo::Getter, | |||
37219 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37220 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
37221 | true, /* isInfallible. False in setters. */ | |||
37222 | false, /* isMovable. Not relevant for setters. */ | |||
37223 | false, /* isEliminatable. Not relevant for setters. */ | |||
37224 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37225 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37226 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37227 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37228 | }; | |||
37229 | static const JSJitInfo needsCallerTypeAttr_setterinfo = { | |||
37230 | { (JSJitGetterOp)set_needsCallerTypeAttr }, | |||
37231 | { prototypes::id::TestExampleInterface }, | |||
37232 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37233 | JSJitInfo::Setter, | |||
37234 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37235 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37236 | false, /* isInfallible. False in setters. */ | |||
37237 | false, /* isMovable. Not relevant for setters. */ | |||
37238 | false, /* isEliminatable. Not relevant for setters. */ | |||
37239 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37240 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37241 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37242 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37243 | }; | |||
37244 | ||||
37245 | MOZ_CAN_RUN_SCRIPT static bool | |||
37246 | ceReactionsMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
37247 | { | |||
37248 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37251( cx, "TestExampleInterface" , "ceReactionsMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37249 | "TestExampleInterface", "ceReactionsMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37251( cx, "TestExampleInterface" , "ceReactionsMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37250 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject37251( cx, "TestExampleInterface" , "ceReactionsMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37251 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37251( cx, "TestExampleInterface" , "ceReactionsMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37252 | ||||
37253 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37254 | Maybe<AutoCEReaction> ceReaction; | |||
37255 | DocGroup* docGroup = self->GetDocGroup(); | |||
37256 | if (docGroup) { | |||
37257 | ceReaction.emplace(docGroup->CustomElementReactionsStack(), cx); | |||
37258 | } | |||
37259 | // NOTE: This assert does NOT call the function. | |||
37260 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->CeReactionsMethod())>, "Should be returning void here"); | |||
37261 | MOZ_KnownLive(self)(self)->CeReactionsMethod(); | |||
37262 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37262); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37262; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37263 | args.rval().setUndefined(); | |||
37264 | return true; | |||
37265 | } | |||
37266 | ||||
37267 | static const JSJitInfo ceReactionsMethod_methodinfo = { | |||
37268 | { (JSJitGetterOp)ceReactionsMethod }, | |||
37269 | { prototypes::id::TestExampleInterface }, | |||
37270 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37271 | JSJitInfo::Method, | |||
37272 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37273 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37274 | true, /* isInfallible. False in setters. */ | |||
37275 | false, /* isMovable. Not relevant for setters. */ | |||
37276 | false, /* isEliminatable. Not relevant for setters. */ | |||
37277 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37278 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37279 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37280 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37281 | }; | |||
37282 | ||||
37283 | MOZ_CAN_RUN_SCRIPT static bool | |||
37284 | ceReactionsMethodOverload(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
37285 | { | |||
37286 | BindingCallContext cx(cx_, "TestExampleInterface.ceReactionsMethodOverload"); | |||
37287 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37290( cx, "TestExampleInterface" , "ceReactionsMethodOverload", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37288 | "TestExampleInterface", "ceReactionsMethodOverload", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37290( cx, "TestExampleInterface" , "ceReactionsMethodOverload", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37289 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject37290( cx, "TestExampleInterface" , "ceReactionsMethodOverload", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37290 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37290( cx, "TestExampleInterface" , "ceReactionsMethodOverload", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
37291 | ||||
37292 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37293 | unsigned argcount = std::min(args.length(), 1u); | |||
37294 | switch (argcount) { | |||
37295 | case 0: { | |||
37296 | Maybe<AutoCEReaction> ceReaction; | |||
37297 | DocGroup* docGroup = self->GetDocGroup(); | |||
37298 | if (docGroup) { | |||
37299 | ceReaction.emplace(docGroup->CustomElementReactionsStack(), cx); | |||
37300 | } | |||
37301 | // NOTE: This assert does NOT call the function. | |||
37302 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->CeReactionsMethodOverload())>, "Should be returning void here"); | |||
37303 | MOZ_KnownLive(self)(self)->CeReactionsMethodOverload(); | |||
37304 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37304); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37304; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37305 | args.rval().setUndefined(); | |||
37306 | return true; | |||
37307 | break; | |||
37308 | } | |||
37309 | case 1: { | |||
37310 | binding_detail::FakeString<char16_t> arg0; | |||
37311 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
37312 | return false; | |||
37313 | } | |||
37314 | Maybe<AutoCEReaction> ceReaction; | |||
37315 | DocGroup* docGroup = self->GetDocGroup(); | |||
37316 | if (docGroup) { | |||
37317 | ceReaction.emplace(docGroup->CustomElementReactionsStack(), cx); | |||
37318 | } | |||
37319 | // NOTE: This assert does NOT call the function. | |||
37320 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->CeReactionsMethodOverload(NonNullHelper(Constify(arg0))))>, "Should be returning void here"); | |||
37321 | MOZ_KnownLive(self)(self)->CeReactionsMethodOverload(NonNullHelper(Constify(arg0))); | |||
37322 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37322); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37322; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37323 | args.rval().setUndefined(); | |||
37324 | return true; | |||
37325 | break; | |||
37326 | } | |||
37327 | default: { | |||
37328 | // Using nsPrintfCString here would require including that | |||
37329 | // header. Let's not worry about it. | |||
37330 | nsAutoCString argCountStr; | |||
37331 | argCountStr.AppendPrintf("%u", args.length()); | |||
37332 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
37333 | } | |||
37334 | } | |||
37335 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 37335); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 37335; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
37336 | return false; | |||
37337 | } | |||
37338 | ||||
37339 | static const JSJitInfo ceReactionsMethodOverload_methodinfo = { | |||
37340 | { (JSJitGetterOp)ceReactionsMethodOverload }, | |||
37341 | { prototypes::id::TestExampleInterface }, | |||
37342 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37343 | JSJitInfo::Method, | |||
37344 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37345 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37346 | false, /* isInfallible. False in setters. */ | |||
37347 | false, /* isMovable. Not relevant for setters. */ | |||
37348 | false, /* isEliminatable. Not relevant for setters. */ | |||
37349 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37350 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37351 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37352 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37353 | }; | |||
37354 | ||||
37355 | MOZ_CAN_RUN_SCRIPT static bool | |||
37356 | get_ceReactionsAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37357 | { | |||
37358 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37361( cx, "TestExampleInterface" , "ceReactionsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37359 | "TestExampleInterface", "ceReactionsAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37361( cx, "TestExampleInterface" , "ceReactionsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37360 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37361( cx, "TestExampleInterface" , "ceReactionsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37361 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37361( cx, "TestExampleInterface" , "ceReactionsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37362 | ||||
37363 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37364 | bool result(MOZ_KnownLive(self)(self)->CeReactionsAttr()); | |||
37365 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37365); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37365; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37366 | args.rval().setBoolean(result); | |||
37367 | return true; | |||
37368 | } | |||
37369 | ||||
37370 | MOZ_CAN_RUN_SCRIPT static bool | |||
37371 | set_ceReactionsAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37372 | { | |||
37373 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37376( cx, "TestExampleInterface" , "ceReactionsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37374 | "TestExampleInterface", "ceReactionsAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37376( cx, "TestExampleInterface" , "ceReactionsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37375 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37376( cx, "TestExampleInterface" , "ceReactionsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37376 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37376( cx, "TestExampleInterface" , "ceReactionsAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37377 | ||||
37378 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37379 | bool arg0; | |||
37380 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
37381 | return false; | |||
37382 | } | |||
37383 | Maybe<AutoCEReaction> ceReaction; | |||
37384 | DocGroup* docGroup = self->GetDocGroup(); | |||
37385 | if (docGroup) { | |||
37386 | ceReaction.emplace(docGroup->CustomElementReactionsStack(), cx); | |||
37387 | } | |||
37388 | // NOTE: This assert does NOT call the function. | |||
37389 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetCeReactionsAttr(arg0))>, "Should be returning void here"); | |||
37390 | MOZ_KnownLive(self)(self)->SetCeReactionsAttr(arg0); | |||
37391 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37391); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37391; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37392 | ||||
37393 | return true; | |||
37394 | } | |||
37395 | ||||
37396 | static const JSJitInfo ceReactionsAttr_getterinfo = { | |||
37397 | { get_ceReactionsAttr }, | |||
37398 | { prototypes::id::TestExampleInterface }, | |||
37399 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37400 | JSJitInfo::Getter, | |||
37401 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37402 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
37403 | true, /* isInfallible. False in setters. */ | |||
37404 | false, /* isMovable. Not relevant for setters. */ | |||
37405 | false, /* isEliminatable. Not relevant for setters. */ | |||
37406 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37407 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37408 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37409 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37410 | }; | |||
37411 | static const JSJitInfo ceReactionsAttr_setterinfo = { | |||
37412 | { (JSJitGetterOp)set_ceReactionsAttr }, | |||
37413 | { prototypes::id::TestExampleInterface }, | |||
37414 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37415 | JSJitInfo::Setter, | |||
37416 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37417 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37418 | false, /* isInfallible. False in setters. */ | |||
37419 | false, /* isMovable. Not relevant for setters. */ | |||
37420 | false, /* isEliminatable. Not relevant for setters. */ | |||
37421 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37422 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37423 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37424 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37425 | }; | |||
37426 | ||||
37427 | MOZ_CAN_RUN_SCRIPT static bool | |||
37428 | passArgsWithDefaults(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
37429 | { | |||
37430 | BindingCallContext cx(cx_, "TestExampleInterface.passArgsWithDefaults"); | |||
37431 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37434( cx, "TestExampleInterface" , "passArgsWithDefaults", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37432 | "TestExampleInterface", "passArgsWithDefaults", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37434( cx, "TestExampleInterface" , "passArgsWithDefaults", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37433 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject37434( cx, "TestExampleInterface" , "passArgsWithDefaults", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37434 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37434( cx, "TestExampleInterface" , "passArgsWithDefaults", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37435 | ||||
37436 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37437 | Optional<int32_t> arg0; | |||
37438 | if (args.hasDefined(0)) { | |||
37439 | arg0.Construct(); | |||
37440 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], "Argument 1", &arg0.Value())) { | |||
37441 | return false; | |||
37442 | } | |||
37443 | } | |||
37444 | mozilla::dom::TestInterface* arg1; | |||
37445 | if (args.hasDefined(1)) { | |||
37446 | if (args[1].isObject()) { | |||
37447 | { | |||
37448 | // Our JSContext should be in the right global to do unwrapping in. | |||
37449 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[1], arg1, cx); | |||
37450 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
37451 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 2", "TestInterface"); | |||
37452 | return false; | |||
37453 | } | |||
37454 | } | |||
37455 | } else if (args[1].isNullOrUndefined()) { | |||
37456 | arg1 = nullptr; | |||
37457 | } else { | |||
37458 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 2"); | |||
37459 | return false; | |||
37460 | } | |||
37461 | } else { | |||
37462 | arg1 = nullptr; | |||
37463 | } | |||
37464 | RootedDictionary<binding_detail::FastDict> arg2(cx); | |||
37465 | if (!arg2.Init(cx, (args.hasDefined(2)) ? args[2] : JS::NullHandleValue, "Argument 3", false)) { | |||
37466 | return false; | |||
37467 | } | |||
37468 | double arg3; | |||
37469 | if (args.hasDefined(3)) { | |||
37470 | if (!ValueToPrimitive<double, eDefault>(cx, args[3], "Argument 4", &arg3)) { | |||
37471 | return false; | |||
37472 | } else if (!std::isfinite(arg3)) { | |||
37473 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Argument 4"); | |||
37474 | return false; | |||
37475 | } | |||
37476 | } else { | |||
37477 | arg3 = 5.0; | |||
37478 | } | |||
37479 | Optional<float> arg4; | |||
37480 | if (args.hasDefined(4)) { | |||
37481 | arg4.Construct(); | |||
37482 | if (!ValueToPrimitive<float, eDefault>(cx, args[4], "Argument 5", &arg4.Value())) { | |||
37483 | return false; | |||
37484 | } else if (!std::isfinite(arg4.Value())) { | |||
37485 | cx.ThrowErrorMessage<MSG_NOT_FINITE>("Argument 5"); | |||
37486 | return false; | |||
37487 | } | |||
37488 | } | |||
37489 | // NOTE: This assert does NOT call the function. | |||
37490 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassArgsWithDefaults(cx, Constify(arg0), MOZ_KnownLive(Constify(arg1))(Constify(arg1)), Constify(arg2), arg3, Constify(arg4)))>, "Should be returning void here"); | |||
37491 | MOZ_KnownLive(self)(self)->PassArgsWithDefaults(cx, Constify(arg0), MOZ_KnownLive(Constify(arg1))(Constify(arg1)), Constify(arg2), arg3, Constify(arg4)); | |||
37492 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37492); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37492; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37493 | args.rval().setUndefined(); | |||
37494 | return true; | |||
37495 | } | |||
37496 | ||||
37497 | static const JSJitInfo passArgsWithDefaults_methodinfo = { | |||
37498 | { (JSJitGetterOp)passArgsWithDefaults }, | |||
37499 | { prototypes::id::TestExampleInterface }, | |||
37500 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37501 | JSJitInfo::Method, | |||
37502 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37503 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37504 | false, /* isInfallible. False in setters. */ | |||
37505 | false, /* isMovable. Not relevant for setters. */ | |||
37506 | false, /* isEliminatable. Not relevant for setters. */ | |||
37507 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37508 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37509 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37510 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37511 | }; | |||
37512 | ||||
37513 | MOZ_CAN_RUN_SCRIPT static bool | |||
37514 | get_toJSONShouldSkipThis(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37515 | { | |||
37516 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37519( cx, "TestExampleInterface" , "toJSONShouldSkipThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37517 | "TestExampleInterface", "toJSONShouldSkipThis", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37519( cx, "TestExampleInterface" , "toJSONShouldSkipThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37518 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37519( cx, "TestExampleInterface" , "toJSONShouldSkipThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37519 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37519( cx, "TestExampleInterface" , "toJSONShouldSkipThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37520 | ||||
37521 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37522 | JS::Rooted<JS::Value> result(cx); | |||
37523 | // NOTE: This assert does NOT call the function. | |||
37524 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetToJSONShouldSkipThis(cx, &result))>, "Should be returning void here"); | |||
37525 | MOZ_KnownLive(self)(self)->GetToJSONShouldSkipThis(cx, &result); | |||
37526 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37526); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37526; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37527 | JS::ExposeValueToActiveJS(result); | |||
37528 | args.rval().set(result); | |||
37529 | if (!MaybeWrapValue(cx, args.rval())) { | |||
37530 | return false; | |||
37531 | } | |||
37532 | return true; | |||
37533 | } | |||
37534 | ||||
37535 | MOZ_CAN_RUN_SCRIPT static bool | |||
37536 | set_toJSONShouldSkipThis(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37537 | { | |||
37538 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37541( cx, "TestExampleInterface" , "toJSONShouldSkipThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37539 | "TestExampleInterface", "toJSONShouldSkipThis", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37541( cx, "TestExampleInterface" , "toJSONShouldSkipThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37540 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37541( cx, "TestExampleInterface" , "toJSONShouldSkipThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37541 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37541( cx, "TestExampleInterface" , "toJSONShouldSkipThis", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37542 | ||||
37543 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37544 | JS::Rooted<JS::Value> arg0(cx); | |||
37545 | arg0 = args[0]; | |||
37546 | // NOTE: This assert does NOT call the function. | |||
37547 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetToJSONShouldSkipThis(cx, arg0))>, "Should be returning void here"); | |||
37548 | MOZ_KnownLive(self)(self)->SetToJSONShouldSkipThis(cx, arg0); | |||
37549 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37549); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37549; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37550 | ||||
37551 | return true; | |||
37552 | } | |||
37553 | ||||
37554 | static const JSJitInfo toJSONShouldSkipThis_getterinfo = { | |||
37555 | { get_toJSONShouldSkipThis }, | |||
37556 | { prototypes::id::TestExampleInterface }, | |||
37557 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37558 | JSJitInfo::Getter, | |||
37559 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37560 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
37561 | false, /* isInfallible. False in setters. */ | |||
37562 | false, /* isMovable. Not relevant for setters. */ | |||
37563 | false, /* isEliminatable. Not relevant for setters. */ | |||
37564 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37565 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37566 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37567 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37568 | }; | |||
37569 | static const JSJitInfo toJSONShouldSkipThis_setterinfo = { | |||
37570 | { (JSJitGetterOp)set_toJSONShouldSkipThis }, | |||
37571 | { prototypes::id::TestExampleInterface }, | |||
37572 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37573 | JSJitInfo::Setter, | |||
37574 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37575 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37576 | false, /* isInfallible. False in setters. */ | |||
37577 | false, /* isMovable. Not relevant for setters. */ | |||
37578 | false, /* isEliminatable. Not relevant for setters. */ | |||
37579 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37580 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37581 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37582 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37583 | }; | |||
37584 | ||||
37585 | MOZ_CAN_RUN_SCRIPT static bool | |||
37586 | get_toJSONShouldSkipThis2(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37587 | { | |||
37588 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37591( cx, "TestExampleInterface" , "toJSONShouldSkipThis2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37589 | "TestExampleInterface", "toJSONShouldSkipThis2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37591( cx, "TestExampleInterface" , "toJSONShouldSkipThis2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37590 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37591( cx, "TestExampleInterface" , "toJSONShouldSkipThis2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37591 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37591( cx, "TestExampleInterface" , "toJSONShouldSkipThis2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37592 | ||||
37593 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37594 | auto result(StrongOrRawPtr<mozilla::dom::TestParentInterface>(MOZ_KnownLive(self)(self)->ToJSONShouldSkipThis2())); | |||
37595 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37595); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37595; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37596 | if (!GetOrCreateDOMReflector(cx, result, args.rval())) { | |||
37597 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37597); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 37597; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
37598 | return false; | |||
37599 | } | |||
37600 | return true; | |||
37601 | } | |||
37602 | ||||
37603 | MOZ_CAN_RUN_SCRIPT static bool | |||
37604 | set_toJSONShouldSkipThis2(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37605 | { | |||
37606 | BindingCallContext cx(cx_, "TestExampleInterface.toJSONShouldSkipThis2 setter"); | |||
37607 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37610( cx, "TestExampleInterface" , "toJSONShouldSkipThis2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37608 | "TestExampleInterface", "toJSONShouldSkipThis2", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37610( cx, "TestExampleInterface" , "toJSONShouldSkipThis2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37609 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37610( cx, "TestExampleInterface" , "toJSONShouldSkipThis2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37610 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37610( cx, "TestExampleInterface" , "toJSONShouldSkipThis2", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37611 | ||||
37612 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37613 | NonNull<mozilla::dom::TestParentInterface> arg0; | |||
37614 | if (args[0].isObject()) { | |||
37615 | { | |||
37616 | // Our JSContext should be in the right global to do unwrapping in. | |||
37617 | nsresult rv = UnwrapObject<prototypes::id::TestParentInterface, mozilla::dom::TestParentInterface>(args[0], arg0, cx); | |||
37618 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
37619 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "TestParentInterface"); | |||
37620 | return false; | |||
37621 | } | |||
37622 | } | |||
37623 | } else { | |||
37624 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
37625 | return false; | |||
37626 | } | |||
37627 | // NOTE: This assert does NOT call the function. | |||
37628 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetToJSONShouldSkipThis2(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
37629 | MOZ_KnownLive(self)(self)->SetToJSONShouldSkipThis2(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
37630 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37630); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37630; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37631 | ||||
37632 | return true; | |||
37633 | } | |||
37634 | ||||
37635 | static const JSJitInfo toJSONShouldSkipThis2_getterinfo = { | |||
37636 | { get_toJSONShouldSkipThis2 }, | |||
37637 | { prototypes::id::TestExampleInterface }, | |||
37638 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37639 | JSJitInfo::Getter, | |||
37640 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37641 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
37642 | false, /* isInfallible. False in setters. */ | |||
37643 | false, /* isMovable. Not relevant for setters. */ | |||
37644 | false, /* isEliminatable. Not relevant for setters. */ | |||
37645 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37646 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37647 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37648 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37649 | }; | |||
37650 | static const JSJitInfo toJSONShouldSkipThis2_setterinfo = { | |||
37651 | { (JSJitGetterOp)set_toJSONShouldSkipThis2 }, | |||
37652 | { prototypes::id::TestExampleInterface }, | |||
37653 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37654 | JSJitInfo::Setter, | |||
37655 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37656 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37657 | false, /* isInfallible. False in setters. */ | |||
37658 | false, /* isMovable. Not relevant for setters. */ | |||
37659 | false, /* isEliminatable. Not relevant for setters. */ | |||
37660 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37661 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37662 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37663 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37664 | }; | |||
37665 | ||||
37666 | MOZ_CAN_RUN_SCRIPT static bool | |||
37667 | get_toJSONShouldSkipThis3(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37668 | { | |||
37669 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37672( cx, "TestExampleInterface" , "toJSONShouldSkipThis3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37670 | "TestExampleInterface", "toJSONShouldSkipThis3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37672( cx, "TestExampleInterface" , "toJSONShouldSkipThis3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37671 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37672( cx, "TestExampleInterface" , "toJSONShouldSkipThis3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37672 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37672( cx, "TestExampleInterface" , "toJSONShouldSkipThis3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37673 | ||||
37674 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37675 | auto result(StrongOrRawPtr<mozilla::dom::TestCallbackInterface>(MOZ_KnownLive(self)(self)->ToJSONShouldSkipThis3())); | |||
37676 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37676); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37676; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37677 | args.rval().setObjectOrNull(GetCallbackFromCallbackObject(cx, result)); | |||
37678 | if (!MaybeWrapObjectValue(cx, args.rval())) { | |||
37679 | return false; | |||
37680 | } | |||
37681 | return true; | |||
37682 | } | |||
37683 | ||||
37684 | MOZ_CAN_RUN_SCRIPT static bool | |||
37685 | set_toJSONShouldSkipThis3(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37686 | { | |||
37687 | BindingCallContext cx(cx_, "TestExampleInterface.toJSONShouldSkipThis3 setter"); | |||
37688 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37691( cx, "TestExampleInterface" , "toJSONShouldSkipThis3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37689 | "TestExampleInterface", "toJSONShouldSkipThis3", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37691( cx, "TestExampleInterface" , "toJSONShouldSkipThis3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37690 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37691( cx, "TestExampleInterface" , "toJSONShouldSkipThis3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37691 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37691( cx, "TestExampleInterface" , "toJSONShouldSkipThis3", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37692 | ||||
37693 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37694 | RootedCallback<OwningNonNull<binding_detail::FastTestCallbackInterface>> arg0(cx); | |||
37695 | if (args[0].isObject()) { | |||
37696 | { // scope for tempRoot and tempGlobalRoot if needed | |||
37697 | arg0 = new binding_detail::FastTestCallbackInterface(&args[0].toObject(), JS::CurrentGlobalOrNull(cx)); | |||
37698 | } | |||
37699 | } else { | |||
37700 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
37701 | return false; | |||
37702 | } | |||
37703 | // NOTE: This assert does NOT call the function. | |||
37704 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetToJSONShouldSkipThis3(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))))>, "Should be returning void here"); | |||
37705 | MOZ_KnownLive(self)(self)->SetToJSONShouldSkipThis3(MOZ_KnownLive(NonNullHelper(arg0))(NonNullHelper(arg0))); | |||
37706 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37706); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37706; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37707 | ||||
37708 | return true; | |||
37709 | } | |||
37710 | ||||
37711 | static const JSJitInfo toJSONShouldSkipThis3_getterinfo = { | |||
37712 | { get_toJSONShouldSkipThis3 }, | |||
37713 | { prototypes::id::TestExampleInterface }, | |||
37714 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37715 | JSJitInfo::Getter, | |||
37716 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37717 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
37718 | false, /* isInfallible. False in setters. */ | |||
37719 | false, /* isMovable. Not relevant for setters. */ | |||
37720 | false, /* isEliminatable. Not relevant for setters. */ | |||
37721 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37722 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37723 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37724 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37725 | }; | |||
37726 | static const JSJitInfo toJSONShouldSkipThis3_setterinfo = { | |||
37727 | { (JSJitGetterOp)set_toJSONShouldSkipThis3 }, | |||
37728 | { prototypes::id::TestExampleInterface }, | |||
37729 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37730 | JSJitInfo::Setter, | |||
37731 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37732 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37733 | false, /* isInfallible. False in setters. */ | |||
37734 | false, /* isMovable. Not relevant for setters. */ | |||
37735 | false, /* isEliminatable. Not relevant for setters. */ | |||
37736 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37737 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37738 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37739 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37740 | }; | |||
37741 | ||||
37742 | MOZ_CAN_RUN_SCRIPT static bool | |||
37743 | get_dashed_attribute(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37744 | { | |||
37745 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37748( cx, "TestExampleInterface" , "dashed-attribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37746 | "TestExampleInterface", "dashed-attribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37748( cx, "TestExampleInterface" , "dashed-attribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37747 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37748( cx, "TestExampleInterface" , "dashed-attribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37748 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37748( cx, "TestExampleInterface" , "dashed-attribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37749 | ||||
37750 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37751 | int8_t result(MOZ_KnownLive(self)(self)->Dashed_attribute()); | |||
37752 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37752); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37752; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37753 | args.rval().setInt32(int32_t(result)); | |||
37754 | return true; | |||
37755 | } | |||
37756 | ||||
37757 | MOZ_CAN_RUN_SCRIPT static bool | |||
37758 | set_dashed_attribute(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37759 | { | |||
37760 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37763( cx, "TestExampleInterface" , "dashed-attribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37761 | "TestExampleInterface", "dashed-attribute", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37763( cx, "TestExampleInterface" , "dashed-attribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37762 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37763( cx, "TestExampleInterface" , "dashed-attribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37763 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37763( cx, "TestExampleInterface" , "dashed-attribute", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37764 | ||||
37765 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37766 | int8_t arg0; | |||
37767 | if (!ValueToPrimitive<int8_t, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
37768 | return false; | |||
37769 | } | |||
37770 | // NOTE: This assert does NOT call the function. | |||
37771 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetDashed_attribute(arg0))>, "Should be returning void here"); | |||
37772 | MOZ_KnownLive(self)(self)->SetDashed_attribute(arg0); | |||
37773 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37773); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37773; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37774 | ||||
37775 | return true; | |||
37776 | } | |||
37777 | ||||
37778 | static const JSJitInfo dashed_attribute_getterinfo = { | |||
37779 | { get_dashed_attribute }, | |||
37780 | { prototypes::id::TestExampleInterface }, | |||
37781 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37782 | JSJitInfo::Getter, | |||
37783 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37784 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
37785 | true, /* isInfallible. False in setters. */ | |||
37786 | false, /* isMovable. Not relevant for setters. */ | |||
37787 | false, /* isEliminatable. Not relevant for setters. */ | |||
37788 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37789 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37790 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37791 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37792 | }; | |||
37793 | static const JSJitInfo dashed_attribute_setterinfo = { | |||
37794 | { (JSJitGetterOp)set_dashed_attribute }, | |||
37795 | { prototypes::id::TestExampleInterface }, | |||
37796 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37797 | JSJitInfo::Setter, | |||
37798 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37799 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37800 | false, /* isInfallible. False in setters. */ | |||
37801 | false, /* isMovable. Not relevant for setters. */ | |||
37802 | false, /* isEliminatable. Not relevant for setters. */ | |||
37803 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37804 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37805 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37806 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37807 | }; | |||
37808 | ||||
37809 | MOZ_CAN_RUN_SCRIPT static bool | |||
37810 | dashed_method(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
37811 | { | |||
37812 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37815( cx, "TestExampleInterface" , "dashed-method", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37813 | "TestExampleInterface", "dashed-method", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37815( cx, "TestExampleInterface" , "dashed-method", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37814 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject37815( cx, "TestExampleInterface" , "dashed-method", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37815 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37815( cx, "TestExampleInterface" , "dashed-method", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37816 | ||||
37817 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37818 | // NOTE: This assert does NOT call the function. | |||
37819 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->Dashed_method())>, "Should be returning void here"); | |||
37820 | MOZ_KnownLive(self)(self)->Dashed_method(); | |||
37821 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37821); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37821; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37822 | args.rval().setUndefined(); | |||
37823 | return true; | |||
37824 | } | |||
37825 | ||||
37826 | static const JSJitInfo dashed_method_methodinfo = { | |||
37827 | { (JSJitGetterOp)dashed_method }, | |||
37828 | { prototypes::id::TestExampleInterface }, | |||
37829 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37830 | JSJitInfo::Method, | |||
37831 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37832 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37833 | true, /* isInfallible. False in setters. */ | |||
37834 | false, /* isMovable. Not relevant for setters. */ | |||
37835 | false, /* isEliminatable. Not relevant for setters. */ | |||
37836 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37837 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37838 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37839 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37840 | }; | |||
37841 | ||||
37842 | MOZ_CAN_RUN_SCRIPT static bool | |||
37843 | get_nonEnumerableAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37844 | { | |||
37845 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37848( cx, "TestExampleInterface" , "nonEnumerableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37846 | "TestExampleInterface", "nonEnumerableAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37848( cx, "TestExampleInterface" , "nonEnumerableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37847 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37848( cx, "TestExampleInterface" , "nonEnumerableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37848 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37848( cx, "TestExampleInterface" , "nonEnumerableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37849 | ||||
37850 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37851 | bool result(MOZ_KnownLive(self)(self)->NonEnumerableAttr()); | |||
37852 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37852); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37852; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37853 | args.rval().setBoolean(result); | |||
37854 | return true; | |||
37855 | } | |||
37856 | ||||
37857 | MOZ_CAN_RUN_SCRIPT static bool | |||
37858 | set_nonEnumerableAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37859 | { | |||
37860 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37863( cx, "TestExampleInterface" , "nonEnumerableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37861 | "TestExampleInterface", "nonEnumerableAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37863( cx, "TestExampleInterface" , "nonEnumerableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37862 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37863( cx, "TestExampleInterface" , "nonEnumerableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37863 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37863( cx, "TestExampleInterface" , "nonEnumerableAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37864 | ||||
37865 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37866 | bool arg0; | |||
37867 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
37868 | return false; | |||
37869 | } | |||
37870 | // NOTE: This assert does NOT call the function. | |||
37871 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNonEnumerableAttr(arg0))>, "Should be returning void here"); | |||
37872 | MOZ_KnownLive(self)(self)->SetNonEnumerableAttr(arg0); | |||
37873 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37873); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37873; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37874 | ||||
37875 | return true; | |||
37876 | } | |||
37877 | ||||
37878 | static const JSJitInfo nonEnumerableAttr_getterinfo = { | |||
37879 | { get_nonEnumerableAttr }, | |||
37880 | { prototypes::id::TestExampleInterface }, | |||
37881 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37882 | JSJitInfo::Getter, | |||
37883 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37884 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
37885 | true, /* isInfallible. False in setters. */ | |||
37886 | false, /* isMovable. Not relevant for setters. */ | |||
37887 | false, /* isEliminatable. Not relevant for setters. */ | |||
37888 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37889 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37890 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37891 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37892 | }; | |||
37893 | static const JSJitInfo nonEnumerableAttr_setterinfo = { | |||
37894 | { (JSJitGetterOp)set_nonEnumerableAttr }, | |||
37895 | { prototypes::id::TestExampleInterface }, | |||
37896 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37897 | JSJitInfo::Setter, | |||
37898 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37899 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37900 | false, /* isInfallible. False in setters. */ | |||
37901 | false, /* isMovable. Not relevant for setters. */ | |||
37902 | false, /* isEliminatable. Not relevant for setters. */ | |||
37903 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37904 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37905 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37906 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37907 | }; | |||
37908 | ||||
37909 | MOZ_CAN_RUN_SCRIPT static bool | |||
37910 | nonEnumerableMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
37911 | { | |||
37912 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37915( cx, "TestExampleInterface" , "nonEnumerableMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37913 | "TestExampleInterface", "nonEnumerableMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37915( cx, "TestExampleInterface" , "nonEnumerableMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37914 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject37915( cx, "TestExampleInterface" , "nonEnumerableMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
37915 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37915( cx, "TestExampleInterface" , "nonEnumerableMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
37916 | ||||
37917 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37918 | // NOTE: This assert does NOT call the function. | |||
37919 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NonEnumerableMethod())>, "Should be returning void here"); | |||
37920 | MOZ_KnownLive(self)(self)->NonEnumerableMethod(); | |||
37921 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37921); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37921; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37922 | args.rval().setUndefined(); | |||
37923 | return true; | |||
37924 | } | |||
37925 | ||||
37926 | static const JSJitInfo nonEnumerableMethod_methodinfo = { | |||
37927 | { (JSJitGetterOp)nonEnumerableMethod }, | |||
37928 | { prototypes::id::TestExampleInterface }, | |||
37929 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
37930 | JSJitInfo::Method, | |||
37931 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
37932 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
37933 | true, /* isInfallible. False in setters. */ | |||
37934 | false, /* isMovable. Not relevant for setters. */ | |||
37935 | false, /* isEliminatable. Not relevant for setters. */ | |||
37936 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
37937 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
37938 | false, /* isTypedMethod. Only relevant for methods. */ | |||
37939 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
37940 | }; | |||
37941 | ||||
37942 | MOZ_CAN_RUN_SCRIPT static bool | |||
37943 | get_allowSharedArrayBufferViewTypedef(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
37944 | { | |||
37945 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37948( cx, "TestExampleInterface" , "allowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37946 | "TestExampleInterface", "allowSharedArrayBufferViewTypedef", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37948( cx, "TestExampleInterface" , "allowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37947 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject37948( cx, "TestExampleInterface" , "allowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37948 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37948( cx, "TestExampleInterface" , "allowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
37949 | ||||
37950 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37951 | JS::Rooted<JSObject*> result(cx); | |||
37952 | // NOTE: This assert does NOT call the function. | |||
37953 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetAllowSharedArrayBufferViewTypedef(cx, &result))>, "Should be returning void here"); | |||
37954 | MOZ_KnownLive(self)(self)->GetAllowSharedArrayBufferViewTypedef(cx, &result); | |||
37955 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37955); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37955; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37956 | JS::ExposeObjectToActiveJS(result); | |||
37957 | args.rval().setObject(*result); | |||
37958 | if (!MaybeWrapNonDOMObjectValue(cx, args.rval())) { | |||
37959 | return false; | |||
37960 | } | |||
37961 | return true; | |||
37962 | } | |||
37963 | ||||
37964 | MOZ_CAN_RUN_SCRIPT static bool | |||
37965 | set_allowSharedArrayBufferViewTypedef(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
37966 | { | |||
37967 | BindingCallContext cx(cx_, "TestExampleInterface.allowSharedArrayBufferViewTypedef setter"); | |||
37968 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject37971( cx, "TestExampleInterface" , "allowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37969 | "TestExampleInterface", "allowSharedArrayBufferViewTypedef", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject37971( cx, "TestExampleInterface" , "allowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37970 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject37971( cx, "TestExampleInterface" , "allowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
37971 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject37971( cx, "TestExampleInterface" , "allowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
37972 | ||||
37973 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
37974 | RootedSpiderMonkeyInterface<ArrayBufferView> arg0(cx); | |||
37975 | if (args[0].isObject()) { | |||
37976 | if (!arg0.Init(&args[0].toObject())) { | |||
37977 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "ArrayBufferView"); | |||
37978 | return false; | |||
37979 | } | |||
37980 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
37981 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Value being assigned"); | |||
37982 | return false; | |||
37983 | } | |||
37984 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
37985 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Value being assigned"); | |||
37986 | return false; | |||
37987 | } | |||
37988 | } else { | |||
37989 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
37990 | return false; | |||
37991 | } | |||
37992 | // NOTE: This assert does NOT call the function. | |||
37993 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetAllowSharedArrayBufferViewTypedef(Constify(arg0)))>, "Should be returning void here"); | |||
37994 | MOZ_KnownLive(self)(self)->SetAllowSharedArrayBufferViewTypedef(Constify(arg0)); | |||
37995 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 37995); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 37995; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
37996 | ||||
37997 | return true; | |||
37998 | } | |||
37999 | ||||
38000 | static const JSJitInfo allowSharedArrayBufferViewTypedef_getterinfo = { | |||
38001 | { get_allowSharedArrayBufferViewTypedef }, | |||
38002 | { prototypes::id::TestExampleInterface }, | |||
38003 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38004 | JSJitInfo::Getter, | |||
38005 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38006 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
38007 | false, /* isInfallible. False in setters. */ | |||
38008 | false, /* isMovable. Not relevant for setters. */ | |||
38009 | false, /* isEliminatable. Not relevant for setters. */ | |||
38010 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38011 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38012 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38013 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38014 | }; | |||
38015 | static const JSJitInfo allowSharedArrayBufferViewTypedef_setterinfo = { | |||
38016 | { (JSJitGetterOp)set_allowSharedArrayBufferViewTypedef }, | |||
38017 | { prototypes::id::TestExampleInterface }, | |||
38018 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38019 | JSJitInfo::Setter, | |||
38020 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38021 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38022 | false, /* isInfallible. False in setters. */ | |||
38023 | false, /* isMovable. Not relevant for setters. */ | |||
38024 | false, /* isEliminatable. Not relevant for setters. */ | |||
38025 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38026 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38027 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38028 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38029 | }; | |||
38030 | ||||
38031 | MOZ_CAN_RUN_SCRIPT static bool | |||
38032 | get_allowSharedArrayBufferView(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
38033 | { | |||
38034 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38037( cx, "TestExampleInterface" , "allowSharedArrayBufferView", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38035 | "TestExampleInterface", "allowSharedArrayBufferView", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38037( cx, "TestExampleInterface" , "allowSharedArrayBufferView", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38036 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject38037( cx, "TestExampleInterface" , "allowSharedArrayBufferView", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38037 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38037( cx, "TestExampleInterface" , "allowSharedArrayBufferView", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38038 | ||||
38039 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38040 | JS::Rooted<JSObject*> result(cx); | |||
38041 | // NOTE: This assert does NOT call the function. | |||
38042 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetAllowSharedArrayBufferView(cx, &result))>, "Should be returning void here"); | |||
38043 | MOZ_KnownLive(self)(self)->GetAllowSharedArrayBufferView(cx, &result); | |||
38044 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38044); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38044; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38045 | JS::ExposeObjectToActiveJS(result); | |||
38046 | args.rval().setObject(*result); | |||
38047 | if (!MaybeWrapNonDOMObjectValue(cx, args.rval())) { | |||
38048 | return false; | |||
38049 | } | |||
38050 | return true; | |||
38051 | } | |||
38052 | ||||
38053 | MOZ_CAN_RUN_SCRIPT static bool | |||
38054 | set_allowSharedArrayBufferView(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
38055 | { | |||
38056 | BindingCallContext cx(cx_, "TestExampleInterface.allowSharedArrayBufferView setter"); | |||
38057 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38060( cx, "TestExampleInterface" , "allowSharedArrayBufferView", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38058 | "TestExampleInterface", "allowSharedArrayBufferView", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38060( cx, "TestExampleInterface" , "allowSharedArrayBufferView", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38059 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject38060( cx, "TestExampleInterface" , "allowSharedArrayBufferView", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38060 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38060( cx, "TestExampleInterface" , "allowSharedArrayBufferView", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38061 | ||||
38062 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38063 | RootedSpiderMonkeyInterface<ArrayBufferView> arg0(cx); | |||
38064 | if (args[0].isObject()) { | |||
38065 | if (!arg0.Init(&args[0].toObject())) { | |||
38066 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "ArrayBufferView"); | |||
38067 | return false; | |||
38068 | } | |||
38069 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
38070 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Value being assigned"); | |||
38071 | return false; | |||
38072 | } | |||
38073 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
38074 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Value being assigned"); | |||
38075 | return false; | |||
38076 | } | |||
38077 | } else { | |||
38078 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
38079 | return false; | |||
38080 | } | |||
38081 | // NOTE: This assert does NOT call the function. | |||
38082 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetAllowSharedArrayBufferView(Constify(arg0)))>, "Should be returning void here"); | |||
38083 | MOZ_KnownLive(self)(self)->SetAllowSharedArrayBufferView(Constify(arg0)); | |||
38084 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38084); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38084; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38085 | ||||
38086 | return true; | |||
38087 | } | |||
38088 | ||||
38089 | static const JSJitInfo allowSharedArrayBufferView_getterinfo = { | |||
38090 | { get_allowSharedArrayBufferView }, | |||
38091 | { prototypes::id::TestExampleInterface }, | |||
38092 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38093 | JSJitInfo::Getter, | |||
38094 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38095 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
38096 | false, /* isInfallible. False in setters. */ | |||
38097 | false, /* isMovable. Not relevant for setters. */ | |||
38098 | false, /* isEliminatable. Not relevant for setters. */ | |||
38099 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38100 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38101 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38102 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38103 | }; | |||
38104 | static const JSJitInfo allowSharedArrayBufferView_setterinfo = { | |||
38105 | { (JSJitGetterOp)set_allowSharedArrayBufferView }, | |||
38106 | { prototypes::id::TestExampleInterface }, | |||
38107 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38108 | JSJitInfo::Setter, | |||
38109 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38110 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38111 | false, /* isInfallible. False in setters. */ | |||
38112 | false, /* isMovable. Not relevant for setters. */ | |||
38113 | false, /* isEliminatable. Not relevant for setters. */ | |||
38114 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38115 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38116 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38117 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38118 | }; | |||
38119 | ||||
38120 | MOZ_CAN_RUN_SCRIPT static bool | |||
38121 | get_allowSharedNullableArrayBufferView(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
38122 | { | |||
38123 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38126( cx, "TestExampleInterface" , "allowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38124 | "TestExampleInterface", "allowSharedNullableArrayBufferView", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38126( cx, "TestExampleInterface" , "allowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38125 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject38126( cx, "TestExampleInterface" , "allowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38126 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38126( cx, "TestExampleInterface" , "allowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38127 | ||||
38128 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38129 | JS::Rooted<JSObject*> result(cx); | |||
38130 | // NOTE: This assert does NOT call the function. | |||
38131 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetAllowSharedNullableArrayBufferView(cx, &result))>, "Should be returning void here"); | |||
38132 | MOZ_KnownLive(self)(self)->GetAllowSharedNullableArrayBufferView(cx, &result); | |||
38133 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38133); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38133; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38134 | if (result) { | |||
38135 | JS::ExposeObjectToActiveJS(result); | |||
38136 | } | |||
38137 | args.rval().setObjectOrNull(result); | |||
38138 | if (!MaybeWrapNonDOMObjectOrNullValue(cx, args.rval())) { | |||
38139 | return false; | |||
38140 | } | |||
38141 | return true; | |||
38142 | } | |||
38143 | ||||
38144 | MOZ_CAN_RUN_SCRIPT static bool | |||
38145 | set_allowSharedNullableArrayBufferView(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
38146 | { | |||
38147 | BindingCallContext cx(cx_, "TestExampleInterface.allowSharedNullableArrayBufferView setter"); | |||
38148 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38151( cx, "TestExampleInterface" , "allowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38149 | "TestExampleInterface", "allowSharedNullableArrayBufferView", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38151( cx, "TestExampleInterface" , "allowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38150 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject38151( cx, "TestExampleInterface" , "allowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38151 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38151( cx, "TestExampleInterface" , "allowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38152 | ||||
38153 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38154 | RootedSpiderMonkeyInterface<Nullable<ArrayBufferView>> arg0(cx); | |||
38155 | if (args[0].isObject()) { | |||
38156 | if (!arg0.SetValue().Init(&args[0].toObject())) { | |||
38157 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "ArrayBufferViewOrNull"); | |||
38158 | return false; | |||
38159 | } | |||
38160 | if (JS::IsLargeArrayBufferView(arg0.SetValue().Obj())) { | |||
38161 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Value being assigned"); | |||
38162 | return false; | |||
38163 | } | |||
38164 | if (JS::IsResizableArrayBufferView(arg0.SetValue().Obj())) { | |||
38165 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Value being assigned"); | |||
38166 | return false; | |||
38167 | } | |||
38168 | } else if (args[0].isNullOrUndefined()) { | |||
38169 | arg0.SetNull(); | |||
38170 | } else { | |||
38171 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
38172 | return false; | |||
38173 | } | |||
38174 | // NOTE: This assert does NOT call the function. | |||
38175 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetAllowSharedNullableArrayBufferView(Constify(arg0)))>, "Should be returning void here"); | |||
38176 | MOZ_KnownLive(self)(self)->SetAllowSharedNullableArrayBufferView(Constify(arg0)); | |||
38177 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38177); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38177; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38178 | ||||
38179 | return true; | |||
38180 | } | |||
38181 | ||||
38182 | static const JSJitInfo allowSharedNullableArrayBufferView_getterinfo = { | |||
38183 | { get_allowSharedNullableArrayBufferView }, | |||
38184 | { prototypes::id::TestExampleInterface }, | |||
38185 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38186 | JSJitInfo::Getter, | |||
38187 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38188 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
38189 | false, /* isInfallible. False in setters. */ | |||
38190 | false, /* isMovable. Not relevant for setters. */ | |||
38191 | false, /* isEliminatable. Not relevant for setters. */ | |||
38192 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38193 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38194 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38195 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38196 | }; | |||
38197 | static const JSJitInfo allowSharedNullableArrayBufferView_setterinfo = { | |||
38198 | { (JSJitGetterOp)set_allowSharedNullableArrayBufferView }, | |||
38199 | { prototypes::id::TestExampleInterface }, | |||
38200 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38201 | JSJitInfo::Setter, | |||
38202 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38203 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38204 | false, /* isInfallible. False in setters. */ | |||
38205 | false, /* isMovable. Not relevant for setters. */ | |||
38206 | false, /* isEliminatable. Not relevant for setters. */ | |||
38207 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38208 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38209 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38210 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38211 | }; | |||
38212 | ||||
38213 | MOZ_CAN_RUN_SCRIPT static bool | |||
38214 | get_allowSharedArrayBuffer(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
38215 | { | |||
38216 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38219( cx, "TestExampleInterface" , "allowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38217 | "TestExampleInterface", "allowSharedArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38219( cx, "TestExampleInterface" , "allowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38218 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject38219( cx, "TestExampleInterface" , "allowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38219 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38219( cx, "TestExampleInterface" , "allowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
38220 | ||||
38221 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38222 | JS::Rooted<JSObject*> result(cx); | |||
38223 | // NOTE: This assert does NOT call the function. | |||
38224 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetAllowSharedArrayBuffer(cx, &result))>, "Should be returning void here"); | |||
38225 | MOZ_KnownLive(self)(self)->GetAllowSharedArrayBuffer(cx, &result); | |||
38226 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38226); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38226; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38227 | JS::ExposeObjectToActiveJS(result); | |||
38228 | args.rval().setObject(*result); | |||
38229 | if (!MaybeWrapNonDOMObjectValue(cx, args.rval())) { | |||
38230 | return false; | |||
38231 | } | |||
38232 | return true; | |||
38233 | } | |||
38234 | ||||
38235 | MOZ_CAN_RUN_SCRIPT static bool | |||
38236 | set_allowSharedArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
38237 | { | |||
38238 | BindingCallContext cx(cx_, "TestExampleInterface.allowSharedArrayBuffer setter"); | |||
38239 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38242( cx, "TestExampleInterface" , "allowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38240 | "TestExampleInterface", "allowSharedArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38242( cx, "TestExampleInterface" , "allowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38241 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject38242( cx, "TestExampleInterface" , "allowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38242 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38242( cx, "TestExampleInterface" , "allowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
38243 | ||||
38244 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38245 | RootedSpiderMonkeyInterface<ArrayBuffer> arg0(cx); | |||
38246 | if (args[0].isObject()) { | |||
38247 | if (!arg0.Init(&args[0].toObject())) { | |||
38248 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "ArrayBuffer"); | |||
38249 | return false; | |||
38250 | } | |||
38251 | if (JS::IsLargeArrayBufferMaybeShared(arg0.Obj())) { | |||
38252 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Value being assigned"); | |||
38253 | return false; | |||
38254 | } | |||
38255 | if (JS::IsResizableArrayBufferMaybeShared(arg0.Obj())) { | |||
38256 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Value being assigned"); | |||
38257 | return false; | |||
38258 | } | |||
38259 | } else { | |||
38260 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
38261 | return false; | |||
38262 | } | |||
38263 | // NOTE: This assert does NOT call the function. | |||
38264 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetAllowSharedArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
38265 | MOZ_KnownLive(self)(self)->SetAllowSharedArrayBuffer(Constify(arg0)); | |||
38266 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38266); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38266; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38267 | ||||
38268 | return true; | |||
38269 | } | |||
38270 | ||||
38271 | static const JSJitInfo allowSharedArrayBuffer_getterinfo = { | |||
38272 | { get_allowSharedArrayBuffer }, | |||
38273 | { prototypes::id::TestExampleInterface }, | |||
38274 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38275 | JSJitInfo::Getter, | |||
38276 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38277 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
38278 | false, /* isInfallible. False in setters. */ | |||
38279 | false, /* isMovable. Not relevant for setters. */ | |||
38280 | false, /* isEliminatable. Not relevant for setters. */ | |||
38281 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38282 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38283 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38284 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38285 | }; | |||
38286 | static const JSJitInfo allowSharedArrayBuffer_setterinfo = { | |||
38287 | { (JSJitGetterOp)set_allowSharedArrayBuffer }, | |||
38288 | { prototypes::id::TestExampleInterface }, | |||
38289 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38290 | JSJitInfo::Setter, | |||
38291 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38292 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38293 | false, /* isInfallible. False in setters. */ | |||
38294 | false, /* isMovable. Not relevant for setters. */ | |||
38295 | false, /* isEliminatable. Not relevant for setters. */ | |||
38296 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38297 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38298 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38299 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38300 | }; | |||
38301 | ||||
38302 | MOZ_CAN_RUN_SCRIPT static bool | |||
38303 | get_allowSharedNullableArrayBuffer(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
38304 | { | |||
38305 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38308( cx, "TestExampleInterface" , "allowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38306 | "TestExampleInterface", "allowSharedNullableArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38308( cx, "TestExampleInterface" , "allowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38307 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject38308( cx, "TestExampleInterface" , "allowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38308 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38308( cx, "TestExampleInterface" , "allowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38309 | ||||
38310 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38311 | JS::Rooted<JSObject*> result(cx); | |||
38312 | // NOTE: This assert does NOT call the function. | |||
38313 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetAllowSharedNullableArrayBuffer(cx, &result))>, "Should be returning void here"); | |||
38314 | MOZ_KnownLive(self)(self)->GetAllowSharedNullableArrayBuffer(cx, &result); | |||
38315 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38315); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38315; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38316 | if (result) { | |||
38317 | JS::ExposeObjectToActiveJS(result); | |||
38318 | } | |||
38319 | args.rval().setObjectOrNull(result); | |||
38320 | if (!MaybeWrapNonDOMObjectOrNullValue(cx, args.rval())) { | |||
38321 | return false; | |||
38322 | } | |||
38323 | return true; | |||
38324 | } | |||
38325 | ||||
38326 | MOZ_CAN_RUN_SCRIPT static bool | |||
38327 | set_allowSharedNullableArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
38328 | { | |||
38329 | BindingCallContext cx(cx_, "TestExampleInterface.allowSharedNullableArrayBuffer setter"); | |||
38330 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38333( cx, "TestExampleInterface" , "allowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38331 | "TestExampleInterface", "allowSharedNullableArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38333( cx, "TestExampleInterface" , "allowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38332 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject38333( cx, "TestExampleInterface" , "allowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38333 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38333( cx, "TestExampleInterface" , "allowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38334 | ||||
38335 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38336 | RootedSpiderMonkeyInterface<Nullable<ArrayBuffer>> arg0(cx); | |||
38337 | if (args[0].isObject()) { | |||
38338 | if (!arg0.SetValue().Init(&args[0].toObject())) { | |||
38339 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Value being assigned", "ArrayBufferOrNull"); | |||
38340 | return false; | |||
38341 | } | |||
38342 | if (JS::IsLargeArrayBufferMaybeShared(arg0.SetValue().Obj())) { | |||
38343 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Value being assigned"); | |||
38344 | return false; | |||
38345 | } | |||
38346 | if (JS::IsResizableArrayBufferMaybeShared(arg0.SetValue().Obj())) { | |||
38347 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Value being assigned"); | |||
38348 | return false; | |||
38349 | } | |||
38350 | } else if (args[0].isNullOrUndefined()) { | |||
38351 | arg0.SetNull(); | |||
38352 | } else { | |||
38353 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Value being assigned"); | |||
38354 | return false; | |||
38355 | } | |||
38356 | // NOTE: This assert does NOT call the function. | |||
38357 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetAllowSharedNullableArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
38358 | MOZ_KnownLive(self)(self)->SetAllowSharedNullableArrayBuffer(Constify(arg0)); | |||
38359 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38359); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38359; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38360 | ||||
38361 | return true; | |||
38362 | } | |||
38363 | ||||
38364 | static const JSJitInfo allowSharedNullableArrayBuffer_getterinfo = { | |||
38365 | { get_allowSharedNullableArrayBuffer }, | |||
38366 | { prototypes::id::TestExampleInterface }, | |||
38367 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38368 | JSJitInfo::Getter, | |||
38369 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38370 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
38371 | false, /* isInfallible. False in setters. */ | |||
38372 | false, /* isMovable. Not relevant for setters. */ | |||
38373 | false, /* isEliminatable. Not relevant for setters. */ | |||
38374 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38375 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38376 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38377 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38378 | }; | |||
38379 | static const JSJitInfo allowSharedNullableArrayBuffer_setterinfo = { | |||
38380 | { (JSJitGetterOp)set_allowSharedNullableArrayBuffer }, | |||
38381 | { prototypes::id::TestExampleInterface }, | |||
38382 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38383 | JSJitInfo::Setter, | |||
38384 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38385 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38386 | false, /* isInfallible. False in setters. */ | |||
38387 | false, /* isMovable. Not relevant for setters. */ | |||
38388 | false, /* isEliminatable. Not relevant for setters. */ | |||
38389 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38390 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38391 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38392 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38393 | }; | |||
38394 | ||||
38395 | MOZ_CAN_RUN_SCRIPT static bool | |||
38396 | passAllowSharedArrayBufferViewTypedef(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
38397 | { | |||
38398 | BindingCallContext cx(cx_, "TestExampleInterface.passAllowSharedArrayBufferViewTypedef"); | |||
38399 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38402( cx, "TestExampleInterface" , "passAllowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38400 | "TestExampleInterface", "passAllowSharedArrayBufferViewTypedef", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38402( cx, "TestExampleInterface" , "passAllowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38401 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject38402( cx, "TestExampleInterface" , "passAllowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38402 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38402( cx, "TestExampleInterface" , "passAllowSharedArrayBufferViewTypedef", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38403 | ||||
38404 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38405 | if (!args.requireAtLeast(cx, "TestExampleInterface.passAllowSharedArrayBufferViewTypedef", 1)) { | |||
38406 | return false; | |||
38407 | } | |||
38408 | RootedSpiderMonkeyInterface<ArrayBufferView> arg0(cx); | |||
38409 | if (args[0].isObject()) { | |||
38410 | if (!arg0.Init(&args[0].toObject())) { | |||
38411 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBufferView"); | |||
38412 | return false; | |||
38413 | } | |||
38414 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
38415 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
38416 | return false; | |||
38417 | } | |||
38418 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
38419 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
38420 | return false; | |||
38421 | } | |||
38422 | } else { | |||
38423 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
38424 | return false; | |||
38425 | } | |||
38426 | // NOTE: This assert does NOT call the function. | |||
38427 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassAllowSharedArrayBufferViewTypedef(Constify(arg0)))>, "Should be returning void here"); | |||
38428 | MOZ_KnownLive(self)(self)->PassAllowSharedArrayBufferViewTypedef(Constify(arg0)); | |||
38429 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38429); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38429; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38430 | args.rval().setUndefined(); | |||
38431 | return true; | |||
38432 | } | |||
38433 | ||||
38434 | static const JSJitInfo passAllowSharedArrayBufferViewTypedef_methodinfo = { | |||
38435 | { (JSJitGetterOp)passAllowSharedArrayBufferViewTypedef }, | |||
38436 | { prototypes::id::TestExampleInterface }, | |||
38437 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38438 | JSJitInfo::Method, | |||
38439 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38440 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38441 | false, /* isInfallible. False in setters. */ | |||
38442 | false, /* isMovable. Not relevant for setters. */ | |||
38443 | false, /* isEliminatable. Not relevant for setters. */ | |||
38444 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38445 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38446 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38447 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38448 | }; | |||
38449 | ||||
38450 | MOZ_CAN_RUN_SCRIPT static bool | |||
38451 | passAllowSharedArrayBufferView(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
38452 | { | |||
38453 | BindingCallContext cx(cx_, "TestExampleInterface.passAllowSharedArrayBufferView"); | |||
38454 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38457( cx, "TestExampleInterface" , "passAllowSharedArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38455 | "TestExampleInterface", "passAllowSharedArrayBufferView", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38457( cx, "TestExampleInterface" , "passAllowSharedArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38456 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject38457( cx, "TestExampleInterface" , "passAllowSharedArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38457 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38457( cx, "TestExampleInterface" , "passAllowSharedArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38458 | ||||
38459 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38460 | if (!args.requireAtLeast(cx, "TestExampleInterface.passAllowSharedArrayBufferView", 1)) { | |||
38461 | return false; | |||
38462 | } | |||
38463 | RootedSpiderMonkeyInterface<ArrayBufferView> arg0(cx); | |||
38464 | if (args[0].isObject()) { | |||
38465 | if (!arg0.Init(&args[0].toObject())) { | |||
38466 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBufferView"); | |||
38467 | return false; | |||
38468 | } | |||
38469 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
38470 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
38471 | return false; | |||
38472 | } | |||
38473 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
38474 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
38475 | return false; | |||
38476 | } | |||
38477 | } else { | |||
38478 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
38479 | return false; | |||
38480 | } | |||
38481 | // NOTE: This assert does NOT call the function. | |||
38482 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassAllowSharedArrayBufferView(Constify(arg0)))>, "Should be returning void here"); | |||
38483 | MOZ_KnownLive(self)(self)->PassAllowSharedArrayBufferView(Constify(arg0)); | |||
38484 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38484); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38484; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38485 | args.rval().setUndefined(); | |||
38486 | return true; | |||
38487 | } | |||
38488 | ||||
38489 | static const JSJitInfo passAllowSharedArrayBufferView_methodinfo = { | |||
38490 | { (JSJitGetterOp)passAllowSharedArrayBufferView }, | |||
38491 | { prototypes::id::TestExampleInterface }, | |||
38492 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38493 | JSJitInfo::Method, | |||
38494 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38495 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38496 | false, /* isInfallible. False in setters. */ | |||
38497 | false, /* isMovable. Not relevant for setters. */ | |||
38498 | false, /* isEliminatable. Not relevant for setters. */ | |||
38499 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38500 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38501 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38502 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38503 | }; | |||
38504 | ||||
38505 | MOZ_CAN_RUN_SCRIPT static bool | |||
38506 | passAllowSharedNullableArrayBufferView(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
38507 | { | |||
38508 | BindingCallContext cx(cx_, "TestExampleInterface.passAllowSharedNullableArrayBufferView"); | |||
38509 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38512( cx, "TestExampleInterface" , "passAllowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38510 | "TestExampleInterface", "passAllowSharedNullableArrayBufferView", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38512( cx, "TestExampleInterface" , "passAllowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38511 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject38512( cx, "TestExampleInterface" , "passAllowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38512 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38512( cx, "TestExampleInterface" , "passAllowSharedNullableArrayBufferView", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38513 | ||||
38514 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38515 | if (!args.requireAtLeast(cx, "TestExampleInterface.passAllowSharedNullableArrayBufferView", 1)) { | |||
38516 | return false; | |||
38517 | } | |||
38518 | RootedSpiderMonkeyInterface<Nullable<ArrayBufferView>> arg0(cx); | |||
38519 | if (args[0].isObject()) { | |||
38520 | if (!arg0.SetValue().Init(&args[0].toObject())) { | |||
38521 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBufferViewOrNull"); | |||
38522 | return false; | |||
38523 | } | |||
38524 | if (JS::IsLargeArrayBufferView(arg0.SetValue().Obj())) { | |||
38525 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
38526 | return false; | |||
38527 | } | |||
38528 | if (JS::IsResizableArrayBufferView(arg0.SetValue().Obj())) { | |||
38529 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
38530 | return false; | |||
38531 | } | |||
38532 | } else if (args[0].isNullOrUndefined()) { | |||
38533 | arg0.SetNull(); | |||
38534 | } else { | |||
38535 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
38536 | return false; | |||
38537 | } | |||
38538 | // NOTE: This assert does NOT call the function. | |||
38539 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassAllowSharedNullableArrayBufferView(Constify(arg0)))>, "Should be returning void here"); | |||
38540 | MOZ_KnownLive(self)(self)->PassAllowSharedNullableArrayBufferView(Constify(arg0)); | |||
38541 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38541); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38541; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38542 | args.rval().setUndefined(); | |||
38543 | return true; | |||
38544 | } | |||
38545 | ||||
38546 | static const JSJitInfo passAllowSharedNullableArrayBufferView_methodinfo = { | |||
38547 | { (JSJitGetterOp)passAllowSharedNullableArrayBufferView }, | |||
38548 | { prototypes::id::TestExampleInterface }, | |||
38549 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38550 | JSJitInfo::Method, | |||
38551 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38552 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38553 | false, /* isInfallible. False in setters. */ | |||
38554 | false, /* isMovable. Not relevant for setters. */ | |||
38555 | false, /* isEliminatable. Not relevant for setters. */ | |||
38556 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38557 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38558 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38559 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38560 | }; | |||
38561 | ||||
38562 | MOZ_CAN_RUN_SCRIPT static bool | |||
38563 | passAllowSharedArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
38564 | { | |||
38565 | BindingCallContext cx(cx_, "TestExampleInterface.passAllowSharedArrayBuffer"); | |||
38566 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38569( cx, "TestExampleInterface" , "passAllowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38567 | "TestExampleInterface", "passAllowSharedArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38569( cx, "TestExampleInterface" , "passAllowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38568 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject38569( cx, "TestExampleInterface" , "passAllowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38569 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38569( cx, "TestExampleInterface" , "passAllowSharedArrayBuffer", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38570 | ||||
38571 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38572 | if (!args.requireAtLeast(cx, "TestExampleInterface.passAllowSharedArrayBuffer", 1)) { | |||
38573 | return false; | |||
38574 | } | |||
38575 | RootedSpiderMonkeyInterface<ArrayBuffer> arg0(cx); | |||
38576 | if (args[0].isObject()) { | |||
38577 | if (!arg0.Init(&args[0].toObject())) { | |||
38578 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBuffer"); | |||
38579 | return false; | |||
38580 | } | |||
38581 | if (JS::IsLargeArrayBufferMaybeShared(arg0.Obj())) { | |||
38582 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
38583 | return false; | |||
38584 | } | |||
38585 | if (JS::IsResizableArrayBufferMaybeShared(arg0.Obj())) { | |||
38586 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
38587 | return false; | |||
38588 | } | |||
38589 | } else { | |||
38590 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
38591 | return false; | |||
38592 | } | |||
38593 | // NOTE: This assert does NOT call the function. | |||
38594 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassAllowSharedArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
38595 | MOZ_KnownLive(self)(self)->PassAllowSharedArrayBuffer(Constify(arg0)); | |||
38596 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38596); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38596; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38597 | args.rval().setUndefined(); | |||
38598 | return true; | |||
38599 | } | |||
38600 | ||||
38601 | static const JSJitInfo passAllowSharedArrayBuffer_methodinfo = { | |||
38602 | { (JSJitGetterOp)passAllowSharedArrayBuffer }, | |||
38603 | { prototypes::id::TestExampleInterface }, | |||
38604 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38605 | JSJitInfo::Method, | |||
38606 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38607 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38608 | false, /* isInfallible. False in setters. */ | |||
38609 | false, /* isMovable. Not relevant for setters. */ | |||
38610 | false, /* isEliminatable. Not relevant for setters. */ | |||
38611 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38612 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38613 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38614 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38615 | }; | |||
38616 | ||||
38617 | MOZ_CAN_RUN_SCRIPT static bool | |||
38618 | passAllowSharedNullableArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
38619 | { | |||
38620 | BindingCallContext cx(cx_, "TestExampleInterface.passAllowSharedNullableArrayBuffer"); | |||
38621 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38624( cx, "TestExampleInterface" , "passAllowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38622 | "TestExampleInterface", "passAllowSharedNullableArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38624( cx, "TestExampleInterface" , "passAllowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38623 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject38624( cx, "TestExampleInterface" , "passAllowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38624 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38624( cx, "TestExampleInterface" , "passAllowSharedNullableArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38625 | ||||
38626 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38627 | if (!args.requireAtLeast(cx, "TestExampleInterface.passAllowSharedNullableArrayBuffer", 1)) { | |||
38628 | return false; | |||
38629 | } | |||
38630 | RootedSpiderMonkeyInterface<Nullable<ArrayBuffer>> arg0(cx); | |||
38631 | if (args[0].isObject()) { | |||
38632 | if (!arg0.SetValue().Init(&args[0].toObject())) { | |||
38633 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 1", "ArrayBufferOrNull"); | |||
38634 | return false; | |||
38635 | } | |||
38636 | if (JS::IsLargeArrayBufferMaybeShared(arg0.SetValue().Obj())) { | |||
38637 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
38638 | return false; | |||
38639 | } | |||
38640 | if (JS::IsResizableArrayBufferMaybeShared(arg0.SetValue().Obj())) { | |||
38641 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
38642 | return false; | |||
38643 | } | |||
38644 | } else if (args[0].isNullOrUndefined()) { | |||
38645 | arg0.SetNull(); | |||
38646 | } else { | |||
38647 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 1"); | |||
38648 | return false; | |||
38649 | } | |||
38650 | // NOTE: This assert does NOT call the function. | |||
38651 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassAllowSharedNullableArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
38652 | MOZ_KnownLive(self)(self)->PassAllowSharedNullableArrayBuffer(Constify(arg0)); | |||
38653 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38653); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38653; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38654 | args.rval().setUndefined(); | |||
38655 | return true; | |||
38656 | } | |||
38657 | ||||
38658 | static const JSJitInfo passAllowSharedNullableArrayBuffer_methodinfo = { | |||
38659 | { (JSJitGetterOp)passAllowSharedNullableArrayBuffer }, | |||
38660 | { prototypes::id::TestExampleInterface }, | |||
38661 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38662 | JSJitInfo::Method, | |||
38663 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38664 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38665 | false, /* isInfallible. False in setters. */ | |||
38666 | false, /* isMovable. Not relevant for setters. */ | |||
38667 | false, /* isEliminatable. Not relevant for setters. */ | |||
38668 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38669 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38670 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38671 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38672 | }; | |||
38673 | ||||
38674 | MOZ_CAN_RUN_SCRIPT static bool | |||
38675 | passUnionArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
38676 | { | |||
38677 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionArrayBuffer"); | |||
38678 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38681( cx, "TestExampleInterface" , "passUnionArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38679 | "TestExampleInterface", "passUnionArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38681( cx, "TestExampleInterface" , "passUnionArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38680 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject38681( cx, "TestExampleInterface" , "passUnionArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
38681 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38681( cx, "TestExampleInterface" , "passUnionArrayBuffer", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
38682 | ||||
38683 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38684 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionArrayBuffer", 1)) { | |||
38685 | return false; | |||
38686 | } | |||
38687 | StringOrArrayBuffer arg0; | |||
38688 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
38689 | return false; | |||
38690 | } | |||
38691 | // NOTE: This assert does NOT call the function. | |||
38692 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
38693 | MOZ_KnownLive(self)(self)->PassUnionArrayBuffer(Constify(arg0)); | |||
38694 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38694); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38694; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38695 | args.rval().setUndefined(); | |||
38696 | return true; | |||
38697 | } | |||
38698 | ||||
38699 | static const JSJitInfo passUnionArrayBuffer_methodinfo = { | |||
38700 | { (JSJitGetterOp)passUnionArrayBuffer }, | |||
38701 | { prototypes::id::TestExampleInterface }, | |||
38702 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38703 | JSJitInfo::Method, | |||
38704 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38705 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38706 | false, /* isInfallible. False in setters. */ | |||
38707 | false, /* isMovable. Not relevant for setters. */ | |||
38708 | false, /* isEliminatable. Not relevant for setters. */ | |||
38709 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38710 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38711 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38712 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38713 | }; | |||
38714 | ||||
38715 | MOZ_CAN_RUN_SCRIPT static bool | |||
38716 | passUnionAllowSharedArrayBuffer(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
38717 | { | |||
38718 | BindingCallContext cx(cx_, "TestExampleInterface.passUnionAllowSharedArrayBuffer"); | |||
38719 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38722( cx, "TestExampleInterface" , "passUnionAllowSharedArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38720 | "TestExampleInterface", "passUnionAllowSharedArrayBuffer", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38722( cx, "TestExampleInterface" , "passUnionAllowSharedArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38721 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject38722( cx, "TestExampleInterface" , "passUnionAllowSharedArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38722 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38722( cx, "TestExampleInterface" , "passUnionAllowSharedArrayBuffer", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38723 | ||||
38724 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38725 | if (!args.requireAtLeast(cx, "TestExampleInterface.passUnionAllowSharedArrayBuffer", 1)) { | |||
38726 | return false; | |||
38727 | } | |||
38728 | StringOrMaybeSharedArrayBuffer arg0; | |||
38729 | if (!arg0.Init(cx, args[0], "Argument 1", false)) { | |||
38730 | return false; | |||
38731 | } | |||
38732 | // NOTE: This assert does NOT call the function. | |||
38733 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->PassUnionAllowSharedArrayBuffer(Constify(arg0)))>, "Should be returning void here"); | |||
38734 | MOZ_KnownLive(self)(self)->PassUnionAllowSharedArrayBuffer(Constify(arg0)); | |||
38735 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38735); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38735; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38736 | args.rval().setUndefined(); | |||
38737 | return true; | |||
38738 | } | |||
38739 | ||||
38740 | static const JSJitInfo passUnionAllowSharedArrayBuffer_methodinfo = { | |||
38741 | { (JSJitGetterOp)passUnionAllowSharedArrayBuffer }, | |||
38742 | { prototypes::id::TestExampleInterface }, | |||
38743 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38744 | JSJitInfo::Method, | |||
38745 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38746 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38747 | false, /* isInfallible. False in setters. */ | |||
38748 | false, /* isMovable. Not relevant for setters. */ | |||
38749 | false, /* isEliminatable. Not relevant for setters. */ | |||
38750 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38751 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38752 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38753 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38754 | }; | |||
38755 | ||||
38756 | MOZ_CAN_RUN_SCRIPT static bool | |||
38757 | get_reflectedHTMLAttributeReturningFrozenArray(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
38758 | { | |||
38759 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38762( cx, "TestExampleInterface" , "reflectedHTMLAttributeReturningFrozenArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38760 | "TestExampleInterface", "reflectedHTMLAttributeReturningFrozenArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38762( cx, "TestExampleInterface" , "reflectedHTMLAttributeReturningFrozenArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38761 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject38762( cx, "TestExampleInterface" , "reflectedHTMLAttributeReturningFrozenArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38762 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38762( cx, "TestExampleInterface" , "reflectedHTMLAttributeReturningFrozenArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38763 | ||||
38764 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38765 | // Have to either root across the getter call or reget after. | |||
38766 | bool isXray; | |||
38767 | JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray)); | |||
38768 | if (!slotStorage) { | |||
38769 | return false; | |||
38770 | } | |||
38771 | const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 20) : (DOM_INSTANCE_RESERVED_SLOTS1 + 20); | |||
38772 | MOZ_ASSERT(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage )))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage ))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" , "../TestExampleGenBinding.cpp", 38772); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "slotIndex < JSCLASS_RESERVED_SLOTS(JS::GetClass(slotStorage))" ")"); do { *((volatile int*)__null) = 38772; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
38773 | JS::Rooted<JS::Value> cachedVal(cx, JS::GetReservedSlot(slotStorage, slotIndex)); | |||
38774 | bool hasCachedValue = !cachedVal.isUndefined(); | |||
38775 | bool useCachedValue = false; | |||
38776 | Nullable<nsTArray<StrongPtrForMember<mozilla::dom::Element>>> result; | |||
38777 | // NOTE: This assert does NOT call the function. | |||
38778 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->GetReflectedHTMLAttributeReturningFrozenArray(hasCachedValue ? &useCachedValue : nullptr, result))>, "Should be returning void here"); | |||
38779 | MOZ_KnownLive(self)(self)->GetReflectedHTMLAttributeReturningFrozenArray(hasCachedValue ? &useCachedValue : nullptr, result); | |||
38780 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38780); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38780; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38781 | MOZ_ASSERT_IF(useCachedValue, hasCachedValue)do { if (useCachedValue) { do { static_assert( mozilla::detail ::AssertionConditionType<decltype(hasCachedValue)>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(hasCachedValue))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("hasCachedValue", "../TestExampleGenBinding.cpp", 38781); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "hasCachedValue" ")"); do { *((volatile int *)__null) = 38781; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); } } while (false); | |||
38782 | if (hasCachedValue && useCachedValue) { | |||
38783 | args.rval().set(cachedVal); | |||
38784 | // The cached value is in the compartment of slotStorage, | |||
38785 | // so wrap into the caller compartment as needed. | |||
38786 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
38787 | } | |||
38788 | ||||
38789 | ClearCachedReflectedHTMLAttributeReturningFrozenArrayValue(self); | |||
38790 | ||||
38791 | { | |||
38792 | JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage); | |||
38793 | JSAutoRealm ar(cx, conversionScope); | |||
38794 | do { // block we break out of when done wrapping | |||
38795 | ||||
38796 | if (result.IsNull()) { | |||
38797 | args.rval().setNull(); | |||
38798 | break; | |||
38799 | } | |||
38800 | ||||
38801 | uint32_t length = result.Value().Length(); | |||
38802 | JS::Rooted<JSObject*> returnArray(cx, JS::NewArrayObject(cx, length)); | |||
38803 | if (!returnArray) { | |||
38804 | return false; | |||
38805 | } | |||
38806 | // Scope for 'tmp' | |||
38807 | { | |||
38808 | JS::Rooted<JS::Value> tmp(cx); | |||
38809 | for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) { | |||
38810 | // Control block to let us common up the JS_DefineElement calls when there | |||
38811 | // are different ways to succeed at wrapping the object. | |||
38812 | do { | |||
38813 | if (!GetOrCreateDOMReflector(cx, result.Value()[sequenceIdx0], &tmp)) { | |||
38814 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38814); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 38814; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
38815 | return false; | |||
38816 | } | |||
38817 | break; | |||
38818 | } while (false); | |||
38819 | if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp, | |||
38820 | JSPROP_ENUMERATE)) { | |||
38821 | return false; | |||
38822 | } | |||
38823 | } | |||
38824 | } | |||
38825 | args.rval().setObject(*returnArray); | |||
38826 | break; | |||
38827 | } while (false); | |||
38828 | if (args.rval().isObject()) { | |||
38829 | JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject()); | |||
38830 | if (!JS_FreezeObject(cx, rvalObj)) { | |||
38831 | return false; | |||
38832 | } | |||
38833 | } | |||
38834 | } | |||
38835 | { // And now store things in the realm of our slotStorage. | |||
38836 | JSAutoRealm ar(cx, slotStorage); | |||
38837 | // Make a copy so that we don't do unnecessary wrapping on args.rval(). | |||
38838 | JS::Rooted<JS::Value> storedVal(cx, args.rval()); | |||
38839 | if (!MaybeWrapNonDOMObjectOrNullValue(cx, &storedVal)) { | |||
38840 | return false; | |||
38841 | } | |||
38842 | JS::SetReservedSlot(slotStorage, slotIndex, storedVal); | |||
38843 | if (!isXray) { | |||
38844 | // In the Xray case we don't need to do this, because getting the | |||
38845 | // expando object already preserved our wrapper. | |||
38846 | PreserveWrapper(self); | |||
38847 | } | |||
38848 | } | |||
38849 | // And now make sure args.rval() is in the caller realm. | |||
38850 | return MaybeWrapNonDOMObjectOrNullValue(cx, args.rval()); | |||
38851 | } | |||
38852 | ||||
38853 | MOZ_CAN_RUN_SCRIPT static bool | |||
38854 | set_reflectedHTMLAttributeReturningFrozenArray(JSContext* cx_, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
38855 | { | |||
38856 | BindingCallContext cx(cx_, "TestExampleInterface.reflectedHTMLAttributeReturningFrozenArray setter"); | |||
38857 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38860( cx, "TestExampleInterface" , "reflectedHTMLAttributeReturningFrozenArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38858 | "TestExampleInterface", "reflectedHTMLAttributeReturningFrozenArray", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38860( cx, "TestExampleInterface" , "reflectedHTMLAttributeReturningFrozenArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38859 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject38860( cx, "TestExampleInterface" , "reflectedHTMLAttributeReturningFrozenArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
38860 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38860( cx, "TestExampleInterface" , "reflectedHTMLAttributeReturningFrozenArray", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
38861 | ||||
38862 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38863 | Nullable<Sequence<OwningNonNull<mozilla::dom::Element>>> arg0; | |||
38864 | if (args[0].isObject()) { | |||
38865 | JS::ForOfIterator iter(cx); | |||
38866 | if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) { | |||
38867 | return false; | |||
38868 | } | |||
38869 | if (!iter.valueIsIterable()) { | |||
38870 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "sequence"); | |||
38871 | return false; | |||
38872 | } | |||
38873 | Sequence<OwningNonNull<mozilla::dom::Element>> &arr = arg0.SetValue(); | |||
38874 | JS::Rooted<JS::Value> temp(cx); | |||
38875 | while (true) { | |||
38876 | bool done; | |||
38877 | if (!iter.next(&temp, &done)) { | |||
38878 | return false; | |||
38879 | } | |||
38880 | if (done) { | |||
38881 | break; | |||
38882 | } | |||
38883 | OwningNonNull<mozilla::dom::Element>* slotPtr = arr.AppendElement(mozilla::fallible); | |||
38884 | if (!slotPtr) { | |||
38885 | JS_ReportOutOfMemory(cx); | |||
38886 | return false; | |||
38887 | } | |||
38888 | OwningNonNull<mozilla::dom::Element>& slot = *slotPtr; | |||
38889 | if (temp.isObject()) { | |||
38890 | static_assert(IsRefcounted<mozilla::dom::Element>::value, "We can only store refcounted classes."); | |||
38891 | { | |||
38892 | // Our JSContext should be in the right global to do unwrapping in. | |||
38893 | nsresult rv = UnwrapObject<prototypes::id::Element, mozilla::dom::Element>(&temp, slot, cx); | |||
38894 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
38895 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Element of value being assigned", "Element"); | |||
38896 | return false; | |||
38897 | } | |||
38898 | } | |||
38899 | } else { | |||
38900 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Element of value being assigned"); | |||
38901 | return false; | |||
38902 | } | |||
38903 | } | |||
38904 | } else if (args[0].isNullOrUndefined()) { | |||
38905 | arg0.SetNull(); | |||
38906 | } else { | |||
38907 | cx.ThrowErrorMessage<MSG_CONVERSION_ERROR>("Value being assigned", "sequence"); | |||
38908 | return false; | |||
38909 | } | |||
38910 | // NOTE: This assert does NOT call the function. | |||
38911 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetReflectedHTMLAttributeReturningFrozenArray(Constify(arg0)))>, "Should be returning void here"); | |||
38912 | MOZ_KnownLive(self)(self)->SetReflectedHTMLAttributeReturningFrozenArray(Constify(arg0)); | |||
38913 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 38913); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 38913; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
38914 | ||||
38915 | return true; | |||
38916 | } | |||
38917 | ||||
38918 | static const JSJitInfo reflectedHTMLAttributeReturningFrozenArray_getterinfo = { | |||
38919 | { get_reflectedHTMLAttributeReturningFrozenArray }, | |||
38920 | { prototypes::id::TestExampleInterface }, | |||
38921 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38922 | JSJitInfo::Getter, | |||
38923 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38924 | JSVAL_TYPE_UNKNOWN, /* returnType. Not relevant for setters. */ | |||
38925 | false, /* isInfallible. False in setters. */ | |||
38926 | false, /* isMovable. Not relevant for setters. */ | |||
38927 | false, /* isEliminatable. Not relevant for setters. */ | |||
38928 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38929 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38930 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38931 | (DOM_INSTANCE_RESERVED_SLOTS1 + 20) /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38932 | }; | |||
38933 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 20) <= JSJitInfo::maxSlotIndex, "We won't fit"); | |||
38934 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 20) < 22, "There is no slot for us"); | |||
38935 | static const JSJitInfo reflectedHTMLAttributeReturningFrozenArray_setterinfo = { | |||
38936 | { (JSJitGetterOp)set_reflectedHTMLAttributeReturningFrozenArray }, | |||
38937 | { prototypes::id::TestExampleInterface }, | |||
38938 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38939 | JSJitInfo::Setter, | |||
38940 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38941 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
38942 | false, /* isInfallible. False in setters. */ | |||
38943 | false, /* isMovable. Not relevant for setters. */ | |||
38944 | false, /* isEliminatable. Not relevant for setters. */ | |||
38945 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38946 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38947 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38948 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38949 | }; | |||
38950 | ||||
38951 | MOZ_CAN_RUN_SCRIPT static bool | |||
38952 | toJSON(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
38953 | { | |||
38954 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject38957( cx, "TestExampleInterface" , "toJSON", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
38955 | "TestExampleInterface", "toJSON", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject38957( cx, "TestExampleInterface" , "toJSON", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
38956 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject38957( cx, "TestExampleInterface" , "toJSON", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
38957 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject38957( cx, "TestExampleInterface" , "toJSON", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_METHOD) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
38958 | ||||
38959 | auto* self = static_cast<mozilla::dom::TestExampleInterface*>(void_self); | |||
38960 | JS::Rooted<JSObject*> result(cx, JS_NewPlainObject(cx)); | |||
38961 | if (!result) { | |||
38962 | return false; | |||
38963 | } | |||
38964 | if (!TestExampleInterface_Binding::CollectJSONAttributes(cx, obj, MOZ_KnownLive(self)(self), result)) { | |||
38965 | return false; | |||
38966 | } | |||
38967 | args.rval().setObject(*result); | |||
38968 | return true; | |||
38969 | } | |||
38970 | ||||
38971 | static const JSJitInfo toJSON_methodinfo = { | |||
38972 | { (JSJitGetterOp)toJSON }, | |||
38973 | { prototypes::id::TestExampleInterface }, | |||
38974 | { PrototypeTraits<prototypes::id::TestExampleInterface>::Depth }, | |||
38975 | JSJitInfo::Method, | |||
38976 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
38977 | JSVAL_TYPE_OBJECT, /* returnType. Not relevant for setters. */ | |||
38978 | false, /* isInfallible. False in setters. */ | |||
38979 | false, /* isMovable. Not relevant for setters. */ | |||
38980 | false, /* isEliminatable. Not relevant for setters. */ | |||
38981 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
38982 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
38983 | false, /* isTypedMethod. Only relevant for methods. */ | |||
38984 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
38985 | }; | |||
38986 | ||||
38987 | static bool | |||
38988 | _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val) | |||
38989 | { | |||
38990 | mozilla::dom::TestExampleInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleInterface>(obj); | |||
38991 | // We don't want to preserve if we don't have a wrapper, and we | |||
38992 | // obviously can't preserve if we're not initialized. | |||
38993 | if (self && self->GetWrapperPreserveColor()) { | |||
38994 | PreserveWrapper(self); | |||
38995 | } | |||
38996 | return true; | |||
38997 | } | |||
38998 | ||||
38999 | static void | |||
39000 | _finalize(JS::GCContext* gcx, JSObject* obj) | |||
39001 | { | |||
39002 | mozilla::dom::TestExampleInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleInterface>(obj); | |||
39003 | if (self) { | |||
39004 | JS::SetReservedSlot(obj, DOM_OBJECT_SLOT0, JS::UndefinedValue()); | |||
39005 | { | |||
39006 | JS::Value val = JS::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9)); | |||
39007 | if (!val.isUndefined()) { | |||
39008 | JSObject* obj = &val.toObject(); | |||
39009 | js::SetProxyReservedSlot(obj, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0, JS::UndefinedValue()); | |||
39010 | } | |||
39011 | } | |||
39012 | { | |||
39013 | JS::Value val = JS::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10)); | |||
39014 | if (!val.isUndefined()) { | |||
39015 | JSObject* obj = &val.toObject(); | |||
39016 | js::SetProxyReservedSlot(obj, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0, JS::UndefinedValue()); | |||
39017 | } | |||
39018 | } | |||
39019 | { | |||
39020 | JS::Value val = JS::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11)); | |||
39021 | if (!val.isUndefined()) { | |||
39022 | JSObject* obj = &val.toObject(); | |||
39023 | js::SetProxyReservedSlot(obj, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0, JS::UndefinedValue()); | |||
39024 | } | |||
39025 | } | |||
39026 | { | |||
39027 | JS::Value val = JS::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12)); | |||
39028 | if (!val.isUndefined()) { | |||
39029 | JSObject* obj = &val.toObject(); | |||
39030 | js::SetProxyReservedSlot(obj, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0, JS::UndefinedValue()); | |||
39031 | } | |||
39032 | } | |||
39033 | { | |||
39034 | JS::Value val = JS::GetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13)); | |||
39035 | if (!val.isUndefined()) { | |||
39036 | JSObject* obj = &val.toObject(); | |||
39037 | js::SetProxyReservedSlot(obj, OBSERVABLE_ARRAY_DOM_INTERFACE_SLOT0, JS::UndefinedValue()); | |||
39038 | } | |||
39039 | } | |||
39040 | ClearWrapper(self, self, obj); | |||
39041 | if (size_t mallocBytes = BindingJSObjectMallocBytes(self)) { | |||
39042 | JS::RemoveAssociatedMemory(obj, mallocBytes, | |||
39043 | JS::MemoryUse::DOMBinding); | |||
39044 | } | |||
39045 | AddForDeferredFinalization<mozilla::dom::TestExampleInterface>(self); | |||
39046 | } | |||
39047 | } | |||
39048 | ||||
39049 | static nsWrapperCache* | |||
39050 | _getWrapperCache(JS::Handle<JSObject*> obj) | |||
39051 | { | |||
39052 | mozilla::dom::TestExampleInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleInterface>(obj); | |||
39053 | return self; | |||
39054 | } | |||
39055 | ||||
39056 | static size_t | |||
39057 | _objectMoved(JSObject* obj, JSObject* old) | |||
39058 | { | |||
39059 | mozilla::dom::TestExampleInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleInterface>(obj); | |||
39060 | if (self) { | |||
39061 | UpdateWrapper(self, self, obj, old); | |||
39062 | } | |||
39063 | ||||
39064 | return 0; | |||
39065 | } | |||
39066 | ||||
39067 | static const JSFunctionSpec sStaticMethods_specs[] = { | |||
39068 | JS_FNSPEC("staticMethod", staticMethod, nullptr, 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("staticMethod"), {staticMethod, nullptr }, 1, JSPROP_ENUMERATE, nullptr}, | |||
39069 | JS_FNSPEC("staticMethodWithContext", staticMethodWithContext, nullptr, 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("staticMethodWithContext"), {staticMethodWithContext , nullptr}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39070 | JS_FNSPEC("staticDeprecatedMethod", staticDeprecatedMethod, nullptr, 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("staticDeprecatedMethod"), {staticDeprecatedMethod , nullptr}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39071 | JS_FNSPEC("staticDeprecatedMethodWithContext", staticDeprecatedMethodWithContext, nullptr, 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("staticDeprecatedMethodWithContext"), { staticDeprecatedMethodWithContext, nullptr}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39072 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr } | |||
39073 | }; | |||
39074 | ||||
39075 | ||||
39076 | static const Prefable<const JSFunctionSpec> sStaticMethods[] = { | |||
39077 | { nullptr, &sStaticMethods_specs[0] }, | |||
39078 | { nullptr, nullptr } | |||
39079 | }; | |||
39080 | ||||
39081 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39082 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39083 | static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39084 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39085 | ||||
39086 | static const JSPropertySpec sStaticAttributes_specs[] = { | |||
39087 | JSPropertySpec::nativeAccessors("staticAttribute", JSPROP_ENUMERATE, get_staticAttribute, nullptr, set_staticAttribute, nullptr), | |||
39088 | JSPropertySpec::nativeAccessors("staticDeprecatedAttribute", JSPROP_ENUMERATE, get_staticDeprecatedAttribute, nullptr, set_staticDeprecatedAttribute, nullptr), | |||
39089 | JS_PS_ENDJSPropertySpec::sentinel() | |||
39090 | }; | |||
39091 | ||||
39092 | ||||
39093 | static const Prefable<const JSPropertySpec> sStaticAttributes[] = { | |||
39094 | { nullptr, &sStaticAttributes_specs[0] }, | |||
39095 | { nullptr, nullptr } | |||
39096 | }; | |||
39097 | ||||
39098 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39099 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39100 | static_assert(2 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39101 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39102 | ||||
39103 | static const JSFunctionSpec sMethods_specs[] = { | |||
39104 | JS_FNSPEC("passByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passByte_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passByte"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passByte_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39105 | JS_FNSPEC("receiveByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveByte_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveByte"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveByte_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39106 | JS_FNSPEC("passOptionalByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByte_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalByte"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByte_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39107 | JS_FNSPEC("passOptionalByteBeforeRequired", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByteBeforeRequired_methodinfo), 2, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalByteBeforeRequired"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalByteBeforeRequired_methodinfo )}, 2, JSPROP_ENUMERATE, nullptr}, | |||
39108 | JS_FNSPEC("passOptionalByteWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByteWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalByteWithDefault"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalByteWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39109 | JS_FNSPEC("passOptionalByteWithDefaultBeforeRequired", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByteWithDefaultBeforeRequired_methodinfo), 2, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalByteWithDefaultBeforeRequired" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByteWithDefaultBeforeRequired_methodinfo )}, 2, JSPROP_ENUMERATE, nullptr}, | |||
39110 | JS_FNSPEC("passNullableByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableByte_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableByte"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableByte_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39111 | JS_FNSPEC("passOptionalNullableByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableByte_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableByte"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableByte_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39112 | JS_FNSPEC("passVariadicByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicByte_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicByte"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicByte_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39113 | JS_FNSPEC("returnByteSideEffectFree", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&returnByteSideEffectFree_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("returnByteSideEffectFree"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&returnByteSideEffectFree_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39114 | JS_FNSPEC("returnDOMDependentByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&returnDOMDependentByte_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("returnDOMDependentByte"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&returnDOMDependentByte_methodinfo)} , 0, JSPROP_ENUMERATE, nullptr}, | |||
39115 | JS_FNSPEC("returnConstantByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&returnConstantByte_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("returnConstantByte"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&returnConstantByte_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39116 | JS_FNSPEC("returnDeviceStateDependentByte", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&returnDeviceStateDependentByte_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("returnDeviceStateDependentByte"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&returnDeviceStateDependentByte_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39117 | JS_FNSPEC("passShort", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passShort_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passShort"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passShort_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39118 | JS_FNSPEC("receiveShort", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveShort_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveShort"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveShort_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39119 | JS_FNSPEC("passOptionalShort", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalShort_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalShort"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalShort_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39120 | JS_FNSPEC("passOptionalShortWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalShortWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalShortWithDefault"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalShortWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39121 | JS_FNSPEC("passLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passLong_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passLong"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passLong_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39122 | JS_FNSPEC("receiveLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveLong"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveLong_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39123 | JS_FNSPEC("passOptionalLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalLong"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalLong_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39124 | JS_FNSPEC("passOptionalLongWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalLongWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalLongWithDefault"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalLongWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39125 | JS_FNSPEC("passLongLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passLongLong_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passLongLong"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passLongLong_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39126 | JS_FNSPEC("receiveLongLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveLongLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveLongLong"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveLongLong_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39127 | JS_FNSPEC("passOptionalLongLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalLongLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalLongLong"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalLongLong_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39128 | JS_FNSPEC("passOptionalLongLongWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalLongLongWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalLongLongWithDefault"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalLongLongWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39129 | JS_FNSPEC("passOctet", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOctet_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOctet"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passOctet_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39130 | JS_FNSPEC("receiveOctet", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveOctet_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveOctet"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveOctet_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39131 | JS_FNSPEC("passOptionalOctet", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalOctet_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalOctet"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalOctet_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39132 | JS_FNSPEC("passOptionalOctetWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalOctetWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalOctetWithDefault"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalOctetWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39133 | JS_FNSPEC("passUnsignedShort", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnsignedShort_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnsignedShort"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnsignedShort_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39134 | JS_FNSPEC("receiveUnsignedShort", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnsignedShort_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnsignedShort"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveUnsignedShort_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39135 | JS_FNSPEC("passOptionalUnsignedShort", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnsignedShort_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnsignedShort"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalUnsignedShort_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39136 | JS_FNSPEC("passOptionalUnsignedShortWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnsignedShortWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnsignedShortWithDefault") , {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalUnsignedShortWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39137 | JS_FNSPEC("passUnsignedLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnsignedLong_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnsignedLong"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnsignedLong_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39138 | JS_FNSPEC("receiveUnsignedLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnsignedLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnsignedLong"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveUnsignedLong_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39139 | JS_FNSPEC("passOptionalUnsignedLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnsignedLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnsignedLong"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalUnsignedLong_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39140 | JS_FNSPEC("passOptionalUnsignedLongWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnsignedLongWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnsignedLongWithDefault"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalUnsignedLongWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39141 | JS_FNSPEC("passUnsignedLongLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnsignedLongLong_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnsignedLongLong"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnsignedLongLong_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39142 | JS_FNSPEC("receiveUnsignedLongLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnsignedLongLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnsignedLongLong"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveUnsignedLongLong_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39143 | JS_FNSPEC("passOptionalUnsignedLongLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnsignedLongLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnsignedLongLong"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalUnsignedLongLong_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39144 | JS_FNSPEC("passOptionalUnsignedLongLongWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnsignedLongLongWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnsignedLongLongWithDefault" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnsignedLongLongWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39145 | JS_FNSPEC("passFloat", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passFloat_methodinfo), 16, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passFloat"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passFloat_methodinfo)}, 16, JSPROP_ENUMERATE, nullptr}, | |||
39146 | JS_FNSPEC("passLenientFloat", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passLenientFloat_methodinfo), 16, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passLenientFloat"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passLenientFloat_methodinfo)}, 16, JSPROP_ENUMERATE , nullptr}, | |||
39147 | JS_FNSPEC("receiveSelf", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveSelf_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveSelf"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveSelf_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39148 | JS_FNSPEC("receiveNullableSelf", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableSelf_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableSelf"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableSelf_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39149 | JS_FNSPEC("receiveWeakSelf", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakSelf_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakSelf"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakSelf_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39150 | JS_FNSPEC("receiveWeakNullableSelf", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakNullableSelf_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakNullableSelf"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveWeakNullableSelf_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39151 | JS_FNSPEC("passSelf", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSelf"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passSelf_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39152 | JS_FNSPEC("passNullableSelf", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSelf_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableSelf"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSelf_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39153 | JS_FNSPEC("passOptionalSelf", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSelf_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSelf"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSelf_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39154 | JS_FNSPEC("passOptionalNonNullSelf", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNonNullSelf_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNonNullSelf"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNonNullSelf_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39155 | JS_FNSPEC("passOptionalSelfWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSelfWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSelfWithDefault"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalSelfWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39156 | JS_FNSPEC("receiveNonWrapperCacheInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNonWrapperCacheInterface_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNonWrapperCacheInterface"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNonWrapperCacheInterface_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39157 | JS_FNSPEC("receiveNullableNonWrapperCacheInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableNonWrapperCacheInterface_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableNonWrapperCacheInterface" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableNonWrapperCacheInterface_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39158 | JS_FNSPEC("receiveNonWrapperCacheInterfaceSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNonWrapperCacheInterfaceSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNonWrapperCacheInterfaceSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNonWrapperCacheInterfaceSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39159 | JS_FNSPEC("receiveNullableNonWrapperCacheInterfaceSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableNonWrapperCacheInterfaceSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableNonWrapperCacheInterfaceSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableNonWrapperCacheInterfaceSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39160 | JS_FNSPEC("receiveNonWrapperCacheInterfaceNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNonWrapperCacheInterfaceNullableSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNonWrapperCacheInterfaceNullableSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNonWrapperCacheInterfaceNullableSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39161 | JS_FNSPEC("receiveNullableNonWrapperCacheInterfaceNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableNonWrapperCacheInterfaceNullableSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableNonWrapperCacheInterfaceNullableSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableNonWrapperCacheInterfaceNullableSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39162 | JS_FNSPEC("receiveExternal", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveExternal_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveExternal"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveExternal_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39163 | JS_FNSPEC("receiveNullableExternal", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableExternal_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableExternal"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableExternal_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39164 | JS_FNSPEC("receiveWeakExternal", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakExternal_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakExternal"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveWeakExternal_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39165 | JS_FNSPEC("receiveWeakNullableExternal", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakNullableExternal_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakNullableExternal"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveWeakNullableExternal_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39166 | JS_FNSPEC("passExternal", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passExternal_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passExternal"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passExternal_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39167 | JS_FNSPEC("passNullableExternal", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableExternal_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableExternal"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableExternal_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39168 | JS_FNSPEC("passOptionalExternal", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalExternal_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalExternal"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalExternal_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39169 | JS_FNSPEC("passOptionalNonNullExternal", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNonNullExternal_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNonNullExternal"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNonNullExternal_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39170 | JS_FNSPEC("passOptionalExternalWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalExternalWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalExternalWithDefault"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalExternalWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39171 | JS_FNSPEC("receiveCallbackInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveCallbackInterface_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveCallbackInterface"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveCallbackInterface_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39172 | JS_FNSPEC("receiveNullableCallbackInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableCallbackInterface_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableCallbackInterface"), {( GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&receiveNullableCallbackInterface_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39173 | JS_FNSPEC("receiveWeakCallbackInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakCallbackInterface_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakCallbackInterface"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveWeakCallbackInterface_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39174 | JS_FNSPEC("receiveWeakNullableCallbackInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakNullableCallbackInterface_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakNullableCallbackInterface") , {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&receiveWeakNullableCallbackInterface_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39175 | JS_FNSPEC("passCallbackInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passCallbackInterface_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passCallbackInterface"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passCallbackInterface_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39176 | JS_FNSPEC("passNullableCallbackInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableCallbackInterface_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableCallbackInterface"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableCallbackInterface_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39177 | JS_FNSPEC("passOptionalCallbackInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalCallbackInterface_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalCallbackInterface"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalCallbackInterface_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39178 | JS_FNSPEC("passOptionalNonNullCallbackInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNonNullCallbackInterface_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNonNullCallbackInterface") , {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalNonNullCallbackInterface_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39179 | JS_FNSPEC("passOptionalCallbackInterfaceWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalCallbackInterfaceWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalCallbackInterfaceWithDefault" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalCallbackInterfaceWithDefault_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39180 | JS_FNSPEC("receiveSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveSequence"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveSequence_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39181 | JS_FNSPEC("receiveNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableSequence_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39182 | JS_FNSPEC("receiveSequenceOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveSequenceOfNullableInts_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveSequenceOfNullableInts"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveSequenceOfNullableInts_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39183 | JS_FNSPEC("receiveNullableSequenceOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableSequenceOfNullableInts_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableSequenceOfNullableInts" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableSequenceOfNullableInts_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39184 | JS_FNSPEC("passSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequence"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passSequence_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39185 | JS_FNSPEC("passNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableSequence_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39186 | JS_FNSPEC("passSequenceOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfNullableInts_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfNullableInts"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfNullableInts_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39187 | JS_FNSPEC("passOptionalSequenceOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSequenceOfNullableInts_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSequenceOfNullableInts"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalSequenceOfNullableInts_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39188 | JS_FNSPEC("passOptionalNullableSequenceOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableInts_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequenceOfNullableInts" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableInts_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39189 | JS_FNSPEC("receiveCastableObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveCastableObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveCastableObjectSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveCastableObjectSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39190 | JS_FNSPEC("receiveCallbackObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveCallbackObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveCallbackObjectSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveCallbackObjectSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39191 | JS_FNSPEC("receiveNullableCastableObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableCastableObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableCastableObjectSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableCastableObjectSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39192 | JS_FNSPEC("receiveNullableCallbackObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableCallbackObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableCallbackObjectSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableCallbackObjectSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39193 | JS_FNSPEC("receiveCastableObjectNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveCastableObjectNullableSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveCastableObjectNullableSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveCastableObjectNullableSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39194 | JS_FNSPEC("receiveNullableCastableObjectNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableCastableObjectNullableSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableCastableObjectNullableSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableCastableObjectNullableSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39195 | JS_FNSPEC("receiveWeakCastableObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakCastableObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakCastableObjectSequence"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&receiveWeakCastableObjectSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39196 | JS_FNSPEC("receiveWeakNullableCastableObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakNullableCastableObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakNullableCastableObjectSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakNullableCastableObjectSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39197 | JS_FNSPEC("receiveWeakCastableObjectNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakCastableObjectNullableSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakCastableObjectNullableSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakCastableObjectNullableSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39198 | JS_FNSPEC("receiveWeakNullableCastableObjectNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakNullableCastableObjectNullableSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveWeakNullableCastableObjectNullableSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveWeakNullableCastableObjectNullableSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39199 | JS_FNSPEC("passCastableObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passCastableObjectSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passCastableObjectSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passCastableObjectSequence_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39200 | JS_FNSPEC("passNullableCastableObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableCastableObjectSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableCastableObjectSequence"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableCastableObjectSequence_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39201 | JS_FNSPEC("passCastableObjectNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passCastableObjectNullableSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passCastableObjectNullableSequence"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passCastableObjectNullableSequence_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39202 | JS_FNSPEC("passNullableCastableObjectNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableCastableObjectNullableSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableCastableObjectNullableSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableCastableObjectNullableSequence_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39203 | JS_FNSPEC("passOptionalSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalSequence_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39204 | JS_FNSPEC("passOptionalSequenceWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSequenceWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSequenceWithDefaultValue") , {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalSequenceWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39205 | JS_FNSPEC("passOptionalNullableSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39206 | JS_FNSPEC("passOptionalNullableSequenceWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequenceWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39207 | JS_FNSPEC("passOptionalNullableSequenceWithDefaultValue2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceWithDefaultValue2_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequenceWithDefaultValue2" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceWithDefaultValue2_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39208 | JS_FNSPEC("passOptionalObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalObjectSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalObjectSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39209 | JS_FNSPEC("passExternalInterfaceSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passExternalInterfaceSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passExternalInterfaceSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passExternalInterfaceSequence_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39210 | JS_FNSPEC("passNullableExternalInterfaceSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableExternalInterfaceSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableExternalInterfaceSequence" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableExternalInterfaceSequence_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39211 | JS_FNSPEC("receiveStringSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveStringSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveStringSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveStringSequence_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39212 | JS_FNSPEC("passStringSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passStringSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passStringSequence"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passStringSequence_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39213 | JS_FNSPEC("receiveByteStringSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveByteStringSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveByteStringSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveByteStringSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39214 | JS_FNSPEC("passByteStringSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passByteStringSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passByteStringSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passByteStringSequence_methodinfo)} , 1, JSPROP_ENUMERATE, nullptr}, | |||
39215 | JS_FNSPEC("receiveUTF8StringSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUTF8StringSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUTF8StringSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveUTF8StringSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39216 | JS_FNSPEC("passUTF8StringSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUTF8StringSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUTF8StringSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUTF8StringSequence_methodinfo)} , 1, JSPROP_ENUMERATE, nullptr}, | |||
39217 | JS_FNSPEC("receiveAnySequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveAnySequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveAnySequence"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveAnySequence_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39218 | JS_FNSPEC("receiveNullableAnySequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableAnySequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableAnySequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableAnySequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39219 | JS_FNSPEC("receiveObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveObjectSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveObjectSequence_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39220 | JS_FNSPEC("receiveNullableObjectSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableObjectSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableObjectSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableObjectSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39221 | JS_FNSPEC("passSequenceOfSequences", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfSequences_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfSequences"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfSequences_methodinfo) }, 1, JSPROP_ENUMERATE, nullptr}, | |||
39222 | JS_FNSPEC("passSequenceOfSequencesOfSequences", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfSequencesOfSequences_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfSequencesOfSequences"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passSequenceOfSequencesOfSequences_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39223 | JS_FNSPEC("passRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecord"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passRecord_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39224 | JS_FNSPEC("passNullableRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableRecord"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableRecord_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39225 | JS_FNSPEC("passRecordOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfNullableInts_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfNullableInts"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passRecordOfNullableInts_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39226 | JS_FNSPEC("passOptionalRecordOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalRecordOfNullableInts_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalRecordOfNullableInts"), {( GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalRecordOfNullableInts_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39227 | JS_FNSPEC("passOptionalNullableRecordOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordOfNullableInts_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableRecordOfNullableInts" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordOfNullableInts_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39228 | JS_FNSPEC("passCastableObjectRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passCastableObjectRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passCastableObjectRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passCastableObjectRecord_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39229 | JS_FNSPEC("passNullableCastableObjectRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableCastableObjectRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableCastableObjectRecord"), {( GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableCastableObjectRecord_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39230 | JS_FNSPEC("passCastableObjectNullableRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passCastableObjectNullableRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passCastableObjectNullableRecord"), {( GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passCastableObjectNullableRecord_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39231 | JS_FNSPEC("passNullableCastableObjectNullableRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableCastableObjectNullableRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableCastableObjectNullableRecord" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableCastableObjectNullableRecord_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39232 | JS_FNSPEC("passOptionalRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalRecord_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalRecord"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalRecord_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39233 | JS_FNSPEC("passOptionalNullableRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecord_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableRecord_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39234 | JS_FNSPEC("passOptionalNullableRecordWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableRecordWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39235 | JS_FNSPEC("passOptionalObjectRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalObjectRecord_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalObjectRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalObjectRecord_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39236 | JS_FNSPEC("passExternalInterfaceRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passExternalInterfaceRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passExternalInterfaceRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passExternalInterfaceRecord_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39237 | JS_FNSPEC("passNullableExternalInterfaceRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableExternalInterfaceRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableExternalInterfaceRecord"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableExternalInterfaceRecord_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39238 | JS_FNSPEC("passStringRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passStringRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passStringRecord"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passStringRecord_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39239 | JS_FNSPEC("passByteStringRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passByteStringRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passByteStringRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passByteStringRecord_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39240 | JS_FNSPEC("passUTF8StringRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUTF8StringRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUTF8StringRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUTF8StringRecord_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39241 | JS_FNSPEC("passRecordOfRecords", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfRecords_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfRecords"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passRecordOfRecords_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39242 | JS_FNSPEC("receiveRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveRecord_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveRecord"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveRecord_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39243 | JS_FNSPEC("receiveNullableRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableRecord_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableRecord_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39244 | JS_FNSPEC("receiveRecordOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveRecordOfNullableInts_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveRecordOfNullableInts"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveRecordOfNullableInts_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39245 | JS_FNSPEC("receiveNullableRecordOfNullableInts", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableRecordOfNullableInts_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableRecordOfNullableInts"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&receiveNullableRecordOfNullableInts_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39246 | JS_FNSPEC("receiveAnyRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveAnyRecord_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveAnyRecord"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveAnyRecord_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39247 | JS_FNSPEC("passArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passArrayBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passArrayBuffer"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passArrayBuffer_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39248 | JS_FNSPEC("passNullableArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableArrayBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableArrayBuffer"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableArrayBuffer_methodinfo) }, 1, JSPROP_ENUMERATE, nullptr}, | |||
39249 | JS_FNSPEC("passOptionalArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalArrayBuffer_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalArrayBuffer"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalArrayBuffer_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39250 | JS_FNSPEC("passOptionalNullableArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableArrayBuffer_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableArrayBuffer"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableArrayBuffer_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39251 | JS_FNSPEC("passOptionalNullableArrayBufferWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableArrayBufferWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableArrayBufferWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableArrayBufferWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39252 | JS_FNSPEC("passArrayBufferView", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passArrayBufferView_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passArrayBufferView"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passArrayBufferView_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39253 | JS_FNSPEC("passInt8Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passInt8Array_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passInt8Array"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passInt8Array_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39254 | JS_FNSPEC("passInt16Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passInt16Array_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passInt16Array"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passInt16Array_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39255 | JS_FNSPEC("passInt32Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passInt32Array_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passInt32Array"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passInt32Array_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39256 | JS_FNSPEC("passUint8Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUint8Array_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUint8Array"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUint8Array_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39257 | JS_FNSPEC("passUint16Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUint16Array_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUint16Array"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUint16Array_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39258 | JS_FNSPEC("passUint32Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUint32Array_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUint32Array"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUint32Array_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39259 | JS_FNSPEC("passUint8ClampedArray", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUint8ClampedArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUint8ClampedArray"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUint8ClampedArray_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39260 | JS_FNSPEC("passFloat32Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passFloat32Array_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passFloat32Array"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passFloat32Array_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39261 | JS_FNSPEC("passFloat64Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passFloat64Array_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passFloat64Array"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passFloat64Array_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39262 | JS_FNSPEC("passSequenceOfArrayBuffers", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfArrayBuffers_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfArrayBuffers"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfArrayBuffers_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39263 | JS_FNSPEC("passSequenceOfNullableArrayBuffers", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfNullableArrayBuffers_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfNullableArrayBuffers"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passSequenceOfNullableArrayBuffers_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39264 | JS_FNSPEC("passRecordOfArrayBuffers", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfArrayBuffers_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfArrayBuffers"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passRecordOfArrayBuffers_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39265 | JS_FNSPEC("passRecordOfNullableArrayBuffers", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfNullableArrayBuffers_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfNullableArrayBuffers"), {( GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passRecordOfNullableArrayBuffers_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39266 | JS_FNSPEC("passVariadicTypedArray", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicTypedArray_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicTypedArray"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passVariadicTypedArray_methodinfo)} , 0, JSPROP_ENUMERATE, nullptr}, | |||
39267 | JS_FNSPEC("passVariadicNullableTypedArray", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicNullableTypedArray_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicNullableTypedArray"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passVariadicNullableTypedArray_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39268 | JS_FNSPEC("receiveUint8Array", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUint8Array_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUint8Array"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUint8Array_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39269 | JS_FNSPEC("passString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passString_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passString"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passString_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39270 | JS_FNSPEC("passNullableString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableString_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableString"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableString_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39271 | JS_FNSPEC("passOptionalString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalString_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalString"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalString_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39272 | JS_FNSPEC("passOptionalStringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalStringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalStringWithDefaultValue"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalStringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39273 | JS_FNSPEC("passOptionalNullableString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableString_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableString_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39274 | JS_FNSPEC("passOptionalNullableStringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableStringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableStringWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableStringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39275 | JS_FNSPEC("passVariadicString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicString_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicString"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicString_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39276 | JS_FNSPEC("passByteString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passByteString_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passByteString"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passByteString_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39277 | JS_FNSPEC("passNullableByteString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableByteString_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableByteString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableByteString_methodinfo)} , 1, JSPROP_ENUMERATE, nullptr}, | |||
39278 | JS_FNSPEC("passOptionalByteString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByteString_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalByteString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalByteString_methodinfo)} , 0, JSPROP_ENUMERATE, nullptr}, | |||
39279 | JS_FNSPEC("passOptionalByteStringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByteStringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalByteStringWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalByteStringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39280 | JS_FNSPEC("passOptionalNullableByteString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableByteString_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableByteString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableByteString_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39281 | JS_FNSPEC("passOptionalNullableByteStringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableByteStringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableByteStringWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableByteStringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39282 | JS_FNSPEC("passVariadicByteString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicByteString_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicByteString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passVariadicByteString_methodinfo)} , 0, JSPROP_ENUMERATE, nullptr}, | |||
39283 | JS_FNSPEC("passUnionByteString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionByteString_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionByteString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionByteString_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39284 | JS_FNSPEC("passOptionalUnionByteString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnionByteString_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnionByteString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalUnionByteString_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39285 | JS_FNSPEC("passOptionalUnionByteStringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnionByteStringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnionByteStringWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnionByteStringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39286 | JS_FNSPEC("passUTF8String", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUTF8String_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUTF8String"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUTF8String_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39287 | JS_FNSPEC("passNullableUTF8String", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUTF8String_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUTF8String"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableUTF8String_methodinfo)} , 1, JSPROP_ENUMERATE, nullptr}, | |||
39288 | JS_FNSPEC("passOptionalUTF8String", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUTF8String_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUTF8String"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalUTF8String_methodinfo)} , 0, JSPROP_ENUMERATE, nullptr}, | |||
39289 | JS_FNSPEC("passOptionalUTF8StringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUTF8StringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUTF8StringWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUTF8StringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39290 | JS_FNSPEC("passOptionalNullableUTF8String", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableUTF8String_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableUTF8String"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableUTF8String_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39291 | JS_FNSPEC("passOptionalNullableUTF8StringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableUTF8StringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableUTF8StringWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableUTF8StringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39292 | JS_FNSPEC("passVariadicUTF8String", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicUTF8String_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicUTF8String"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passVariadicUTF8String_methodinfo)} , 0, JSPROP_ENUMERATE, nullptr}, | |||
39293 | JS_FNSPEC("passUnionUTF8String", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionUTF8String_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionUTF8String"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionUTF8String_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39294 | JS_FNSPEC("passOptionalUnionUTF8String", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnionUTF8String_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnionUTF8String"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalUnionUTF8String_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39295 | JS_FNSPEC("passOptionalUnionUTF8StringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnionUTF8StringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnionUTF8StringWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnionUTF8StringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39296 | JS_FNSPEC("passSVS", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSVS_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSVS"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passSVS_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39297 | JS_FNSPEC("passNullableSVS", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSVS_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableSVS"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSVS_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39298 | JS_FNSPEC("passOptionalSVS", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSVS_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSVS"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSVS_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39299 | JS_FNSPEC("passOptionalSVSWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSVSWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSVSWithDefaultValue"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalSVSWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39300 | JS_FNSPEC("passOptionalNullableSVS", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSVS_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSVS"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableSVS_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39301 | JS_FNSPEC("passOptionalNullableSVSWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSVSWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSVSWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSVSWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39302 | JS_FNSPEC("passVariadicSVS", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicSVS_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicSVS"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicSVS_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39303 | JS_FNSPEC("receiveSVS", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveSVS_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveSVS"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveSVS_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39304 | JS_FNSPEC("passJSString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passJSString_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passJSString"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passJSString_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39305 | JS_FNSPEC("passOptionalJSStringWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalJSStringWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalJSStringWithDefaultValue") , {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalJSStringWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39306 | JS_FNSPEC("receiveJSString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveJSString_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveJSString"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveJSString_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39307 | JS_FNSPEC("passEnum", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passEnum_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passEnum"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passEnum_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39308 | JS_FNSPEC("passNullableEnum", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableEnum_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableEnum"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableEnum_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39309 | JS_FNSPEC("passOptionalEnum", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalEnum_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalEnum"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalEnum_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39310 | JS_FNSPEC("passEnumWithDefault", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passEnumWithDefault_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passEnumWithDefault"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passEnumWithDefault_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39311 | JS_FNSPEC("passOptionalNullableEnum", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableEnum_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableEnum"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableEnum_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39312 | JS_FNSPEC("passOptionalNullableEnumWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableEnumWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableEnumWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableEnumWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39313 | JS_FNSPEC("passOptionalNullableEnumWithDefaultValue2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableEnumWithDefaultValue2_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableEnumWithDefaultValue2" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableEnumWithDefaultValue2_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39314 | JS_FNSPEC("receiveEnum", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveEnum_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveEnum"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveEnum_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39315 | JS_FNSPEC("receiveNullableEnum", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableEnum_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableEnum"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableEnum_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39316 | JS_FNSPEC("passCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passCallback"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passCallback_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39317 | JS_FNSPEC("passNullableCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableCallback"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableCallback_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39318 | JS_FNSPEC("passOptionalCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalCallback_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalCallback"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalCallback_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39319 | JS_FNSPEC("passOptionalNullableCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableCallback_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableCallback"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableCallback_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39320 | JS_FNSPEC("passOptionalNullableCallbackWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableCallbackWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableCallbackWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableCallbackWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39321 | JS_FNSPEC("receiveCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveCallback_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveCallback"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveCallback_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39322 | JS_FNSPEC("receiveNullableCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableCallback_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableCallback"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableCallback_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39323 | JS_FNSPEC("passNullableTreatAsNullCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableTreatAsNullCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableTreatAsNullCallback"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableTreatAsNullCallback_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39324 | JS_FNSPEC("passOptionalNullableTreatAsNullCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableTreatAsNullCallback_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableTreatAsNullCallback" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableTreatAsNullCallback_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39325 | JS_FNSPEC("passOptionalNullableTreatAsNullCallbackWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableTreatAsNullCallbackWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableTreatAsNullCallbackWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableTreatAsNullCallbackWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39326 | JS_FNSPEC("passAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passAny"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passAny_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39327 | JS_FNSPEC("passVariadicAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicAny"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicAny_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39328 | JS_FNSPEC("passOptionalAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalAny"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalAny_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39329 | JS_FNSPEC("passAnyDefaultNull", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAnyDefaultNull_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passAnyDefaultNull"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAnyDefaultNull_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39330 | JS_FNSPEC("passSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfAny"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfAny_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39331 | JS_FNSPEC("passNullableSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSequenceOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableSequenceOfAny"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableSequenceOfAny_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39332 | JS_FNSPEC("passOptionalSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSequenceOfAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSequenceOfAny"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalSequenceOfAny_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39333 | JS_FNSPEC("passOptionalNullableSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequenceOfAny"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passOptionalNullableSequenceOfAny_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39334 | JS_FNSPEC("passOptionalSequenceOfAnyWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSequenceOfAnyWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalSequenceOfAnyWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalSequenceOfAnyWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39335 | JS_FNSPEC("passSequenceOfSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfSequenceOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfSequenceOfAny"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfSequenceOfAny_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39336 | JS_FNSPEC("passSequenceOfNullableSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfNullableSequenceOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfNullableSequenceOfAny"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passSequenceOfNullableSequenceOfAny_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39337 | JS_FNSPEC("passNullableSequenceOfNullableSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSequenceOfNullableSequenceOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableSequenceOfNullableSequenceOfAny" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSequenceOfNullableSequenceOfAny_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39338 | JS_FNSPEC("passOptionalNullableSequenceOfNullableSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableSequenceOfAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequenceOfNullableSequenceOfAny" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableSequenceOfAny_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39339 | JS_FNSPEC("passRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfAny"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfAny_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39340 | JS_FNSPEC("passNullableRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableRecordOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableRecordOfAny"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableRecordOfAny_methodinfo) }, 1, JSPROP_ENUMERATE, nullptr}, | |||
39341 | JS_FNSPEC("passOptionalRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalRecordOfAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalRecordOfAny"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalRecordOfAny_methodinfo) }, 0, JSPROP_ENUMERATE, nullptr}, | |||
39342 | JS_FNSPEC("passOptionalNullableRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordOfAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableRecordOfAny"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableRecordOfAny_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39343 | JS_FNSPEC("passOptionalRecordOfAnyWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalRecordOfAnyWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalRecordOfAnyWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalRecordOfAnyWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39344 | JS_FNSPEC("passRecordOfRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfRecordOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfRecordOfAny"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passRecordOfRecordOfAny_methodinfo) }, 1, JSPROP_ENUMERATE, nullptr}, | |||
39345 | JS_FNSPEC("passRecordOfNullableRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfNullableRecordOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfNullableRecordOfAny"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passRecordOfNullableRecordOfAny_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39346 | JS_FNSPEC("passNullableRecordOfNullableRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableRecordOfNullableRecordOfAny_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableRecordOfNullableRecordOfAny" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableRecordOfNullableRecordOfAny_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39347 | JS_FNSPEC("passOptionalNullableRecordOfNullableRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordOfNullableRecordOfAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableRecordOfNullableRecordOfAny" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordOfNullableRecordOfAny_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39348 | JS_FNSPEC("passOptionalNullableRecordOfNullableSequenceOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordOfNullableSequenceOfAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableRecordOfNullableSequenceOfAny" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableRecordOfNullableSequenceOfAny_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39349 | JS_FNSPEC("passOptionalNullableSequenceOfNullableRecordOfAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableRecordOfAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequenceOfNullableRecordOfAny" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableRecordOfAny_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39350 | JS_FNSPEC("receiveAny", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveAny_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveAny"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveAny_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39351 | JS_FNSPEC("passObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passObject_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passObject"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passObject_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39352 | JS_FNSPEC("passVariadicObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicObject_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicObject"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicObject_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39353 | JS_FNSPEC("passNullableObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableObject_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableObject"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableObject_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39354 | JS_FNSPEC("passVariadicNullableObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicNullableObject_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicNullableObject"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passVariadicNullableObject_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39355 | JS_FNSPEC("passOptionalObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalObject_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalObject"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalObject_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39356 | JS_FNSPEC("passOptionalNullableObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableObject_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableObject"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableObject_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39357 | JS_FNSPEC("passOptionalNullableObjectWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableObjectWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableObjectWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableObjectWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39358 | JS_FNSPEC("passSequenceOfObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfObject_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfObject"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfObject_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39359 | JS_FNSPEC("passSequenceOfNullableObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfNullableObject_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfNullableObject"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfNullableObject_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39360 | JS_FNSPEC("passNullableSequenceOfObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableSequenceOfObject_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableSequenceOfObject"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passNullableSequenceOfObject_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39361 | JS_FNSPEC("passOptionalNullableSequenceOfNullableSequenceOfObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableSequenceOfObject_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequenceOfNullableSequenceOfObject" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableSequenceOfObject_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39362 | JS_FNSPEC("passOptionalNullableSequenceOfNullableSequenceOfNullableObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableSequenceOfNullableObject_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableSequenceOfNullableSequenceOfNullableObject" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableSequenceOfNullableSequenceOfNullableObject_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39363 | JS_FNSPEC("passRecordOfObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfObject_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfObject"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfObject_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39364 | JS_FNSPEC("receiveObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveObject_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveObject"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveObject_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39365 | JS_FNSPEC("receiveNullableObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableObject_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableObject"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableObject_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39366 | JS_FNSPEC("passUnion", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39367 | JS_FNSPEC("passUnion2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion2_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion2"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion2_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39368 | JS_FNSPEC("passUnion3", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion3_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion3"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion3_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39369 | JS_FNSPEC("passUnion4", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion4_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion4"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion4_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39370 | JS_FNSPEC("passUnion5", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion5_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion5"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion5_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39371 | JS_FNSPEC("passUnion6", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion6_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion6"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion6_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39372 | JS_FNSPEC("passUnion7", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion7_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion7"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion7_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39373 | JS_FNSPEC("passUnion8", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion8_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion8"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion8_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39374 | JS_FNSPEC("passUnion9", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion9_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion9"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion9_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39375 | JS_FNSPEC("passUnion10", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion10_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion10"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion10_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39376 | JS_FNSPEC("passUnion11", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion11_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion11"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion11_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39377 | JS_FNSPEC("passUnion12", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion12_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion12"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion12_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39378 | JS_FNSPEC("passUnion13", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion13_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion13"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion13_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39379 | JS_FNSPEC("passUnion14", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion14_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion14"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion14_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39380 | JS_FNSPEC("passUnion15", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion15_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion15"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion15_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39381 | JS_FNSPEC("passUnion16", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion16_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion16"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion16_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39382 | JS_FNSPEC("passUnion17", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion17_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion17"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion17_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39383 | JS_FNSPEC("passUnion18", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion18_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion18"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion18_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39384 | JS_FNSPEC("passUnion19", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion19_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion19"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion19_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39385 | JS_FNSPEC("passUnion20", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion20_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion20"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion20_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39386 | JS_FNSPEC("passUnion21", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion21_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion21"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion21_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39387 | JS_FNSPEC("passUnion22", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion22_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion22"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion22_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39388 | JS_FNSPEC("passUnion23", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion23_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion23"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion23_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39389 | JS_FNSPEC("passUnion24", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion24_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion24"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion24_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39390 | JS_FNSPEC("passUnion25", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion25_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion25"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion25_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39391 | JS_FNSPEC("passUnion26", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion26_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion26"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion26_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39392 | JS_FNSPEC("passUnion27", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion27_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion27"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion27_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39393 | JS_FNSPEC("passUnion28", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnion28_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnion28"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passUnion28_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39394 | JS_FNSPEC("passUnionWithCallback", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithCallback_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithCallback"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithCallback_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39395 | JS_FNSPEC("passUnionWithByteString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithByteString_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithByteString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithByteString_methodinfo) }, 1, JSPROP_ENUMERATE, nullptr}, | |||
39396 | JS_FNSPEC("passUnionWithUTF8String", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithUTF8String_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithUTF8String"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithUTF8String_methodinfo) }, 1, JSPROP_ENUMERATE, nullptr}, | |||
39397 | JS_FNSPEC("passUnionWithRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithRecord_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39398 | JS_FNSPEC("passUnionWithRecordAndSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithRecordAndSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithRecordAndSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithRecordAndSequence_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39399 | JS_FNSPEC("passUnionWithSequenceAndRecord", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithSequenceAndRecord_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithSequenceAndRecord"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithSequenceAndRecord_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39400 | JS_FNSPEC("passUnionWithSVS", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithSVS_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithSVS"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithSVS_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39401 | JS_FNSPEC("passUnionWithNullable", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithNullable_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithNullable"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithNullable_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39402 | JS_FNSPEC("passNullableUnion", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnion_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnion"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnion_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39403 | JS_FNSPEC("passOptionalUnion", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnion_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalUnion"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalUnion_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39404 | JS_FNSPEC("passOptionalNullableUnion", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableUnion_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableUnion"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalNullableUnion_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39405 | JS_FNSPEC("passOptionalNullableUnionWithDefaultValue", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableUnionWithDefaultValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalNullableUnionWithDefaultValue" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalNullableUnionWithDefaultValue_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39406 | JS_FNSPEC("passUnionWithArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithArrayBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithArrayBuffer"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithArrayBuffer_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39407 | JS_FNSPEC("passUnionWithArrayBufferOrNull", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithArrayBufferOrNull_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithArrayBufferOrNull"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithArrayBufferOrNull_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39408 | JS_FNSPEC("passUnionWithTypedArrays", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithTypedArrays_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithTypedArrays"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithTypedArrays_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39409 | JS_FNSPEC("passUnionWithTypedArraysOrNull", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithTypedArraysOrNull_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithTypedArraysOrNull"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithTypedArraysOrNull_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39410 | JS_FNSPEC("passUnionWithString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithString_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithString"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithString_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39411 | JS_FNSPEC("passUnionWithEnum", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithEnum_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithEnum"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithEnum_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39412 | JS_FNSPEC("passUnionWithObject", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithObject_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithObject"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithObject_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39413 | JS_FNSPEC("passUnionWithDefaultValue1", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue1_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue1"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue1_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39414 | JS_FNSPEC("passUnionWithDefaultValue2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue2_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue2"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue2_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39415 | JS_FNSPEC("passUnionWithDefaultValue3", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue3_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue3"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue3_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39416 | JS_FNSPEC("passUnionWithDefaultValue4", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue4_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue4"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue4_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39417 | JS_FNSPEC("passUnionWithDefaultValue5", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue5_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue5"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue5_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39418 | JS_FNSPEC("passUnionWithDefaultValue6", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue6_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue6"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue6_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39419 | JS_FNSPEC("passUnionWithDefaultValue7", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue7_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue7"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue7_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39420 | JS_FNSPEC("passUnionWithDefaultValue8", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue8_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue8"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue8_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39421 | JS_FNSPEC("passUnionWithDefaultValue9", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue9_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue9"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue9_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39422 | JS_FNSPEC("passUnionWithDefaultValue10", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue10_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue10"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue10_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39423 | JS_FNSPEC("passUnionWithDefaultValue11", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue11_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue11"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue11_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39424 | JS_FNSPEC("passUnionWithDefaultValue12", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue12_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue12"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue12_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39425 | JS_FNSPEC("passUnionWithDefaultValue13", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue13_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue13"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue13_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39426 | JS_FNSPEC("passUnionWithDefaultValue14", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue14_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue14"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue14_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39427 | JS_FNSPEC("passUnionWithDefaultValue15", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue15_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue15"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue15_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39428 | JS_FNSPEC("passUnionWithDefaultValue16", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue16_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue16"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue16_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39429 | JS_FNSPEC("passUnionWithDefaultValue17", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue17_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue17"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue17_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39430 | JS_FNSPEC("passUnionWithDefaultValue18", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue18_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue18"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue18_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39431 | JS_FNSPEC("passUnionWithDefaultValue19", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue19_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue19"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue19_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39432 | JS_FNSPEC("passUnionWithDefaultValue20", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue20_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue20"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue20_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39433 | JS_FNSPEC("passUnionWithDefaultValue21", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue21_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue21"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue21_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39434 | JS_FNSPEC("passUnionWithDefaultValue22", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue22_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue22"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue22_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39435 | JS_FNSPEC("passUnionWithDefaultValue23", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue23_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue23"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue23_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39436 | JS_FNSPEC("passUnionWithDefaultValue24", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue24_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue24"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue24_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39437 | JS_FNSPEC("passUnionWithDefaultValue25", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionWithDefaultValue25_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionWithDefaultValue25"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionWithDefaultValue25_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39438 | JS_FNSPEC("passNullableUnionWithDefaultValue1", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue1_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue1"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue1_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39439 | JS_FNSPEC("passNullableUnionWithDefaultValue2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue2_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue2"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue2_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39440 | JS_FNSPEC("passNullableUnionWithDefaultValue3", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue3_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue3"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue3_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39441 | JS_FNSPEC("passNullableUnionWithDefaultValue4", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue4_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue4"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue4_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39442 | JS_FNSPEC("passNullableUnionWithDefaultValue5", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue5_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue5"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue5_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39443 | JS_FNSPEC("passNullableUnionWithDefaultValue6", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue6_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue6"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue6_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39444 | JS_FNSPEC("passNullableUnionWithDefaultValue7", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue7_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue7"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue7_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39445 | JS_FNSPEC("passNullableUnionWithDefaultValue8", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue8_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue8"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue8_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39446 | JS_FNSPEC("passNullableUnionWithDefaultValue9", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue9_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue9"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue9_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39447 | JS_FNSPEC("passNullableUnionWithDefaultValue10", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue10_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue10"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue10_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39448 | JS_FNSPEC("passNullableUnionWithDefaultValue11", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue11_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue11"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue11_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39449 | JS_FNSPEC("passNullableUnionWithDefaultValue12", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue12_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue12"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue12_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39450 | JS_FNSPEC("passNullableUnionWithDefaultValue13", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue13_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue13"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue13_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39451 | JS_FNSPEC("passNullableUnionWithDefaultValue14", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue14_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue14"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue14_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39452 | JS_FNSPEC("passNullableUnionWithDefaultValue15", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue15_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue15"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue15_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39453 | JS_FNSPEC("passNullableUnionWithDefaultValue16", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue16_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue16"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue16_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39454 | JS_FNSPEC("passNullableUnionWithDefaultValue17", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue17_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue17"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue17_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39455 | JS_FNSPEC("passNullableUnionWithDefaultValue18", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue18_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue18"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue18_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39456 | JS_FNSPEC("passNullableUnionWithDefaultValue19", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue19_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue19"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue19_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39457 | JS_FNSPEC("passNullableUnionWithDefaultValue20", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue20_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue20"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue20_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39458 | JS_FNSPEC("passNullableUnionWithDefaultValue21", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue21_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue21"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue21_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39459 | JS_FNSPEC("passNullableUnionWithDefaultValue22", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue22_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue22"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue22_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39460 | JS_FNSPEC("passNullableUnionWithDefaultValue23", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue23_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue23"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue23_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39461 | JS_FNSPEC("passNullableUnionWithDefaultValue24", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue24_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue24"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue24_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39462 | JS_FNSPEC("passNullableUnionWithDefaultValue25", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue25_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue25"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue25_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39463 | JS_FNSPEC("passNullableUnionWithDefaultValue26", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue26_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue26"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue26_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39464 | JS_FNSPEC("passNullableUnionWithDefaultValue27", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue27_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue27"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue27_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39465 | JS_FNSPEC("passNullableUnionWithDefaultValue28", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passNullableUnionWithDefaultValue28_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passNullableUnionWithDefaultValue28"), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passNullableUnionWithDefaultValue28_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39466 | JS_FNSPEC("passSequenceOfUnions", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfUnions_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfUnions"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfUnions_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39467 | JS_FNSPEC("passSequenceOfUnions2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfUnions2_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfUnions2"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfUnions2_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39468 | JS_FNSPEC("passVariadicUnion", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicUnion_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicUnion"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicUnion_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39469 | JS_FNSPEC("passSequenceOfNullableUnions", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfNullableUnions_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfNullableUnions"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfNullableUnions_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39470 | JS_FNSPEC("passVariadicNullableUnion", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicNullableUnion_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicNullableUnion"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passVariadicNullableUnion_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39471 | JS_FNSPEC("passRecordOfUnions", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfUnions_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfUnions"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfUnions_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39472 | JS_FNSPEC("receiveUnion", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnion_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnion"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveUnion_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39473 | JS_FNSPEC("receiveUnion2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnion2_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnion2"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&receiveUnion2_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39474 | JS_FNSPEC("receiveUnionContainingNull", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnionContainingNull_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnionContainingNull"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveUnionContainingNull_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39475 | JS_FNSPEC("receiveNullableUnion", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableUnion_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableUnion"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableUnion_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39476 | JS_FNSPEC("receiveNullableUnion2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableUnion2_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableUnion2"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableUnion2_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39477 | JS_FNSPEC("receiveUnionWithUndefined", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnionWithUndefined_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnionWithUndefined"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveUnionWithUndefined_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39478 | JS_FNSPEC("receiveUnionWithNullableUndefined", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnionWithNullableUndefined_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnionWithNullableUndefined"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&receiveUnionWithNullableUndefined_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39479 | JS_FNSPEC("receiveUnionWithUndefinedAndNullable", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveUnionWithUndefinedAndNullable_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveUnionWithUndefinedAndNullable") , {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&receiveUnionWithUndefinedAndNullable_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39480 | JS_FNSPEC("receiveNullableUnionWithUndefined", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableUnionWithUndefined_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableUnionWithUndefined"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&receiveNullableUnionWithUndefined_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39481 | JS_FNSPEC("passPromise", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passPromise_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passPromise"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passPromise_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39482 | JS_FNSPEC("passOptionalPromise", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOptionalPromise_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOptionalPromise"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOptionalPromise_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39483 | JS_FNSPEC("passPromiseSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passPromiseSequence_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passPromiseSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passPromiseSequence_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39484 | JS_FNSPEC("receivePromise", (GenericMethod<NormalThisPolicy, ConvertExceptionsToPromises>), reinterpret_cast<const JSJitInfo*>(&receivePromise_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receivePromise"), {(GenericMethod<NormalThisPolicy , ConvertExceptionsToPromises>), reinterpret_cast<const JSJitInfo*>(&receivePromise_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39485 | JS_FNSPEC("receiveAddrefedPromise", (GenericMethod<NormalThisPolicy, ConvertExceptionsToPromises>), reinterpret_cast<const JSJitInfo*>(&receiveAddrefedPromise_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveAddrefedPromise"), {(GenericMethod <NormalThisPolicy, ConvertExceptionsToPromises>), reinterpret_cast <const JSJitInfo*>(&receiveAddrefedPromise_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39486 | JS_FNSPEC("methodRenamedFrom", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&methodRenamedFrom_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("methodRenamedFrom"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&methodRenamedFrom_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39487 | JS_FNSPEC("passDictionary", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passDictionary_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passDictionary"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&passDictionary_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39488 | JS_FNSPEC("passDictionary2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passDictionary2_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passDictionary2"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passDictionary2_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39489 | JS_FNSPEC("receiveDictionary", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveDictionary_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveDictionary"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveDictionary_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39490 | JS_FNSPEC("receiveNullableDictionary", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveNullableDictionary_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveNullableDictionary"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveNullableDictionary_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39491 | JS_FNSPEC("passOtherDictionary", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passOtherDictionary_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passOtherDictionary"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passOtherDictionary_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39492 | JS_FNSPEC("passSequenceOfDictionaries", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passSequenceOfDictionaries_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passSequenceOfDictionaries"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passSequenceOfDictionaries_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39493 | JS_FNSPEC("passRecordOfDictionaries", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRecordOfDictionaries_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRecordOfDictionaries"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passRecordOfDictionaries_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39494 | JS_FNSPEC("passDictionaryOrLong", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passDictionaryOrLong_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passDictionaryOrLong"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passDictionaryOrLong_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39495 | JS_FNSPEC("passDictContainingDict", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passDictContainingDict_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passDictContainingDict"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passDictContainingDict_methodinfo)} , 0, JSPROP_ENUMERATE, nullptr}, | |||
39496 | JS_FNSPEC("passDictContainingSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passDictContainingSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passDictContainingSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passDictContainingSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39497 | JS_FNSPEC("receiveDictContainingSequence", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&receiveDictContainingSequence_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("receiveDictContainingSequence"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&receiveDictContainingSequence_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39498 | JS_FNSPEC("passVariadicDictionary", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicDictionary_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicDictionary"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passVariadicDictionary_methodinfo)} , 0, JSPROP_ENUMERATE, nullptr}, | |||
39499 | JS_FNSPEC("dontEnforceRangeOrClamp", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&dontEnforceRangeOrClamp_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("dontEnforceRangeOrClamp"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&dontEnforceRangeOrClamp_methodinfo) }, 1, JSPROP_ENUMERATE, nullptr}, | |||
39500 | JS_FNSPEC("doEnforceRange", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&doEnforceRange_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("doEnforceRange"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&doEnforceRange_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr }, | |||
39501 | JS_FNSPEC("doEnforceRangeNullable", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&doEnforceRangeNullable_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("doEnforceRangeNullable"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&doEnforceRangeNullable_methodinfo)} , 1, JSPROP_ENUMERATE, nullptr}, | |||
39502 | JS_FNSPEC("doClamp", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&doClamp_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("doClamp"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&doClamp_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39503 | JS_FNSPEC("doClampNullable", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&doClampNullable_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("doClampNullable"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&doClampNullable_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39504 | JS_FNSPEC("exerciseTypedefInterfaces1", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&exerciseTypedefInterfaces1_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("exerciseTypedefInterfaces1"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&exerciseTypedefInterfaces1_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39505 | JS_FNSPEC("exerciseTypedefInterfaces2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&exerciseTypedefInterfaces2_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("exerciseTypedefInterfaces2"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&exerciseTypedefInterfaces2_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39506 | JS_FNSPEC("exerciseTypedefInterfaces3", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&exerciseTypedefInterfaces3_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("exerciseTypedefInterfaces3"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&exerciseTypedefInterfaces3_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39507 | JS_FNSPEC("deprecatedMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&deprecatedMethod_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("deprecatedMethod"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&deprecatedMethod_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
39508 | JS_FNSPEC("deprecatedMethodWithContext", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&deprecatedMethodWithContext_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("deprecatedMethodWithContext"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&deprecatedMethodWithContext_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39509 | JS_FNSPEC("overload1", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload1_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload1"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload1_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39510 | JS_FNSPEC("overload2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload2_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload2"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload2_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39511 | JS_FNSPEC("overload3", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload3_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload3"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload3_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39512 | JS_FNSPEC("overload4", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload4_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload4"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload4_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39513 | JS_FNSPEC("overload5", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload5_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload5"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload5_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39514 | JS_FNSPEC("overload6", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload6_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload6"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload6_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39515 | JS_FNSPEC("overload7", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload7_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload7"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload7_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39516 | JS_FNSPEC("overload8", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload8_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload8"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload8_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39517 | JS_FNSPEC("overload9", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload9_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload9"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload9_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39518 | JS_FNSPEC("overload10", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload10_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload10"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload10_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39519 | JS_FNSPEC("overload11", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload11_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload11"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload11_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39520 | JS_FNSPEC("overload12", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload12_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload12"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload12_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39521 | JS_FNSPEC("overload13", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload13_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload13"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload13_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39522 | JS_FNSPEC("overload14", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload14_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload14"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload14_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39523 | JS_FNSPEC("overload15", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload15_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload15"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload15_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39524 | JS_FNSPEC("overload16", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload16_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload16"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload16_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39525 | JS_FNSPEC("overload17", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload17_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload17"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload17_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39526 | JS_FNSPEC("overload18", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload18_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload18"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload18_methodinfo)}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39527 | JS_FNSPEC("overload19", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload19_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload19"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload19_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39528 | JS_FNSPEC("overload20", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&overload20_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("overload20"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&overload20_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39529 | JS_FNSPEC("passVariadicThirdArg", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passVariadicThirdArg_methodinfo), 2, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passVariadicThirdArg"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passVariadicThirdArg_methodinfo)}, 2 , JSPROP_ENUMERATE, nullptr}, | |||
39530 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39531 | JS_FNSPEC("prefable10", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&prefable10_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("prefable10"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&prefable10_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39532 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39533 | JS_FNSPEC("prefable11", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&prefable11_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("prefable11"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&prefable11_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39534 | JS_FNSPEC("prefable13", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&prefable13_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("prefable13"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&prefable13_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39535 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39536 | JS_FNSPEC("prefable17", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&prefable17_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("prefable17"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&prefable17_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39537 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39538 | JS_FNSPEC("prefable18", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&prefable18_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("prefable18"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&prefable18_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39539 | JS_FNSPEC("prefable19", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&prefable19_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("prefable19"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&prefable19_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39540 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39541 | JS_FNSPEC("prefable20", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&prefable20_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("prefable20"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&prefable20_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39542 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39543 | JS_FNSPEC("conditionalOnSecureContext5", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&conditionalOnSecureContext5_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("conditionalOnSecureContext5"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&conditionalOnSecureContext5_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39544 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39545 | JS_FNSPEC("conditionalOnSecureContext6", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&conditionalOnSecureContext6_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("conditionalOnSecureContext6"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&conditionalOnSecureContext6_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39546 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39547 | JS_FNSPEC("conditionalOnSecureContext7", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&conditionalOnSecureContext7_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("conditionalOnSecureContext7"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&conditionalOnSecureContext7_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39548 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39549 | JS_FNSPEC("conditionalOnSecureContext8", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&conditionalOnSecureContext8_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("conditionalOnSecureContext8"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&conditionalOnSecureContext8_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39550 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39551 | JS_FNSPEC("conditionalOnSecureContext10", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&conditionalOnSecureContext10_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("conditionalOnSecureContext10"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&conditionalOnSecureContext10_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39552 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr }, | |||
39553 | JS_FNSPEC("passRenamedInterface", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passRenamedInterface_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passRenamedInterface"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passRenamedInterface_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39554 | JS_FNSPEC("throwingMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&throwingMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("throwingMethod"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&throwingMethod_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39555 | JS_FNSPEC("canOOMMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&canOOMMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("canOOMMethod"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&canOOMMethod_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39556 | JS_FNSPEC("needsSubjectPrincipalMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&needsSubjectPrincipalMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("needsSubjectPrincipalMethod"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&needsSubjectPrincipalMethod_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39557 | JS_FNSPEC("needsNonSystemSubjectPrincipalMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&needsNonSystemSubjectPrincipalMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("needsNonSystemSubjectPrincipalMethod") , {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&needsNonSystemSubjectPrincipalMethod_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39558 | JS_FNSPEC("needsCallerTypeMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&needsCallerTypeMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("needsCallerTypeMethod"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&needsCallerTypeMethod_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39559 | JS_FNSPEC("ceReactionsMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&ceReactionsMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("ceReactionsMethod"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&ceReactionsMethod_methodinfo)}, 0, JSPROP_ENUMERATE , nullptr}, | |||
39560 | JS_FNSPEC("ceReactionsMethodOverload", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&ceReactionsMethodOverload_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("ceReactionsMethodOverload"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&ceReactionsMethodOverload_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39561 | JS_FNSPEC("passArgsWithDefaults", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passArgsWithDefaults_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passArgsWithDefaults"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passArgsWithDefaults_methodinfo)}, 0 , JSPROP_ENUMERATE, nullptr}, | |||
39562 | JS_FNSPEC("toJSON", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&toJSON_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("toJSON"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&toJSON_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
39563 | JS_FNSPEC("dashed-method", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&dashed_method_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("dashed-method"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&dashed_method_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39564 | JS_FNSPEC("nonEnumerableMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&nonEnumerableMethod_methodinfo), 0, 0, nullptr){JSFunctionSpec::Name("nonEnumerableMethod"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&nonEnumerableMethod_methodinfo)}, 0 , 0, nullptr}, | |||
39565 | JS_FNSPEC("passAllowSharedArrayBufferViewTypedef", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAllowSharedArrayBufferViewTypedef_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passAllowSharedArrayBufferViewTypedef" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAllowSharedArrayBufferViewTypedef_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39566 | JS_FNSPEC("passAllowSharedArrayBufferView", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAllowSharedArrayBufferView_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passAllowSharedArrayBufferView"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passAllowSharedArrayBufferView_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39567 | JS_FNSPEC("passAllowSharedNullableArrayBufferView", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAllowSharedNullableArrayBufferView_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passAllowSharedNullableArrayBufferView" ), {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAllowSharedNullableArrayBufferView_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39568 | JS_FNSPEC("passAllowSharedArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAllowSharedArrayBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passAllowSharedArrayBuffer"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passAllowSharedArrayBuffer_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39569 | JS_FNSPEC("passAllowSharedNullableArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passAllowSharedNullableArrayBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passAllowSharedNullableArrayBuffer"), { (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&passAllowSharedNullableArrayBuffer_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39570 | JS_FNSPEC("passUnionArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionArrayBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionArrayBuffer"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionArrayBuffer_methodinfo)}, 1 , JSPROP_ENUMERATE, nullptr}, | |||
39571 | JS_FNSPEC("passUnionAllowSharedArrayBuffer", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&passUnionAllowSharedArrayBuffer_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("passUnionAllowSharedArrayBuffer"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&passUnionAllowSharedArrayBuffer_methodinfo )}, 1, JSPROP_ENUMERATE, nullptr}, | |||
39572 | JS_FNSPEC("toString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&__stringifier_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("toString"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&__stringifier_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
39573 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr } | |||
39574 | }; | |||
39575 | ||||
39576 | static const PrefableDisablers sMethods_disablers427 = { | |||
39577 | WebIDLPrefIndex::dom_webidl_test1, 0, false, OriginTrial(0), nullptr | |||
39578 | }; | |||
39579 | ||||
39580 | static const PrefableDisablers sMethods_disablers429 = { | |||
39581 | WebIDLPrefIndex::dom_webidl_test1, 0, false, OriginTrial(0), &nsGenericHTMLElement::LegacyTouchAPIEnabled | |||
39582 | }; | |||
39583 | ||||
39584 | static const PrefableDisablers sMethods_disablers432 = { | |||
39585 | WebIDLPrefIndex::dom_webidl_test1, 0, false, OriginTrial(0), &TestFuncControlledMember | |||
39586 | }; | |||
39587 | ||||
39588 | static const PrefableDisablers sMethods_disablers434 = { | |||
39589 | WebIDLPrefIndex::NoPref, 0, false, OriginTrial(0), &TestFuncControlledMember | |||
39590 | }; | |||
39591 | ||||
39592 | static const PrefableDisablers sMethods_disablers437 = { | |||
39593 | WebIDLPrefIndex::NoPref, 0, false, OriginTrial::TestTrial, nullptr | |||
39594 | }; | |||
39595 | ||||
39596 | static const PrefableDisablers sMethods_disablers439 = { | |||
39597 | WebIDLPrefIndex::NoPref, 0, true, OriginTrial(0), nullptr | |||
39598 | }; | |||
39599 | ||||
39600 | static const PrefableDisablers sMethods_disablers441 = { | |||
39601 | WebIDLPrefIndex::dom_webidl_test1, 0, true, OriginTrial(0), nullptr | |||
39602 | }; | |||
39603 | ||||
39604 | static const PrefableDisablers sMethods_disablers443 = { | |||
39605 | WebIDLPrefIndex::dom_webidl_test1, 0, true, OriginTrial(0), &nsGenericHTMLElement::LegacyTouchAPIEnabled | |||
39606 | }; | |||
39607 | ||||
39608 | static const PrefableDisablers sMethods_disablers445 = { | |||
39609 | WebIDLPrefIndex::dom_webidl_test1, 0, true, OriginTrial(0), &TestFuncControlledMember | |||
39610 | }; | |||
39611 | ||||
39612 | static const PrefableDisablers sMethods_disablers447 = { | |||
39613 | WebIDLPrefIndex::NoPref, 0, true, OriginTrial::TestTrial, nullptr | |||
39614 | }; | |||
39615 | ||||
39616 | static const Prefable<const JSFunctionSpec> sMethods[] = { | |||
39617 | { nullptr, &sMethods_specs[0] }, | |||
39618 | { &sMethods_disablers427, &sMethods_specs[427] }, | |||
39619 | { &sMethods_disablers429, &sMethods_specs[429] }, | |||
39620 | { &sMethods_disablers432, &sMethods_specs[432] }, | |||
39621 | { &sMethods_disablers434, &sMethods_specs[434] }, | |||
39622 | { &sMethods_disablers437, &sMethods_specs[437] }, | |||
39623 | { &sMethods_disablers439, &sMethods_specs[439] }, | |||
39624 | { &sMethods_disablers441, &sMethods_specs[441] }, | |||
39625 | { &sMethods_disablers443, &sMethods_specs[443] }, | |||
39626 | { &sMethods_disablers445, &sMethods_specs[445] }, | |||
39627 | { &sMethods_disablers447, &sMethods_specs[447] }, | |||
39628 | { nullptr, &sMethods_specs[449] }, | |||
39629 | { nullptr, nullptr } | |||
39630 | }; | |||
39631 | ||||
39632 | static_assert(12 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39633 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39634 | static_assert(426 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39635 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39636 | ||||
39637 | static const JSPropertySpec sAttributes_specs[] = { | |||
39638 | JSPropertySpec::nativeAccessors("readonlyByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyByte_getterinfo, nullptr, nullptr), | |||
39639 | JSPropertySpec::nativeAccessors("writableByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableByte_getterinfo, GenericSetter<NormalThisPolicy>, &writableByte_setterinfo), | |||
39640 | JSPropertySpec::nativeAccessors("cachedByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &cachedByte_getterinfo, nullptr, nullptr), | |||
39641 | JSPropertySpec::nativeAccessors("cachedConstantByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &cachedConstantByte_getterinfo, nullptr, nullptr), | |||
39642 | JSPropertySpec::nativeAccessors("cachedWritableByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &cachedWritableByte_getterinfo, GenericSetter<NormalThisPolicy>, &cachedWritableByte_setterinfo), | |||
39643 | JSPropertySpec::nativeAccessors("sideEffectFreeByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &sideEffectFreeByte_getterinfo, GenericSetter<NormalThisPolicy>, &sideEffectFreeByte_setterinfo), | |||
39644 | JSPropertySpec::nativeAccessors("domDependentByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &domDependentByte_getterinfo, GenericSetter<NormalThisPolicy>, &domDependentByte_setterinfo), | |||
39645 | JSPropertySpec::nativeAccessors("constantByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &constantByte_getterinfo, nullptr, nullptr), | |||
39646 | JSPropertySpec::nativeAccessors("deviceStateDependentByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &deviceStateDependentByte_getterinfo, nullptr, nullptr), | |||
39647 | JSPropertySpec::nativeAccessors("readonlyShort", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyShort_getterinfo, nullptr, nullptr), | |||
39648 | JSPropertySpec::nativeAccessors("writableShort", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableShort_getterinfo, GenericSetter<NormalThisPolicy>, &writableShort_setterinfo), | |||
39649 | JSPropertySpec::nativeAccessors("readonlyLong", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyLong_getterinfo, nullptr, nullptr), | |||
39650 | JSPropertySpec::nativeAccessors("writableLong", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableLong_getterinfo, GenericSetter<NormalThisPolicy>, &writableLong_setterinfo), | |||
39651 | JSPropertySpec::nativeAccessors("readonlyLongLong", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyLongLong_getterinfo, nullptr, nullptr), | |||
39652 | JSPropertySpec::nativeAccessors("writableLongLong", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableLongLong_getterinfo, GenericSetter<NormalThisPolicy>, &writableLongLong_setterinfo), | |||
39653 | JSPropertySpec::nativeAccessors("readonlyOctet", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyOctet_getterinfo, nullptr, nullptr), | |||
39654 | JSPropertySpec::nativeAccessors("writableOctet", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableOctet_getterinfo, GenericSetter<NormalThisPolicy>, &writableOctet_setterinfo), | |||
39655 | JSPropertySpec::nativeAccessors("readonlyUnsignedShort", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyUnsignedShort_getterinfo, nullptr, nullptr), | |||
39656 | JSPropertySpec::nativeAccessors("writableUnsignedShort", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnsignedShort_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnsignedShort_setterinfo), | |||
39657 | JSPropertySpec::nativeAccessors("readonlyUnsignedLong", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyUnsignedLong_getterinfo, nullptr, nullptr), | |||
39658 | JSPropertySpec::nativeAccessors("writableUnsignedLong", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnsignedLong_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnsignedLong_setterinfo), | |||
39659 | JSPropertySpec::nativeAccessors("readonlyUnsignedLongLong", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyUnsignedLongLong_getterinfo, nullptr, nullptr), | |||
39660 | JSPropertySpec::nativeAccessors("writableUnsignedLongLong", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnsignedLongLong_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnsignedLongLong_setterinfo), | |||
39661 | JSPropertySpec::nativeAccessors("writableFloat", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableFloat_getterinfo, GenericSetter<NormalThisPolicy>, &writableFloat_setterinfo), | |||
39662 | JSPropertySpec::nativeAccessors("writableUnrestrictedFloat", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnrestrictedFloat_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnrestrictedFloat_setterinfo), | |||
39663 | JSPropertySpec::nativeAccessors("writableNullableFloat", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableNullableFloat_getterinfo, GenericSetter<NormalThisPolicy>, &writableNullableFloat_setterinfo), | |||
39664 | JSPropertySpec::nativeAccessors("writableNullableUnrestrictedFloat", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableNullableUnrestrictedFloat_getterinfo, GenericSetter<NormalThisPolicy>, &writableNullableUnrestrictedFloat_setterinfo), | |||
39665 | JSPropertySpec::nativeAccessors("writableDouble", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableDouble_getterinfo, GenericSetter<NormalThisPolicy>, &writableDouble_setterinfo), | |||
39666 | JSPropertySpec::nativeAccessors("writableUnrestrictedDouble", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnrestrictedDouble_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnrestrictedDouble_setterinfo), | |||
39667 | JSPropertySpec::nativeAccessors("writableNullableDouble", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableNullableDouble_getterinfo, GenericSetter<NormalThisPolicy>, &writableNullableDouble_setterinfo), | |||
39668 | JSPropertySpec::nativeAccessors("writableNullableUnrestrictedDouble", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableNullableUnrestrictedDouble_getterinfo, GenericSetter<NormalThisPolicy>, &writableNullableUnrestrictedDouble_setterinfo), | |||
39669 | JSPropertySpec::nativeAccessors("lenientFloatAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &lenientFloatAttr_getterinfo, GenericSetter<NormalThisPolicy>, &lenientFloatAttr_setterinfo), | |||
39670 | JSPropertySpec::nativeAccessors("lenientDoubleAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &lenientDoubleAttr_getterinfo, GenericSetter<NormalThisPolicy>, &lenientDoubleAttr_setterinfo), | |||
39671 | JSPropertySpec::nativeAccessors("nonNullSelf", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &nonNullSelf_getterinfo, GenericSetter<NormalThisPolicy>, &nonNullSelf_setterinfo), | |||
39672 | JSPropertySpec::nativeAccessors("nullableSelf", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &nullableSelf_getterinfo, GenericSetter<NormalThisPolicy>, &nullableSelf_setterinfo), | |||
39673 | JSPropertySpec::nativeAccessors("cachedSelf", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &cachedSelf_getterinfo, nullptr, nullptr), | |||
39674 | JSPropertySpec::nativeAccessors("nonNullExternal", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &nonNullExternal_getterinfo, GenericSetter<NormalThisPolicy>, &nonNullExternal_setterinfo), | |||
39675 | JSPropertySpec::nativeAccessors("nullableExternal", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &nullableExternal_getterinfo, GenericSetter<NormalThisPolicy>, &nullableExternal_setterinfo), | |||
39676 | JSPropertySpec::nativeAccessors("nonNullCallbackInterface", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &nonNullCallbackInterface_getterinfo, GenericSetter<NormalThisPolicy>, &nonNullCallbackInterface_setterinfo), | |||
39677 | JSPropertySpec::nativeAccessors("nullableCallbackInterface", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &nullableCallbackInterface_getterinfo, GenericSetter<NormalThisPolicy>, &nullableCallbackInterface_setterinfo), | |||
39678 | JSPropertySpec::nativeAccessors("readonlySequence", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlySequence_getterinfo, nullptr, nullptr), | |||
39679 | JSPropertySpec::nativeAccessors("readonlySequenceOfDictionaries", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlySequenceOfDictionaries_getterinfo, nullptr, nullptr), | |||
39680 | JSPropertySpec::nativeAccessors("readonlyNullableSequenceOfDictionaries", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyNullableSequenceOfDictionaries_getterinfo, nullptr, nullptr), | |||
39681 | JSPropertySpec::nativeAccessors("readonlyFrozenSequence", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyFrozenSequence_getterinfo, nullptr, nullptr), | |||
39682 | JSPropertySpec::nativeAccessors("readonlyFrozenNullableSequence", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyFrozenNullableSequence_getterinfo, nullptr, nullptr), | |||
39683 | JSPropertySpec::nativeAccessors("uint8ArrayAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &uint8ArrayAttr_getterinfo, GenericSetter<NormalThisPolicy>, &uint8ArrayAttr_setterinfo), | |||
39684 | JSPropertySpec::nativeAccessors("readonlyJSStringAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyJSStringAttr_getterinfo, nullptr, nullptr), | |||
39685 | JSPropertySpec::nativeAccessors("jsStringAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &jsStringAttr_getterinfo, GenericSetter<NormalThisPolicy>, &jsStringAttr_setterinfo), | |||
39686 | JSPropertySpec::nativeAccessors("enumAttribute", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &enumAttribute_getterinfo, GenericSetter<NormalThisPolicy>, &enumAttribute_setterinfo), | |||
39687 | JSPropertySpec::nativeAccessors("readonlyEnumAttribute", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyEnumAttribute_getterinfo, nullptr, nullptr), | |||
39688 | JSPropertySpec::nativeAccessors("writableUnion", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnion_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnion_setterinfo), | |||
39689 | JSPropertySpec::nativeAccessors("writableUnionContainingNull", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnionContainingNull_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnionContainingNull_setterinfo), | |||
39690 | JSPropertySpec::nativeAccessors("writableNullableUnion", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableNullableUnion_getterinfo, GenericSetter<NormalThisPolicy>, &writableNullableUnion_setterinfo), | |||
39691 | JSPropertySpec::nativeAccessors("writableUnionWithUndefined", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnionWithUndefined_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnionWithUndefined_setterinfo), | |||
39692 | JSPropertySpec::nativeAccessors("writableUnionWithNullableUndefined", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnionWithNullableUndefined_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnionWithNullableUndefined_setterinfo), | |||
39693 | JSPropertySpec::nativeAccessors("writableUnionWithUndefinedAndNullable", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableUnionWithUndefinedAndNullable_getterinfo, GenericSetter<NormalThisPolicy>, &writableUnionWithUndefinedAndNullable_setterinfo), | |||
39694 | JSPropertySpec::nativeAccessors("writableNullableUnionWithUndefined", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableNullableUnionWithUndefined_getterinfo, GenericSetter<NormalThisPolicy>, &writableNullableUnionWithUndefined_setterinfo), | |||
39695 | JSPropertySpec::nativeAccessors("booleanObservableArray", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &booleanObservableArray_getterinfo, GenericSetter<NormalThisPolicy>, &booleanObservableArray_setterinfo), | |||
39696 | JSPropertySpec::nativeAccessors("objectObservableArray", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &objectObservableArray_getterinfo, GenericSetter<NormalThisPolicy>, &objectObservableArray_setterinfo), | |||
39697 | JSPropertySpec::nativeAccessors("anyObservableArray", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &anyObservableArray_getterinfo, GenericSetter<NormalThisPolicy>, &anyObservableArray_setterinfo), | |||
39698 | JSPropertySpec::nativeAccessors("interfaceObservableArray", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &interfaceObservableArray_getterinfo, GenericSetter<NormalThisPolicy>, &interfaceObservableArray_setterinfo), | |||
39699 | JSPropertySpec::nativeAccessors("nullableObservableArray", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &nullableObservableArray_getterinfo, GenericSetter<NormalThisPolicy>, &nullableObservableArray_setterinfo), | |||
39700 | JSPropertySpec::nativeAccessors("attributeGetterRenamedFrom", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &attributeGetterRenamedFrom_getterinfo, nullptr, nullptr), | |||
39701 | JSPropertySpec::nativeAccessors("attributeRenamedFrom", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &attributeRenamedFrom_getterinfo, GenericSetter<NormalThisPolicy>, &attributeRenamedFrom_setterinfo), | |||
39702 | JSPropertySpec::nativeAccessors("readonlyDictionary", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyDictionary_getterinfo, nullptr, nullptr), | |||
39703 | JSPropertySpec::nativeAccessors("readonlyNullableDictionary", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyNullableDictionary_getterinfo, nullptr, nullptr), | |||
39704 | JSPropertySpec::nativeAccessors("writableDictionary", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableDictionary_getterinfo, GenericSetter<NormalThisPolicy>, &writableDictionary_setterinfo), | |||
39705 | JSPropertySpec::nativeAccessors("readonlyFrozenDictionary", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyFrozenDictionary_getterinfo, nullptr, nullptr), | |||
39706 | JSPropertySpec::nativeAccessors("readonlyFrozenNullableDictionary", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readonlyFrozenNullableDictionary_getterinfo, nullptr, nullptr), | |||
39707 | JSPropertySpec::nativeAccessors("writableFrozenDictionary", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &writableFrozenDictionary_getterinfo, GenericSetter<NormalThisPolicy>, &writableFrozenDictionary_setterinfo), | |||
39708 | JSPropertySpec::nativeAccessors("enforcedByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &enforcedByte_getterinfo, GenericSetter<NormalThisPolicy>, &enforcedByte_setterinfo), | |||
39709 | JSPropertySpec::nativeAccessors("enforcedByteNullable", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &enforcedByteNullable_getterinfo, GenericSetter<NormalThisPolicy>, &enforcedByteNullable_setterinfo), | |||
39710 | JSPropertySpec::nativeAccessors("clampedByte", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &clampedByte_getterinfo, GenericSetter<NormalThisPolicy>, &clampedByte_setterinfo), | |||
39711 | JSPropertySpec::nativeAccessors("clampedByteNullable", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &clampedByteNullable_getterinfo, GenericSetter<NormalThisPolicy>, &clampedByteNullable_setterinfo), | |||
39712 | JSPropertySpec::nativeAccessors("deprecatedAttribute", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &deprecatedAttribute_getterinfo, GenericSetter<NormalThisPolicy>, &deprecatedAttribute_setterinfo), | |||
39713 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39714 | JSPropertySpec::nativeAccessors("prefable1", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable1_getterinfo, nullptr, nullptr), | |||
39715 | JSPropertySpec::nativeAccessors("prefable2", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable2_getterinfo, nullptr, nullptr), | |||
39716 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39717 | JSPropertySpec::nativeAccessors("prefable3", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable3_getterinfo, nullptr, nullptr), | |||
39718 | JSPropertySpec::nativeAccessors("prefable4", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable4_getterinfo, nullptr, nullptr), | |||
39719 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39720 | JSPropertySpec::nativeAccessors("prefable5", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable5_getterinfo, nullptr, nullptr), | |||
39721 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39722 | JSPropertySpec::nativeAccessors("prefable6", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable6_getterinfo, nullptr, nullptr), | |||
39723 | JSPropertySpec::nativeAccessors("prefable7", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable7_getterinfo, nullptr, nullptr), | |||
39724 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39725 | JSPropertySpec::nativeAccessors("prefable8", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable8_getterinfo, nullptr, nullptr), | |||
39726 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39727 | JSPropertySpec::nativeAccessors("prefable9", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable9_getterinfo, nullptr, nullptr), | |||
39728 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39729 | JSPropertySpec::nativeAccessors("prefable12", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable12_getterinfo, nullptr, nullptr), | |||
39730 | JSPropertySpec::nativeAccessors("prefable14", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable14_getterinfo, nullptr, nullptr), | |||
39731 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39732 | JSPropertySpec::nativeAccessors("prefable15", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable15_getterinfo, nullptr, nullptr), | |||
39733 | JSPropertySpec::nativeAccessors("prefable16", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable16_getterinfo, nullptr, nullptr), | |||
39734 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39735 | JSPropertySpec::nativeAccessors("prefable21", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable21_getterinfo, nullptr, nullptr), | |||
39736 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39737 | JSPropertySpec::nativeAccessors("prefable22", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &prefable22_getterinfo, nullptr, nullptr), | |||
39738 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39739 | JSPropertySpec::nativeAccessors("conditionalOnSecureContext1", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &conditionalOnSecureContext1_getterinfo, nullptr, nullptr), | |||
39740 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39741 | JSPropertySpec::nativeAccessors("conditionalOnSecureContext2", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &conditionalOnSecureContext2_getterinfo, nullptr, nullptr), | |||
39742 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39743 | JSPropertySpec::nativeAccessors("conditionalOnSecureContext3", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &conditionalOnSecureContext3_getterinfo, nullptr, nullptr), | |||
39744 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39745 | JSPropertySpec::nativeAccessors("conditionalOnSecureContext4", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &conditionalOnSecureContext4_getterinfo, nullptr, nullptr), | |||
39746 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39747 | JSPropertySpec::nativeAccessors("conditionalOnSecureContext9", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &conditionalOnSecureContext9_getterinfo, nullptr, nullptr), | |||
39748 | JS_PS_ENDJSPropertySpec::sentinel(), | |||
39749 | JSPropertySpec::nativeAccessors("attrWithLenientThis", JSPROP_ENUMERATE, GenericGetter<LenientThisPolicy, ThrowExceptions>, &attrWithLenientThis_getterinfo, GenericSetter<LenientThisPolicy>, &attrWithLenientThis_setterinfo), | |||
39750 | JSPropertySpec::nativeAccessors("putForwardsAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &putForwardsAttr_getterinfo, GenericSetter<NormalThisPolicy>, &putForwardsAttr_setterinfo), | |||
39751 | JSPropertySpec::nativeAccessors("putForwardsAttr2", JSPROP_ENUMERATE, GenericGetter<LenientThisPolicy, ThrowExceptions>, &putForwardsAttr2_getterinfo, GenericSetter<LenientThisPolicy>, &putForwardsAttr2_setterinfo), | |||
39752 | JSPropertySpec::nativeAccessors("throwingAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &throwingAttr_getterinfo, GenericSetter<NormalThisPolicy>, &throwingAttr_setterinfo), | |||
39753 | JSPropertySpec::nativeAccessors("throwingGetterAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &throwingGetterAttr_getterinfo, GenericSetter<NormalThisPolicy>, &throwingGetterAttr_setterinfo), | |||
39754 | JSPropertySpec::nativeAccessors("throwingSetterAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &throwingSetterAttr_getterinfo, GenericSetter<NormalThisPolicy>, &throwingSetterAttr_setterinfo), | |||
39755 | JSPropertySpec::nativeAccessors("canOOMAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &canOOMAttr_getterinfo, GenericSetter<NormalThisPolicy>, &canOOMAttr_setterinfo), | |||
39756 | JSPropertySpec::nativeAccessors("canOOMGetterAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &canOOMGetterAttr_getterinfo, GenericSetter<NormalThisPolicy>, &canOOMGetterAttr_setterinfo), | |||
39757 | JSPropertySpec::nativeAccessors("canOOMSetterAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &canOOMSetterAttr_getterinfo, GenericSetter<NormalThisPolicy>, &canOOMSetterAttr_setterinfo), | |||
39758 | JSPropertySpec::nativeAccessors("needsSubjectPrincipalAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &needsSubjectPrincipalAttr_getterinfo, GenericSetter<NormalThisPolicy>, &needsSubjectPrincipalAttr_setterinfo), | |||
39759 | JSPropertySpec::nativeAccessors("needsNonSystemSubjectPrincipalAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &needsNonSystemSubjectPrincipalAttr_getterinfo, GenericSetter<NormalThisPolicy>, &needsNonSystemSubjectPrincipalAttr_setterinfo), | |||
39760 | JSPropertySpec::nativeAccessors("needsCallerTypeAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &needsCallerTypeAttr_getterinfo, GenericSetter<NormalThisPolicy>, &needsCallerTypeAttr_setterinfo), | |||
39761 | JSPropertySpec::nativeAccessors("ceReactionsAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &ceReactionsAttr_getterinfo, GenericSetter<NormalThisPolicy>, &ceReactionsAttr_setterinfo), | |||
39762 | JSPropertySpec::nativeAccessors("toJSONShouldSkipThis", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &toJSONShouldSkipThis_getterinfo, GenericSetter<NormalThisPolicy>, &toJSONShouldSkipThis_setterinfo), | |||
39763 | JSPropertySpec::nativeAccessors("toJSONShouldSkipThis2", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &toJSONShouldSkipThis2_getterinfo, GenericSetter<NormalThisPolicy>, &toJSONShouldSkipThis2_setterinfo), | |||
39764 | JSPropertySpec::nativeAccessors("toJSONShouldSkipThis3", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &toJSONShouldSkipThis3_getterinfo, GenericSetter<NormalThisPolicy>, &toJSONShouldSkipThis3_setterinfo), | |||
39765 | JSPropertySpec::nativeAccessors("dashed-attribute", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &dashed_attribute_getterinfo, GenericSetter<NormalThisPolicy>, &dashed_attribute_setterinfo), | |||
39766 | JSPropertySpec::nativeAccessors("nonEnumerableAttr", 0, GenericGetter<NormalThisPolicy, ThrowExceptions>, &nonEnumerableAttr_getterinfo, GenericSetter<NormalThisPolicy>, &nonEnumerableAttr_setterinfo), | |||
39767 | JSPropertySpec::nativeAccessors("allowSharedArrayBufferViewTypedef", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &allowSharedArrayBufferViewTypedef_getterinfo, GenericSetter<NormalThisPolicy>, &allowSharedArrayBufferViewTypedef_setterinfo), | |||
39768 | JSPropertySpec::nativeAccessors("allowSharedArrayBufferView", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &allowSharedArrayBufferView_getterinfo, GenericSetter<NormalThisPolicy>, &allowSharedArrayBufferView_setterinfo), | |||
39769 | JSPropertySpec::nativeAccessors("allowSharedNullableArrayBufferView", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &allowSharedNullableArrayBufferView_getterinfo, GenericSetter<NormalThisPolicy>, &allowSharedNullableArrayBufferView_setterinfo), | |||
39770 | JSPropertySpec::nativeAccessors("allowSharedArrayBuffer", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &allowSharedArrayBuffer_getterinfo, GenericSetter<NormalThisPolicy>, &allowSharedArrayBuffer_setterinfo), | |||
39771 | JSPropertySpec::nativeAccessors("allowSharedNullableArrayBuffer", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &allowSharedNullableArrayBuffer_getterinfo, GenericSetter<NormalThisPolicy>, &allowSharedNullableArrayBuffer_setterinfo), | |||
39772 | JSPropertySpec::nativeAccessors("reflectedHTMLAttributeReturningFrozenArray", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &reflectedHTMLAttributeReturningFrozenArray_getterinfo, GenericSetter<NormalThisPolicy>, &reflectedHTMLAttributeReturningFrozenArray_setterinfo), | |||
39773 | JS_PS_ENDJSPropertySpec::sentinel() | |||
39774 | }; | |||
39775 | ||||
39776 | static const PrefableDisablers sAttributes_disablers76 = { | |||
39777 | WebIDLPrefIndex::dom_webidl_test1, 0, false, OriginTrial(0), nullptr | |||
39778 | }; | |||
39779 | ||||
39780 | static const PrefableDisablers sAttributes_disablers79 = { | |||
39781 | WebIDLPrefIndex::dom_webidl_test2, 0, false, OriginTrial(0), nullptr | |||
39782 | }; | |||
39783 | ||||
39784 | static const PrefableDisablers sAttributes_disablers82 = { | |||
39785 | WebIDLPrefIndex::dom_webidl_test1, 0, false, OriginTrial(0), nullptr | |||
39786 | }; | |||
39787 | ||||
39788 | static const PrefableDisablers sAttributes_disablers84 = { | |||
39789 | WebIDLPrefIndex::dom_webidl_test1, 0, false, OriginTrial(0), &nsGenericHTMLElement::LegacyTouchAPIEnabled | |||
39790 | }; | |||
39791 | ||||
39792 | static const PrefableDisablers sAttributes_disablers87 = { | |||
39793 | WebIDLPrefIndex::dom_webidl_test2, 0, false, OriginTrial(0), &nsGenericHTMLElement::LegacyTouchAPIEnabled | |||
39794 | }; | |||
39795 | ||||
39796 | static const PrefableDisablers sAttributes_disablers89 = { | |||
39797 | WebIDLPrefIndex::dom_webidl_test1, 0, false, OriginTrial(0), &nsGenericHTMLElement::LegacyTouchAPIEnabled | |||
39798 | }; | |||
39799 | ||||
39800 | static const PrefableDisablers sAttributes_disablers91 = { | |||
39801 | WebIDLPrefIndex::dom_webidl_test1, 0, false, OriginTrial(0), &TestFuncControlledMember | |||
39802 | }; | |||
39803 | ||||
39804 | static const PrefableDisablers sAttributes_disablers94 = { | |||
39805 | WebIDLPrefIndex::NoPref, 0, false, OriginTrial(0), &TestFuncControlledMember | |||
39806 | }; | |||
39807 | ||||
39808 | static const PrefableDisablers sAttributes_disablers97 = { | |||
39809 | WebIDLPrefIndex::NoPref, 0, false, OriginTrial::TestTrial, nullptr | |||
39810 | }; | |||
39811 | ||||
39812 | static const PrefableDisablers sAttributes_disablers99 = { | |||
39813 | WebIDLPrefIndex::NoPref, 0, false, OriginTrial::TestTrial, &TestFuncControlledMember | |||
39814 | }; | |||
39815 | ||||
39816 | static const PrefableDisablers sAttributes_disablers101 = { | |||
39817 | WebIDLPrefIndex::NoPref, 0, true, OriginTrial(0), nullptr | |||
39818 | }; | |||
39819 | ||||
39820 | static const PrefableDisablers sAttributes_disablers103 = { | |||
39821 | WebIDLPrefIndex::dom_webidl_test1, 0, true, OriginTrial(0), nullptr | |||
39822 | }; | |||
39823 | ||||
39824 | static const PrefableDisablers sAttributes_disablers105 = { | |||
39825 | WebIDLPrefIndex::dom_webidl_test1, 0, true, OriginTrial(0), &nsGenericHTMLElement::LegacyTouchAPIEnabled | |||
39826 | }; | |||
39827 | ||||
39828 | static const PrefableDisablers sAttributes_disablers107 = { | |||
39829 | WebIDLPrefIndex::dom_webidl_test1, 0, true, OriginTrial(0), &TestFuncControlledMember | |||
39830 | }; | |||
39831 | ||||
39832 | static const PrefableDisablers sAttributes_disablers109 = { | |||
39833 | WebIDLPrefIndex::NoPref, 0, true, OriginTrial::TestTrial, nullptr | |||
39834 | }; | |||
39835 | ||||
39836 | static const Prefable<const JSPropertySpec> sAttributes[] = { | |||
39837 | { nullptr, &sAttributes_specs[0] }, | |||
39838 | { &sAttributes_disablers76, &sAttributes_specs[76] }, | |||
39839 | { &sAttributes_disablers79, &sAttributes_specs[79] }, | |||
39840 | { &sAttributes_disablers82, &sAttributes_specs[82] }, | |||
39841 | { &sAttributes_disablers84, &sAttributes_specs[84] }, | |||
39842 | { &sAttributes_disablers87, &sAttributes_specs[87] }, | |||
39843 | { &sAttributes_disablers89, &sAttributes_specs[89] }, | |||
39844 | { &sAttributes_disablers91, &sAttributes_specs[91] }, | |||
39845 | { &sAttributes_disablers94, &sAttributes_specs[94] }, | |||
39846 | { &sAttributes_disablers97, &sAttributes_specs[97] }, | |||
39847 | { &sAttributes_disablers99, &sAttributes_specs[99] }, | |||
39848 | { &sAttributes_disablers101, &sAttributes_specs[101] }, | |||
39849 | { &sAttributes_disablers103, &sAttributes_specs[103] }, | |||
39850 | { &sAttributes_disablers105, &sAttributes_specs[105] }, | |||
39851 | { &sAttributes_disablers107, &sAttributes_specs[107] }, | |||
39852 | { &sAttributes_disablers109, &sAttributes_specs[109] }, | |||
39853 | { nullptr, &sAttributes_specs[111] }, | |||
39854 | { nullptr, nullptr } | |||
39855 | }; | |||
39856 | ||||
39857 | static_assert(17 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39858 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39859 | static_assert(75 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39860 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39861 | ||||
39862 | static const JSPropertySpec sChromeAttributes_specs[] = { | |||
39863 | JSPropertySpec::nativeAccessors("putForwardsAttr3", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &putForwardsAttr3_getterinfo, GenericSetter<NormalThisPolicy>, &putForwardsAttr3_setterinfo), | |||
39864 | JS_PS_ENDJSPropertySpec::sentinel() | |||
39865 | }; | |||
39866 | ||||
39867 | ||||
39868 | static const Prefable<const JSPropertySpec> sChromeAttributes[] = { | |||
39869 | { nullptr, &sChromeAttributes_specs[0] }, | |||
39870 | { nullptr, nullptr } | |||
39871 | }; | |||
39872 | ||||
39873 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39874 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39875 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39876 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39877 | ||||
39878 | static const JSFunctionSpec sUnforgeableMethods_specs[] = { | |||
39879 | JS_FNSPEC("unforgeableMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&unforgeableMethod_methodinfo), 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY, nullptr){JSFunctionSpec::Name("unforgeableMethod"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&unforgeableMethod_methodinfo)}, 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY, nullptr}, | |||
39880 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr } | |||
39881 | }; | |||
39882 | ||||
39883 | ||||
39884 | static const Prefable<const JSFunctionSpec> sUnforgeableMethods[] = { | |||
39885 | { nullptr, &sUnforgeableMethods_specs[0] }, | |||
39886 | { nullptr, nullptr } | |||
39887 | }; | |||
39888 | ||||
39889 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39890 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39891 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39892 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39893 | ||||
39894 | static const JSFunctionSpec sChromeUnforgeableMethods_specs[] = { | |||
39895 | JS_FNSPEC("unforgeableMethod2", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&unforgeableMethod2_methodinfo), 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY, nullptr){JSFunctionSpec::Name("unforgeableMethod2"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&unforgeableMethod2_methodinfo)}, 0, JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_READONLY, nullptr}, | |||
39896 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr } | |||
39897 | }; | |||
39898 | ||||
39899 | ||||
39900 | static const Prefable<const JSFunctionSpec> sChromeUnforgeableMethods[] = { | |||
39901 | { nullptr, &sChromeUnforgeableMethods_specs[0] }, | |||
39902 | { nullptr, nullptr } | |||
39903 | }; | |||
39904 | ||||
39905 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39906 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39907 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39908 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39909 | ||||
39910 | static const JSPropertySpec sUnforgeableAttributes_specs[] = { | |||
39911 | JSPropertySpec::nativeAccessors("unforgeableAttr", JSPROP_ENUMERATE | JSPROP_PERMANENT, GenericGetter<NormalThisPolicy, ThrowExceptions>, &unforgeableAttr_getterinfo, nullptr, nullptr), | |||
39912 | JS_PS_ENDJSPropertySpec::sentinel() | |||
39913 | }; | |||
39914 | ||||
39915 | ||||
39916 | static const Prefable<const JSPropertySpec> sUnforgeableAttributes[] = { | |||
39917 | { nullptr, &sUnforgeableAttributes_specs[0] }, | |||
39918 | { nullptr, nullptr } | |||
39919 | }; | |||
39920 | ||||
39921 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39922 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39923 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39924 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39925 | ||||
39926 | static const JSPropertySpec sChromeUnforgeableAttributes_specs[] = { | |||
39927 | JSPropertySpec::nativeAccessors("unforgeableAttr2", JSPROP_ENUMERATE | JSPROP_PERMANENT, GenericGetter<NormalThisPolicy, ThrowExceptions>, &unforgeableAttr2_getterinfo, nullptr, nullptr), | |||
39928 | JS_PS_ENDJSPropertySpec::sentinel() | |||
39929 | }; | |||
39930 | ||||
39931 | ||||
39932 | static const Prefable<const JSPropertySpec> sChromeUnforgeableAttributes[] = { | |||
39933 | { nullptr, &sChromeUnforgeableAttributes_specs[0] }, | |||
39934 | { nullptr, nullptr } | |||
39935 | }; | |||
39936 | ||||
39937 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39938 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39939 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39940 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39941 | ||||
39942 | static const ConstantSpec sConstants_specs[] = { | |||
39943 | { "myLongConstant", JS::Int32Value(5) }, | |||
39944 | { "nonEnumerableConst", JS::BooleanValue(true) }, | |||
39945 | { 0, JS::UndefinedValue() } | |||
39946 | }; | |||
39947 | ||||
39948 | ||||
39949 | static const Prefable<const ConstantSpec> sConstants[] = { | |||
39950 | { nullptr, &sConstants_specs[0] }, | |||
39951 | { nullptr, nullptr } | |||
39952 | }; | |||
39953 | ||||
39954 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
39955 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
39956 | static_assert(2 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
39957 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
39958 | ||||
39959 | ||||
39960 | static uint16_t sNativeProperties_sortedPropertyIndices[587]; | |||
39961 | static PropertyInfo sNativeProperties_propertyInfos[587]; | |||
39962 | ||||
39963 | static const NativePropertiesN<7> sNativeProperties = { | |||
39964 | true, 0 /* sStaticMethods */, | |||
39965 | true, 1 /* sStaticAttributes */, | |||
39966 | true, 2 /* sMethods */, | |||
39967 | true, 3 /* sAttributes */, | |||
39968 | true, 4 /* sUnforgeableMethods */, | |||
39969 | true, 5 /* sUnforgeableAttributes */, | |||
39970 | true, 6 /* sConstants */, | |||
39971 | -1, | |||
39972 | 587, | |||
39973 | sNativeProperties_sortedPropertyIndices, | |||
39974 | { | |||
39975 | { sStaticMethods, &sNativeProperties_propertyInfos[0] }, | |||
39976 | { sStaticAttributes, &sNativeProperties_propertyInfos[4] }, | |||
39977 | { sMethods, &sNativeProperties_propertyInfos[6] }, | |||
39978 | { sAttributes, &sNativeProperties_propertyInfos[464] }, | |||
39979 | { sUnforgeableMethods, &sNativeProperties_propertyInfos[583] }, | |||
39980 | { sUnforgeableAttributes, &sNativeProperties_propertyInfos[584] }, | |||
39981 | { sConstants, &sNativeProperties_propertyInfos[585] } | |||
39982 | } | |||
39983 | }; | |||
39984 | static_assert(587 < 1ull << (CHAR_BIT8 * sizeof(sNativeProperties.propertyInfoCount)), | |||
39985 | "We have a property info count that is oversized"); | |||
39986 | ||||
39987 | static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[3]; | |||
39988 | static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[3]; | |||
39989 | ||||
39990 | static const NativePropertiesN<3> sChromeOnlyNativeProperties = { | |||
39991 | false, 0, | |||
39992 | false, 0, | |||
39993 | false, 0, | |||
39994 | true, 0 /* sChromeAttributes */, | |||
39995 | true, 1 /* sChromeUnforgeableMethods */, | |||
39996 | true, 2 /* sChromeUnforgeableAttributes */, | |||
39997 | false, 0, | |||
39998 | -1, | |||
39999 | 3, | |||
40000 | sChromeOnlyNativeProperties_sortedPropertyIndices, | |||
40001 | { | |||
40002 | { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[0] }, | |||
40003 | { sChromeUnforgeableMethods, &sChromeOnlyNativeProperties_propertyInfos[1] }, | |||
40004 | { sChromeUnforgeableAttributes, &sChromeOnlyNativeProperties_propertyInfos[2] } | |||
40005 | } | |||
40006 | }; | |||
40007 | static_assert(3 < 1ull << (CHAR_BIT8 * sizeof(sChromeOnlyNativeProperties.propertyInfoCount)), | |||
40008 | "We have a property info count that is oversized"); | |||
40009 | ||||
40010 | MOZ_CAN_RUN_SCRIPT bool | |||
40011 | CollectJSONAttributes(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::TestExampleInterface* self, JS::Rooted<JSObject*>& result) | |||
40012 | { | |||
40013 | JS::Rooted<JSObject*> unwrappedObj(cx, js::CheckedUnwrapStatic(obj)); | |||
40014 | if (!unwrappedObj) { | |||
40015 | // How did that happen? We managed to get called with that | |||
40016 | // object as "this"! Just give up on sanity. | |||
40017 | return false; | |||
40018 | } | |||
40019 | ||||
40020 | { // scope for "temp" | |||
40021 | JS::Rooted<JS::Value> temp(cx); | |||
40022 | if (!get_readonlyByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40023 | return false; | |||
40024 | } | |||
40025 | if (!JS_DefineProperty(cx, result, "readonlyByte", temp, JSPROP_ENUMERATE)) { | |||
40026 | return false; | |||
40027 | } | |||
40028 | } | |||
40029 | { // scope for "temp" | |||
40030 | JS::Rooted<JS::Value> temp(cx); | |||
40031 | if (!get_writableByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40032 | return false; | |||
40033 | } | |||
40034 | if (!JS_DefineProperty(cx, result, "writableByte", temp, JSPROP_ENUMERATE)) { | |||
40035 | return false; | |||
40036 | } | |||
40037 | } | |||
40038 | { // scope for "temp" | |||
40039 | JS::Rooted<JS::Value> temp(cx); | |||
40040 | if (!get_cachedByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40041 | return false; | |||
40042 | } | |||
40043 | if (!JS_DefineProperty(cx, result, "cachedByte", temp, JSPROP_ENUMERATE)) { | |||
40044 | return false; | |||
40045 | } | |||
40046 | } | |||
40047 | { // scope for "temp" | |||
40048 | JS::Rooted<JS::Value> temp(cx); | |||
40049 | if (!get_cachedConstantByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40050 | return false; | |||
40051 | } | |||
40052 | if (!JS_DefineProperty(cx, result, "cachedConstantByte", temp, JSPROP_ENUMERATE)) { | |||
40053 | return false; | |||
40054 | } | |||
40055 | } | |||
40056 | { // scope for "temp" | |||
40057 | JS::Rooted<JS::Value> temp(cx); | |||
40058 | if (!get_cachedWritableByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40059 | return false; | |||
40060 | } | |||
40061 | if (!JS_DefineProperty(cx, result, "cachedWritableByte", temp, JSPROP_ENUMERATE)) { | |||
40062 | return false; | |||
40063 | } | |||
40064 | } | |||
40065 | { // scope for "temp" | |||
40066 | JS::Rooted<JS::Value> temp(cx); | |||
40067 | if (!get_sideEffectFreeByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40068 | return false; | |||
40069 | } | |||
40070 | if (!JS_DefineProperty(cx, result, "sideEffectFreeByte", temp, JSPROP_ENUMERATE)) { | |||
40071 | return false; | |||
40072 | } | |||
40073 | } | |||
40074 | { // scope for "temp" | |||
40075 | JS::Rooted<JS::Value> temp(cx); | |||
40076 | if (!get_domDependentByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40077 | return false; | |||
40078 | } | |||
40079 | if (!JS_DefineProperty(cx, result, "domDependentByte", temp, JSPROP_ENUMERATE)) { | |||
40080 | return false; | |||
40081 | } | |||
40082 | } | |||
40083 | { // scope for "temp" | |||
40084 | JS::Rooted<JS::Value> temp(cx); | |||
40085 | if (!get_constantByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40086 | return false; | |||
40087 | } | |||
40088 | if (!JS_DefineProperty(cx, result, "constantByte", temp, JSPROP_ENUMERATE)) { | |||
40089 | return false; | |||
40090 | } | |||
40091 | } | |||
40092 | { // scope for "temp" | |||
40093 | JS::Rooted<JS::Value> temp(cx); | |||
40094 | if (!get_deviceStateDependentByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40095 | return false; | |||
40096 | } | |||
40097 | if (!JS_DefineProperty(cx, result, "deviceStateDependentByte", temp, JSPROP_ENUMERATE)) { | |||
40098 | return false; | |||
40099 | } | |||
40100 | } | |||
40101 | { // scope for "temp" | |||
40102 | JS::Rooted<JS::Value> temp(cx); | |||
40103 | if (!get_readonlyShort(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40104 | return false; | |||
40105 | } | |||
40106 | if (!JS_DefineProperty(cx, result, "readonlyShort", temp, JSPROP_ENUMERATE)) { | |||
40107 | return false; | |||
40108 | } | |||
40109 | } | |||
40110 | { // scope for "temp" | |||
40111 | JS::Rooted<JS::Value> temp(cx); | |||
40112 | if (!get_writableShort(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40113 | return false; | |||
40114 | } | |||
40115 | if (!JS_DefineProperty(cx, result, "writableShort", temp, JSPROP_ENUMERATE)) { | |||
40116 | return false; | |||
40117 | } | |||
40118 | } | |||
40119 | { // scope for "temp" | |||
40120 | JS::Rooted<JS::Value> temp(cx); | |||
40121 | if (!get_readonlyLong(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40122 | return false; | |||
40123 | } | |||
40124 | if (!JS_DefineProperty(cx, result, "readonlyLong", temp, JSPROP_ENUMERATE)) { | |||
40125 | return false; | |||
40126 | } | |||
40127 | } | |||
40128 | { // scope for "temp" | |||
40129 | JS::Rooted<JS::Value> temp(cx); | |||
40130 | if (!get_writableLong(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40131 | return false; | |||
40132 | } | |||
40133 | if (!JS_DefineProperty(cx, result, "writableLong", temp, JSPROP_ENUMERATE)) { | |||
40134 | return false; | |||
40135 | } | |||
40136 | } | |||
40137 | { // scope for "temp" | |||
40138 | JS::Rooted<JS::Value> temp(cx); | |||
40139 | if (!get_readonlyLongLong(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40140 | return false; | |||
40141 | } | |||
40142 | if (!JS_DefineProperty(cx, result, "readonlyLongLong", temp, JSPROP_ENUMERATE)) { | |||
40143 | return false; | |||
40144 | } | |||
40145 | } | |||
40146 | { // scope for "temp" | |||
40147 | JS::Rooted<JS::Value> temp(cx); | |||
40148 | if (!get_writableLongLong(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40149 | return false; | |||
40150 | } | |||
40151 | if (!JS_DefineProperty(cx, result, "writableLongLong", temp, JSPROP_ENUMERATE)) { | |||
40152 | return false; | |||
40153 | } | |||
40154 | } | |||
40155 | { // scope for "temp" | |||
40156 | JS::Rooted<JS::Value> temp(cx); | |||
40157 | if (!get_readonlyOctet(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40158 | return false; | |||
40159 | } | |||
40160 | if (!JS_DefineProperty(cx, result, "readonlyOctet", temp, JSPROP_ENUMERATE)) { | |||
40161 | return false; | |||
40162 | } | |||
40163 | } | |||
40164 | { // scope for "temp" | |||
40165 | JS::Rooted<JS::Value> temp(cx); | |||
40166 | if (!get_writableOctet(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40167 | return false; | |||
40168 | } | |||
40169 | if (!JS_DefineProperty(cx, result, "writableOctet", temp, JSPROP_ENUMERATE)) { | |||
40170 | return false; | |||
40171 | } | |||
40172 | } | |||
40173 | { // scope for "temp" | |||
40174 | JS::Rooted<JS::Value> temp(cx); | |||
40175 | if (!get_readonlyUnsignedShort(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40176 | return false; | |||
40177 | } | |||
40178 | if (!JS_DefineProperty(cx, result, "readonlyUnsignedShort", temp, JSPROP_ENUMERATE)) { | |||
40179 | return false; | |||
40180 | } | |||
40181 | } | |||
40182 | { // scope for "temp" | |||
40183 | JS::Rooted<JS::Value> temp(cx); | |||
40184 | if (!get_writableUnsignedShort(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40185 | return false; | |||
40186 | } | |||
40187 | if (!JS_DefineProperty(cx, result, "writableUnsignedShort", temp, JSPROP_ENUMERATE)) { | |||
40188 | return false; | |||
40189 | } | |||
40190 | } | |||
40191 | { // scope for "temp" | |||
40192 | JS::Rooted<JS::Value> temp(cx); | |||
40193 | if (!get_readonlyUnsignedLong(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40194 | return false; | |||
40195 | } | |||
40196 | if (!JS_DefineProperty(cx, result, "readonlyUnsignedLong", temp, JSPROP_ENUMERATE)) { | |||
40197 | return false; | |||
40198 | } | |||
40199 | } | |||
40200 | { // scope for "temp" | |||
40201 | JS::Rooted<JS::Value> temp(cx); | |||
40202 | if (!get_writableUnsignedLong(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40203 | return false; | |||
40204 | } | |||
40205 | if (!JS_DefineProperty(cx, result, "writableUnsignedLong", temp, JSPROP_ENUMERATE)) { | |||
40206 | return false; | |||
40207 | } | |||
40208 | } | |||
40209 | { // scope for "temp" | |||
40210 | JS::Rooted<JS::Value> temp(cx); | |||
40211 | if (!get_readonlyUnsignedLongLong(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40212 | return false; | |||
40213 | } | |||
40214 | if (!JS_DefineProperty(cx, result, "readonlyUnsignedLongLong", temp, JSPROP_ENUMERATE)) { | |||
40215 | return false; | |||
40216 | } | |||
40217 | } | |||
40218 | { // scope for "temp" | |||
40219 | JS::Rooted<JS::Value> temp(cx); | |||
40220 | if (!get_writableUnsignedLongLong(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40221 | return false; | |||
40222 | } | |||
40223 | if (!JS_DefineProperty(cx, result, "writableUnsignedLongLong", temp, JSPROP_ENUMERATE)) { | |||
40224 | return false; | |||
40225 | } | |||
40226 | } | |||
40227 | { // scope for "temp" | |||
40228 | JS::Rooted<JS::Value> temp(cx); | |||
40229 | if (!get_writableFloat(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40230 | return false; | |||
40231 | } | |||
40232 | if (!JS_DefineProperty(cx, result, "writableFloat", temp, JSPROP_ENUMERATE)) { | |||
40233 | return false; | |||
40234 | } | |||
40235 | } | |||
40236 | { // scope for "temp" | |||
40237 | JS::Rooted<JS::Value> temp(cx); | |||
40238 | if (!get_writableUnrestrictedFloat(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40239 | return false; | |||
40240 | } | |||
40241 | if (!JS_DefineProperty(cx, result, "writableUnrestrictedFloat", temp, JSPROP_ENUMERATE)) { | |||
40242 | return false; | |||
40243 | } | |||
40244 | } | |||
40245 | { // scope for "temp" | |||
40246 | JS::Rooted<JS::Value> temp(cx); | |||
40247 | if (!get_writableNullableFloat(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40248 | return false; | |||
40249 | } | |||
40250 | if (!JS_DefineProperty(cx, result, "writableNullableFloat", temp, JSPROP_ENUMERATE)) { | |||
40251 | return false; | |||
40252 | } | |||
40253 | } | |||
40254 | { // scope for "temp" | |||
40255 | JS::Rooted<JS::Value> temp(cx); | |||
40256 | if (!get_writableNullableUnrestrictedFloat(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40257 | return false; | |||
40258 | } | |||
40259 | if (!JS_DefineProperty(cx, result, "writableNullableUnrestrictedFloat", temp, JSPROP_ENUMERATE)) { | |||
40260 | return false; | |||
40261 | } | |||
40262 | } | |||
40263 | { // scope for "temp" | |||
40264 | JS::Rooted<JS::Value> temp(cx); | |||
40265 | if (!get_writableDouble(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40266 | return false; | |||
40267 | } | |||
40268 | if (!JS_DefineProperty(cx, result, "writableDouble", temp, JSPROP_ENUMERATE)) { | |||
40269 | return false; | |||
40270 | } | |||
40271 | } | |||
40272 | { // scope for "temp" | |||
40273 | JS::Rooted<JS::Value> temp(cx); | |||
40274 | if (!get_writableUnrestrictedDouble(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40275 | return false; | |||
40276 | } | |||
40277 | if (!JS_DefineProperty(cx, result, "writableUnrestrictedDouble", temp, JSPROP_ENUMERATE)) { | |||
40278 | return false; | |||
40279 | } | |||
40280 | } | |||
40281 | { // scope for "temp" | |||
40282 | JS::Rooted<JS::Value> temp(cx); | |||
40283 | if (!get_writableNullableDouble(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40284 | return false; | |||
40285 | } | |||
40286 | if (!JS_DefineProperty(cx, result, "writableNullableDouble", temp, JSPROP_ENUMERATE)) { | |||
40287 | return false; | |||
40288 | } | |||
40289 | } | |||
40290 | { // scope for "temp" | |||
40291 | JS::Rooted<JS::Value> temp(cx); | |||
40292 | if (!get_writableNullableUnrestrictedDouble(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40293 | return false; | |||
40294 | } | |||
40295 | if (!JS_DefineProperty(cx, result, "writableNullableUnrestrictedDouble", temp, JSPROP_ENUMERATE)) { | |||
40296 | return false; | |||
40297 | } | |||
40298 | } | |||
40299 | { // scope for "temp" | |||
40300 | JS::Rooted<JS::Value> temp(cx); | |||
40301 | if (!get_lenientFloatAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40302 | return false; | |||
40303 | } | |||
40304 | if (!JS_DefineProperty(cx, result, "lenientFloatAttr", temp, JSPROP_ENUMERATE)) { | |||
40305 | return false; | |||
40306 | } | |||
40307 | } | |||
40308 | { // scope for "temp" | |||
40309 | JS::Rooted<JS::Value> temp(cx); | |||
40310 | if (!get_lenientDoubleAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40311 | return false; | |||
40312 | } | |||
40313 | if (!JS_DefineProperty(cx, result, "lenientDoubleAttr", temp, JSPROP_ENUMERATE)) { | |||
40314 | return false; | |||
40315 | } | |||
40316 | } | |||
40317 | { // scope for "temp" | |||
40318 | JS::Rooted<JS::Value> temp(cx); | |||
40319 | if (!get_nonNullSelf(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40320 | return false; | |||
40321 | } | |||
40322 | if (!JS_DefineProperty(cx, result, "nonNullSelf", temp, JSPROP_ENUMERATE)) { | |||
40323 | return false; | |||
40324 | } | |||
40325 | } | |||
40326 | { // scope for "temp" | |||
40327 | JS::Rooted<JS::Value> temp(cx); | |||
40328 | if (!get_nullableSelf(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40329 | return false; | |||
40330 | } | |||
40331 | if (!JS_DefineProperty(cx, result, "nullableSelf", temp, JSPROP_ENUMERATE)) { | |||
40332 | return false; | |||
40333 | } | |||
40334 | } | |||
40335 | { // scope for "temp" | |||
40336 | JS::Rooted<JS::Value> temp(cx); | |||
40337 | if (!get_cachedSelf(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40338 | return false; | |||
40339 | } | |||
40340 | if (!JS_DefineProperty(cx, result, "cachedSelf", temp, JSPROP_ENUMERATE)) { | |||
40341 | return false; | |||
40342 | } | |||
40343 | } | |||
40344 | { // scope for "temp" | |||
40345 | JS::Rooted<JS::Value> temp(cx); | |||
40346 | if (!get_readonlySequence(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40347 | return false; | |||
40348 | } | |||
40349 | if (!JS_DefineProperty(cx, result, "readonlySequence", temp, JSPROP_ENUMERATE)) { | |||
40350 | return false; | |||
40351 | } | |||
40352 | } | |||
40353 | { // scope for "temp" | |||
40354 | JS::Rooted<JS::Value> temp(cx); | |||
40355 | if (!get_readonlyFrozenSequence(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40356 | return false; | |||
40357 | } | |||
40358 | if (!JS_DefineProperty(cx, result, "readonlyFrozenSequence", temp, JSPROP_ENUMERATE)) { | |||
40359 | return false; | |||
40360 | } | |||
40361 | } | |||
40362 | { // scope for "temp" | |||
40363 | JS::Rooted<JS::Value> temp(cx); | |||
40364 | if (!get_readonlyFrozenNullableSequence(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40365 | return false; | |||
40366 | } | |||
40367 | if (!JS_DefineProperty(cx, result, "readonlyFrozenNullableSequence", temp, JSPROP_ENUMERATE)) { | |||
40368 | return false; | |||
40369 | } | |||
40370 | } | |||
40371 | { // scope for "temp" | |||
40372 | JS::Rooted<JS::Value> temp(cx); | |||
40373 | if (!get_readonlyJSStringAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40374 | return false; | |||
40375 | } | |||
40376 | if (!JS_DefineProperty(cx, result, "readonlyJSStringAttr", temp, JSPROP_ENUMERATE)) { | |||
40377 | return false; | |||
40378 | } | |||
40379 | } | |||
40380 | { // scope for "temp" | |||
40381 | JS::Rooted<JS::Value> temp(cx); | |||
40382 | if (!get_jsStringAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40383 | return false; | |||
40384 | } | |||
40385 | if (!JS_DefineProperty(cx, result, "jsStringAttr", temp, JSPROP_ENUMERATE)) { | |||
40386 | return false; | |||
40387 | } | |||
40388 | } | |||
40389 | { // scope for "temp" | |||
40390 | JS::Rooted<JS::Value> temp(cx); | |||
40391 | if (!get_enumAttribute(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40392 | return false; | |||
40393 | } | |||
40394 | if (!JS_DefineProperty(cx, result, "enumAttribute", temp, JSPROP_ENUMERATE)) { | |||
40395 | return false; | |||
40396 | } | |||
40397 | } | |||
40398 | { // scope for "temp" | |||
40399 | JS::Rooted<JS::Value> temp(cx); | |||
40400 | if (!get_readonlyEnumAttribute(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40401 | return false; | |||
40402 | } | |||
40403 | if (!JS_DefineProperty(cx, result, "readonlyEnumAttribute", temp, JSPROP_ENUMERATE)) { | |||
40404 | return false; | |||
40405 | } | |||
40406 | } | |||
40407 | { // scope for "temp" | |||
40408 | JS::Rooted<JS::Value> temp(cx); | |||
40409 | if (!get_booleanObservableArray(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40410 | return false; | |||
40411 | } | |||
40412 | if (!JS_DefineProperty(cx, result, "booleanObservableArray", temp, JSPROP_ENUMERATE)) { | |||
40413 | return false; | |||
40414 | } | |||
40415 | } | |||
40416 | { // scope for "temp" | |||
40417 | JS::Rooted<JS::Value> temp(cx); | |||
40418 | if (!get_objectObservableArray(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40419 | return false; | |||
40420 | } | |||
40421 | if (!JS_DefineProperty(cx, result, "objectObservableArray", temp, JSPROP_ENUMERATE)) { | |||
40422 | return false; | |||
40423 | } | |||
40424 | } | |||
40425 | { // scope for "temp" | |||
40426 | JS::Rooted<JS::Value> temp(cx); | |||
40427 | if (!get_interfaceObservableArray(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40428 | return false; | |||
40429 | } | |||
40430 | if (!JS_DefineProperty(cx, result, "interfaceObservableArray", temp, JSPROP_ENUMERATE)) { | |||
40431 | return false; | |||
40432 | } | |||
40433 | } | |||
40434 | { // scope for "temp" | |||
40435 | JS::Rooted<JS::Value> temp(cx); | |||
40436 | if (!get_nullableObservableArray(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40437 | return false; | |||
40438 | } | |||
40439 | if (!JS_DefineProperty(cx, result, "nullableObservableArray", temp, JSPROP_ENUMERATE)) { | |||
40440 | return false; | |||
40441 | } | |||
40442 | } | |||
40443 | { // scope for "temp" | |||
40444 | JS::Rooted<JS::Value> temp(cx); | |||
40445 | if (!get_attributeGetterRenamedFrom(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40446 | return false; | |||
40447 | } | |||
40448 | if (!JS_DefineProperty(cx, result, "attributeGetterRenamedFrom", temp, JSPROP_ENUMERATE)) { | |||
40449 | return false; | |||
40450 | } | |||
40451 | } | |||
40452 | { // scope for "temp" | |||
40453 | JS::Rooted<JS::Value> temp(cx); | |||
40454 | if (!get_attributeRenamedFrom(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40455 | return false; | |||
40456 | } | |||
40457 | if (!JS_DefineProperty(cx, result, "attributeRenamedFrom", temp, JSPROP_ENUMERATE)) { | |||
40458 | return false; | |||
40459 | } | |||
40460 | } | |||
40461 | { // scope for "temp" | |||
40462 | JS::Rooted<JS::Value> temp(cx); | |||
40463 | if (!get_enforcedByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40464 | return false; | |||
40465 | } | |||
40466 | if (!JS_DefineProperty(cx, result, "enforcedByte", temp, JSPROP_ENUMERATE)) { | |||
40467 | return false; | |||
40468 | } | |||
40469 | } | |||
40470 | { // scope for "temp" | |||
40471 | JS::Rooted<JS::Value> temp(cx); | |||
40472 | if (!get_enforcedByteNullable(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40473 | return false; | |||
40474 | } | |||
40475 | if (!JS_DefineProperty(cx, result, "enforcedByteNullable", temp, JSPROP_ENUMERATE)) { | |||
40476 | return false; | |||
40477 | } | |||
40478 | } | |||
40479 | { // scope for "temp" | |||
40480 | JS::Rooted<JS::Value> temp(cx); | |||
40481 | if (!get_clampedByte(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40482 | return false; | |||
40483 | } | |||
40484 | if (!JS_DefineProperty(cx, result, "clampedByte", temp, JSPROP_ENUMERATE)) { | |||
40485 | return false; | |||
40486 | } | |||
40487 | } | |||
40488 | { // scope for "temp" | |||
40489 | JS::Rooted<JS::Value> temp(cx); | |||
40490 | if (!get_clampedByteNullable(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40491 | return false; | |||
40492 | } | |||
40493 | if (!JS_DefineProperty(cx, result, "clampedByteNullable", temp, JSPROP_ENUMERATE)) { | |||
40494 | return false; | |||
40495 | } | |||
40496 | } | |||
40497 | { // scope for "temp" | |||
40498 | JS::Rooted<JS::Value> temp(cx); | |||
40499 | if (!get_deprecatedAttribute(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40500 | return false; | |||
40501 | } | |||
40502 | if (!JS_DefineProperty(cx, result, "deprecatedAttribute", temp, JSPROP_ENUMERATE)) { | |||
40503 | return false; | |||
40504 | } | |||
40505 | } | |||
40506 | // This is unfortunately a linear scan through sAttributes, but we | |||
40507 | // only do it for things which _might_ be disabled, which should | |||
40508 | // help keep the performance problems down. | |||
40509 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable1, sAttributes)) { | |||
40510 | JS::Rooted<JS::Value> temp(cx); | |||
40511 | if (!get_prefable1(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40512 | return false; | |||
40513 | } | |||
40514 | if (!JS_DefineProperty(cx, result, "prefable1", temp, JSPROP_ENUMERATE)) { | |||
40515 | return false; | |||
40516 | } | |||
40517 | } | |||
40518 | // This is unfortunately a linear scan through sAttributes, but we | |||
40519 | // only do it for things which _might_ be disabled, which should | |||
40520 | // help keep the performance problems down. | |||
40521 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable2, sAttributes)) { | |||
40522 | JS::Rooted<JS::Value> temp(cx); | |||
40523 | if (!get_prefable2(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40524 | return false; | |||
40525 | } | |||
40526 | if (!JS_DefineProperty(cx, result, "prefable2", temp, JSPROP_ENUMERATE)) { | |||
40527 | return false; | |||
40528 | } | |||
40529 | } | |||
40530 | // This is unfortunately a linear scan through sAttributes, but we | |||
40531 | // only do it for things which _might_ be disabled, which should | |||
40532 | // help keep the performance problems down. | |||
40533 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable3, sAttributes)) { | |||
40534 | JS::Rooted<JS::Value> temp(cx); | |||
40535 | if (!get_prefable3(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40536 | return false; | |||
40537 | } | |||
40538 | if (!JS_DefineProperty(cx, result, "prefable3", temp, JSPROP_ENUMERATE)) { | |||
40539 | return false; | |||
40540 | } | |||
40541 | } | |||
40542 | // This is unfortunately a linear scan through sAttributes, but we | |||
40543 | // only do it for things which _might_ be disabled, which should | |||
40544 | // help keep the performance problems down. | |||
40545 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable4, sAttributes)) { | |||
40546 | JS::Rooted<JS::Value> temp(cx); | |||
40547 | if (!get_prefable4(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40548 | return false; | |||
40549 | } | |||
40550 | if (!JS_DefineProperty(cx, result, "prefable4", temp, JSPROP_ENUMERATE)) { | |||
40551 | return false; | |||
40552 | } | |||
40553 | } | |||
40554 | // This is unfortunately a linear scan through sAttributes, but we | |||
40555 | // only do it for things which _might_ be disabled, which should | |||
40556 | // help keep the performance problems down. | |||
40557 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable5, sAttributes)) { | |||
40558 | JS::Rooted<JS::Value> temp(cx); | |||
40559 | if (!get_prefable5(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40560 | return false; | |||
40561 | } | |||
40562 | if (!JS_DefineProperty(cx, result, "prefable5", temp, JSPROP_ENUMERATE)) { | |||
40563 | return false; | |||
40564 | } | |||
40565 | } | |||
40566 | // This is unfortunately a linear scan through sAttributes, but we | |||
40567 | // only do it for things which _might_ be disabled, which should | |||
40568 | // help keep the performance problems down. | |||
40569 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable6, sAttributes)) { | |||
40570 | JS::Rooted<JS::Value> temp(cx); | |||
40571 | if (!get_prefable6(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40572 | return false; | |||
40573 | } | |||
40574 | if (!JS_DefineProperty(cx, result, "prefable6", temp, JSPROP_ENUMERATE)) { | |||
40575 | return false; | |||
40576 | } | |||
40577 | } | |||
40578 | // This is unfortunately a linear scan through sAttributes, but we | |||
40579 | // only do it for things which _might_ be disabled, which should | |||
40580 | // help keep the performance problems down. | |||
40581 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable7, sAttributes)) { | |||
40582 | JS::Rooted<JS::Value> temp(cx); | |||
40583 | if (!get_prefable7(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40584 | return false; | |||
40585 | } | |||
40586 | if (!JS_DefineProperty(cx, result, "prefable7", temp, JSPROP_ENUMERATE)) { | |||
40587 | return false; | |||
40588 | } | |||
40589 | } | |||
40590 | // This is unfortunately a linear scan through sAttributes, but we | |||
40591 | // only do it for things which _might_ be disabled, which should | |||
40592 | // help keep the performance problems down. | |||
40593 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable8, sAttributes)) { | |||
40594 | JS::Rooted<JS::Value> temp(cx); | |||
40595 | if (!get_prefable8(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40596 | return false; | |||
40597 | } | |||
40598 | if (!JS_DefineProperty(cx, result, "prefable8", temp, JSPROP_ENUMERATE)) { | |||
40599 | return false; | |||
40600 | } | |||
40601 | } | |||
40602 | // This is unfortunately a linear scan through sAttributes, but we | |||
40603 | // only do it for things which _might_ be disabled, which should | |||
40604 | // help keep the performance problems down. | |||
40605 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable9, sAttributes)) { | |||
40606 | JS::Rooted<JS::Value> temp(cx); | |||
40607 | if (!get_prefable9(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40608 | return false; | |||
40609 | } | |||
40610 | if (!JS_DefineProperty(cx, result, "prefable9", temp, JSPROP_ENUMERATE)) { | |||
40611 | return false; | |||
40612 | } | |||
40613 | } | |||
40614 | // This is unfortunately a linear scan through sAttributes, but we | |||
40615 | // only do it for things which _might_ be disabled, which should | |||
40616 | // help keep the performance problems down. | |||
40617 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable12, sAttributes)) { | |||
40618 | JS::Rooted<JS::Value> temp(cx); | |||
40619 | if (!get_prefable12(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40620 | return false; | |||
40621 | } | |||
40622 | if (!JS_DefineProperty(cx, result, "prefable12", temp, JSPROP_ENUMERATE)) { | |||
40623 | return false; | |||
40624 | } | |||
40625 | } | |||
40626 | // This is unfortunately a linear scan through sAttributes, but we | |||
40627 | // only do it for things which _might_ be disabled, which should | |||
40628 | // help keep the performance problems down. | |||
40629 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable14, sAttributes)) { | |||
40630 | JS::Rooted<JS::Value> temp(cx); | |||
40631 | if (!get_prefable14(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40632 | return false; | |||
40633 | } | |||
40634 | if (!JS_DefineProperty(cx, result, "prefable14", temp, JSPROP_ENUMERATE)) { | |||
40635 | return false; | |||
40636 | } | |||
40637 | } | |||
40638 | // This is unfortunately a linear scan through sAttributes, but we | |||
40639 | // only do it for things which _might_ be disabled, which should | |||
40640 | // help keep the performance problems down. | |||
40641 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable15, sAttributes)) { | |||
40642 | JS::Rooted<JS::Value> temp(cx); | |||
40643 | if (!get_prefable15(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40644 | return false; | |||
40645 | } | |||
40646 | if (!JS_DefineProperty(cx, result, "prefable15", temp, JSPROP_ENUMERATE)) { | |||
40647 | return false; | |||
40648 | } | |||
40649 | } | |||
40650 | // This is unfortunately a linear scan through sAttributes, but we | |||
40651 | // only do it for things which _might_ be disabled, which should | |||
40652 | // help keep the performance problems down. | |||
40653 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable16, sAttributes)) { | |||
40654 | JS::Rooted<JS::Value> temp(cx); | |||
40655 | if (!get_prefable16(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40656 | return false; | |||
40657 | } | |||
40658 | if (!JS_DefineProperty(cx, result, "prefable16", temp, JSPROP_ENUMERATE)) { | |||
40659 | return false; | |||
40660 | } | |||
40661 | } | |||
40662 | // This is unfortunately a linear scan through sAttributes, but we | |||
40663 | // only do it for things which _might_ be disabled, which should | |||
40664 | // help keep the performance problems down. | |||
40665 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable21, sAttributes)) { | |||
40666 | JS::Rooted<JS::Value> temp(cx); | |||
40667 | if (!get_prefable21(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40668 | return false; | |||
40669 | } | |||
40670 | if (!JS_DefineProperty(cx, result, "prefable21", temp, JSPROP_ENUMERATE)) { | |||
40671 | return false; | |||
40672 | } | |||
40673 | } | |||
40674 | // This is unfortunately a linear scan through sAttributes, but we | |||
40675 | // only do it for things which _might_ be disabled, which should | |||
40676 | // help keep the performance problems down. | |||
40677 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_prefable22, sAttributes)) { | |||
40678 | JS::Rooted<JS::Value> temp(cx); | |||
40679 | if (!get_prefable22(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40680 | return false; | |||
40681 | } | |||
40682 | if (!JS_DefineProperty(cx, result, "prefable22", temp, JSPROP_ENUMERATE)) { | |||
40683 | return false; | |||
40684 | } | |||
40685 | } | |||
40686 | // This is unfortunately a linear scan through sAttributes, but we | |||
40687 | // only do it for things which _might_ be disabled, which should | |||
40688 | // help keep the performance problems down. | |||
40689 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_conditionalOnSecureContext1, sAttributes)) { | |||
40690 | JS::Rooted<JS::Value> temp(cx); | |||
40691 | if (!get_conditionalOnSecureContext1(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40692 | return false; | |||
40693 | } | |||
40694 | if (!JS_DefineProperty(cx, result, "conditionalOnSecureContext1", temp, JSPROP_ENUMERATE)) { | |||
40695 | return false; | |||
40696 | } | |||
40697 | } | |||
40698 | // This is unfortunately a linear scan through sAttributes, but we | |||
40699 | // only do it for things which _might_ be disabled, which should | |||
40700 | // help keep the performance problems down. | |||
40701 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_conditionalOnSecureContext2, sAttributes)) { | |||
40702 | JS::Rooted<JS::Value> temp(cx); | |||
40703 | if (!get_conditionalOnSecureContext2(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40704 | return false; | |||
40705 | } | |||
40706 | if (!JS_DefineProperty(cx, result, "conditionalOnSecureContext2", temp, JSPROP_ENUMERATE)) { | |||
40707 | return false; | |||
40708 | } | |||
40709 | } | |||
40710 | // This is unfortunately a linear scan through sAttributes, but we | |||
40711 | // only do it for things which _might_ be disabled, which should | |||
40712 | // help keep the performance problems down. | |||
40713 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_conditionalOnSecureContext3, sAttributes)) { | |||
40714 | JS::Rooted<JS::Value> temp(cx); | |||
40715 | if (!get_conditionalOnSecureContext3(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40716 | return false; | |||
40717 | } | |||
40718 | if (!JS_DefineProperty(cx, result, "conditionalOnSecureContext3", temp, JSPROP_ENUMERATE)) { | |||
40719 | return false; | |||
40720 | } | |||
40721 | } | |||
40722 | // This is unfortunately a linear scan through sAttributes, but we | |||
40723 | // only do it for things which _might_ be disabled, which should | |||
40724 | // help keep the performance problems down. | |||
40725 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_conditionalOnSecureContext4, sAttributes)) { | |||
40726 | JS::Rooted<JS::Value> temp(cx); | |||
40727 | if (!get_conditionalOnSecureContext4(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40728 | return false; | |||
40729 | } | |||
40730 | if (!JS_DefineProperty(cx, result, "conditionalOnSecureContext4", temp, JSPROP_ENUMERATE)) { | |||
40731 | return false; | |||
40732 | } | |||
40733 | } | |||
40734 | // This is unfortunately a linear scan through sAttributes, but we | |||
40735 | // only do it for things which _might_ be disabled, which should | |||
40736 | // help keep the performance problems down. | |||
40737 | if (IsGetterEnabled(cx, unwrappedObj, (JSJitGetterOp)get_conditionalOnSecureContext9, sAttributes)) { | |||
40738 | JS::Rooted<JS::Value> temp(cx); | |||
40739 | if (!get_conditionalOnSecureContext9(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40740 | return false; | |||
40741 | } | |||
40742 | if (!JS_DefineProperty(cx, result, "conditionalOnSecureContext9", temp, JSPROP_ENUMERATE)) { | |||
40743 | return false; | |||
40744 | } | |||
40745 | } | |||
40746 | { // scope for "temp" | |||
40747 | JS::Rooted<JS::Value> temp(cx); | |||
40748 | if (!get_attrWithLenientThis(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40749 | return false; | |||
40750 | } | |||
40751 | if (!JS_DefineProperty(cx, result, "attrWithLenientThis", temp, JSPROP_ENUMERATE)) { | |||
40752 | return false; | |||
40753 | } | |||
40754 | } | |||
40755 | { // scope for "temp" | |||
40756 | JS::Rooted<JS::Value> temp(cx); | |||
40757 | if (!get_unforgeableAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40758 | return false; | |||
40759 | } | |||
40760 | if (!JS_DefineProperty(cx, result, "unforgeableAttr", temp, JSPROP_ENUMERATE)) { | |||
40761 | return false; | |||
40762 | } | |||
40763 | } | |||
40764 | { // scope for "temp" | |||
40765 | JS::Rooted<JS::Value> temp(cx); | |||
40766 | if (!get_unforgeableAttr2(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40767 | return false; | |||
40768 | } | |||
40769 | if (!JS_DefineProperty(cx, result, "unforgeableAttr2", temp, JSPROP_ENUMERATE)) { | |||
40770 | return false; | |||
40771 | } | |||
40772 | } | |||
40773 | { // scope for "temp" | |||
40774 | JS::Rooted<JS::Value> temp(cx); | |||
40775 | if (!get_putForwardsAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40776 | return false; | |||
40777 | } | |||
40778 | if (!JS_DefineProperty(cx, result, "putForwardsAttr", temp, JSPROP_ENUMERATE)) { | |||
40779 | return false; | |||
40780 | } | |||
40781 | } | |||
40782 | { // scope for "temp" | |||
40783 | JS::Rooted<JS::Value> temp(cx); | |||
40784 | if (!get_putForwardsAttr2(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40785 | return false; | |||
40786 | } | |||
40787 | if (!JS_DefineProperty(cx, result, "putForwardsAttr2", temp, JSPROP_ENUMERATE)) { | |||
40788 | return false; | |||
40789 | } | |||
40790 | } | |||
40791 | { // scope for "temp" | |||
40792 | JS::Rooted<JS::Value> temp(cx); | |||
40793 | if (!get_putForwardsAttr3(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40794 | return false; | |||
40795 | } | |||
40796 | if (!JS_DefineProperty(cx, result, "putForwardsAttr3", temp, JSPROP_ENUMERATE)) { | |||
40797 | return false; | |||
40798 | } | |||
40799 | } | |||
40800 | { // scope for "temp" | |||
40801 | JS::Rooted<JS::Value> temp(cx); | |||
40802 | if (!get_throwingAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40803 | return false; | |||
40804 | } | |||
40805 | if (!JS_DefineProperty(cx, result, "throwingAttr", temp, JSPROP_ENUMERATE)) { | |||
40806 | return false; | |||
40807 | } | |||
40808 | } | |||
40809 | { // scope for "temp" | |||
40810 | JS::Rooted<JS::Value> temp(cx); | |||
40811 | if (!get_throwingGetterAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40812 | return false; | |||
40813 | } | |||
40814 | if (!JS_DefineProperty(cx, result, "throwingGetterAttr", temp, JSPROP_ENUMERATE)) { | |||
40815 | return false; | |||
40816 | } | |||
40817 | } | |||
40818 | { // scope for "temp" | |||
40819 | JS::Rooted<JS::Value> temp(cx); | |||
40820 | if (!get_throwingSetterAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40821 | return false; | |||
40822 | } | |||
40823 | if (!JS_DefineProperty(cx, result, "throwingSetterAttr", temp, JSPROP_ENUMERATE)) { | |||
40824 | return false; | |||
40825 | } | |||
40826 | } | |||
40827 | { // scope for "temp" | |||
40828 | JS::Rooted<JS::Value> temp(cx); | |||
40829 | if (!get_canOOMAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40830 | return false; | |||
40831 | } | |||
40832 | if (!JS_DefineProperty(cx, result, "canOOMAttr", temp, JSPROP_ENUMERATE)) { | |||
40833 | return false; | |||
40834 | } | |||
40835 | } | |||
40836 | { // scope for "temp" | |||
40837 | JS::Rooted<JS::Value> temp(cx); | |||
40838 | if (!get_canOOMGetterAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40839 | return false; | |||
40840 | } | |||
40841 | if (!JS_DefineProperty(cx, result, "canOOMGetterAttr", temp, JSPROP_ENUMERATE)) { | |||
40842 | return false; | |||
40843 | } | |||
40844 | } | |||
40845 | { // scope for "temp" | |||
40846 | JS::Rooted<JS::Value> temp(cx); | |||
40847 | if (!get_canOOMSetterAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40848 | return false; | |||
40849 | } | |||
40850 | if (!JS_DefineProperty(cx, result, "canOOMSetterAttr", temp, JSPROP_ENUMERATE)) { | |||
40851 | return false; | |||
40852 | } | |||
40853 | } | |||
40854 | { // scope for "temp" | |||
40855 | JS::Rooted<JS::Value> temp(cx); | |||
40856 | if (!get_needsSubjectPrincipalAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40857 | return false; | |||
40858 | } | |||
40859 | if (!JS_DefineProperty(cx, result, "needsSubjectPrincipalAttr", temp, JSPROP_ENUMERATE)) { | |||
40860 | return false; | |||
40861 | } | |||
40862 | } | |||
40863 | { // scope for "temp" | |||
40864 | JS::Rooted<JS::Value> temp(cx); | |||
40865 | if (!get_needsNonSystemSubjectPrincipalAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40866 | return false; | |||
40867 | } | |||
40868 | if (!JS_DefineProperty(cx, result, "needsNonSystemSubjectPrincipalAttr", temp, JSPROP_ENUMERATE)) { | |||
40869 | return false; | |||
40870 | } | |||
40871 | } | |||
40872 | { // scope for "temp" | |||
40873 | JS::Rooted<JS::Value> temp(cx); | |||
40874 | if (!get_needsCallerTypeAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40875 | return false; | |||
40876 | } | |||
40877 | if (!JS_DefineProperty(cx, result, "needsCallerTypeAttr", temp, JSPROP_ENUMERATE)) { | |||
40878 | return false; | |||
40879 | } | |||
40880 | } | |||
40881 | { // scope for "temp" | |||
40882 | JS::Rooted<JS::Value> temp(cx); | |||
40883 | if (!get_ceReactionsAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40884 | return false; | |||
40885 | } | |||
40886 | if (!JS_DefineProperty(cx, result, "ceReactionsAttr", temp, JSPROP_ENUMERATE)) { | |||
40887 | return false; | |||
40888 | } | |||
40889 | } | |||
40890 | { // scope for "temp" | |||
40891 | JS::Rooted<JS::Value> temp(cx); | |||
40892 | if (!get_dashed_attribute(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40893 | return false; | |||
40894 | } | |||
40895 | if (!JS_DefineProperty(cx, result, "dashed_attribute", temp, JSPROP_ENUMERATE)) { | |||
40896 | return false; | |||
40897 | } | |||
40898 | } | |||
40899 | { // scope for "temp" | |||
40900 | JS::Rooted<JS::Value> temp(cx); | |||
40901 | if (!get_nonEnumerableAttr(cx, obj, self, JSJitGetterCallArgs(&temp))) { | |||
40902 | return false; | |||
40903 | } | |||
40904 | if (!JS_DefineProperty(cx, result, "nonEnumerableAttr", temp, JSPROP_ENUMERATE)) { | |||
40905 | return false; | |||
40906 | } | |||
40907 | } | |||
40908 | return true; | |||
40909 | } | |||
40910 | ||||
40911 | // This may allocate too many slots, because we only really need | |||
40912 | // slots for our non-interface-typed members that we cache. But | |||
40913 | // allocating slots only for those would make the slot index | |||
40914 | // computations much more complicated, so let's do this the simple | |||
40915 | // way for now. | |||
40916 | DEFINE_XRAY_EXPANDO_CLASS(static, sXrayExpandoObjectClass, 21)static const JSClass sXrayExpandoObjectClass = { "XrayExpandoObject" , JSCLASS_HAS_RESERVED_SLOTS(xpc::JSSLOT_EXPANDO_COUNT + (21) ) | JSCLASS_FOREGROUND_FINALIZE, &xpc::XrayExpandoObjectClassOps }; | |||
40917 | ||||
40918 | bool sNativePropertiesInited = false; | |||
40919 | const NativePropertyHooks sNativePropertyHooks = { | |||
40920 | nullptr, | |||
40921 | { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast(), &sNativePropertiesInited }, | |||
40922 | prototypes::id::TestExampleInterface, | |||
40923 | constructors::id::TestExampleInterface, | |||
40924 | &sXrayExpandoObjectClass | |||
40925 | }; | |||
40926 | ||||
40927 | static bool | |||
40928 | _constructor(JSContext* cx_, unsigned argc, JS::Value* vp) | |||
40929 | { | |||
40930 | BindingCallContext cx(cx_, "TestExampleInterface constructor"); | |||
40931 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject40933( cx, "TestExampleInterface" , "constructor", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
40932 | "TestExampleInterface", "constructor", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject40933( cx, "TestExampleInterface" , "constructor", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
40933 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject40933( cx, "TestExampleInterface" , "constructor", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
40934 | ||||
40935 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
40936 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
40937 | if (!args.isConstructing()) { | |||
40938 | return ThrowConstructorWithoutNew(cx, "TestExampleInterface"); | |||
40939 | } | |||
40940 | ||||
40941 | JS::Rooted<JSObject*> desiredProto(cx); | |||
40942 | if (!GetDesiredProto(cx, args, | |||
40943 | prototypes::id::TestExampleInterface, | |||
40944 | CreateInterfaceObjects, | |||
40945 | &desiredProto)) { | |||
40946 | return false; | |||
40947 | } | |||
40948 | ||||
40949 | unsigned argcount = std::min(args.length(), 2u); | |||
40950 | switch (argcount) { | |||
40951 | case 0: { | |||
40952 | GlobalObject global(cx, obj); | |||
40953 | if (global.Failed()) { | |||
40954 | return false; | |||
40955 | } | |||
40956 | ||||
40957 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
40958 | Maybe<JSAutoRealm> ar; | |||
40959 | if (objIsXray) { | |||
40960 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
40961 | // we know Xrays have no dynamic unwrap behavior. | |||
40962 | obj = js::CheckedUnwrapStatic(obj); | |||
40963 | if (!obj) { | |||
40964 | return false; | |||
40965 | } | |||
40966 | ar.emplace(cx, obj); | |||
40967 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
40968 | return false; | |||
40969 | } | |||
40970 | } | |||
40971 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Constructor(global))); | |||
40972 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 40972); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 40972; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
40973 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
40974 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
40975 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
40976 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 40976); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 40976; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
40977 | return false; | |||
40978 | } | |||
40979 | return true; | |||
40980 | break; | |||
40981 | } | |||
40982 | case 1: { | |||
40983 | if (args[0].isNullOrUndefined()) { | |||
40984 | mozilla::dom::TestInterface* arg0; | |||
40985 | arg0 = nullptr; | |||
40986 | GlobalObject global(cx, obj); | |||
40987 | if (global.Failed()) { | |||
40988 | return false; | |||
40989 | } | |||
40990 | ||||
40991 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
40992 | Maybe<JSAutoRealm> ar; | |||
40993 | if (objIsXray) { | |||
40994 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
40995 | // we know Xrays have no dynamic unwrap behavior. | |||
40996 | obj = js::CheckedUnwrapStatic(obj); | |||
40997 | if (!obj) { | |||
40998 | return false; | |||
40999 | } | |||
41000 | ar.emplace(cx, obj); | |||
41001 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
41002 | return false; | |||
41003 | } | |||
41004 | } | |||
41005 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Constructor(global, MOZ_KnownLive(Constify(arg0))(Constify(arg0))))); | |||
41006 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41006); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41006; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41007 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
41008 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
41009 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
41010 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41010); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 41010; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41011 | return false; | |||
41012 | } | |||
41013 | return true; | |||
41014 | } | |||
41015 | if (args[0].isObject()) { | |||
41016 | do { | |||
41017 | mozilla::dom::TestInterface* arg0; | |||
41018 | { | |||
41019 | // Our JSContext should be in the right global to do unwrapping in. | |||
41020 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
41021 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
41022 | break; | |||
41023 | } | |||
41024 | } | |||
41025 | GlobalObject global(cx, obj); | |||
41026 | if (global.Failed()) { | |||
41027 | return false; | |||
41028 | } | |||
41029 | ||||
41030 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
41031 | Maybe<JSAutoRealm> ar; | |||
41032 | if (objIsXray) { | |||
41033 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
41034 | // we know Xrays have no dynamic unwrap behavior. | |||
41035 | obj = js::CheckedUnwrapStatic(obj); | |||
41036 | if (!obj) { | |||
41037 | return false; | |||
41038 | } | |||
41039 | ar.emplace(cx, obj); | |||
41040 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
41041 | return false; | |||
41042 | } | |||
41043 | } | |||
41044 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Constructor(global, MOZ_KnownLive(Constify(arg0))(Constify(arg0))))); | |||
41045 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41045); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41045; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41046 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
41047 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
41048 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
41049 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41049); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 41049; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41050 | return false; | |||
41051 | } | |||
41052 | return true; | |||
41053 | } while (false); | |||
41054 | do { | |||
41055 | RootedSpiderMonkeyInterface<ArrayBuffer> arg0(cx); | |||
41056 | if (!arg0.Init(&args[0].toObject())) { | |||
41057 | break; | |||
41058 | } | |||
41059 | if (JS::IsSharedArrayBufferObject(arg0.Obj())) { | |||
41060 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
41061 | return false; | |||
41062 | } | |||
41063 | if (JS::IsLargeArrayBufferMaybeShared(arg0.Obj())) { | |||
41064 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
41065 | return false; | |||
41066 | } | |||
41067 | if (JS::IsResizableArrayBufferMaybeShared(arg0.Obj())) { | |||
41068 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
41069 | return false; | |||
41070 | } | |||
41071 | GlobalObject global(cx, obj); | |||
41072 | if (global.Failed()) { | |||
41073 | return false; | |||
41074 | } | |||
41075 | ||||
41076 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
41077 | Maybe<JSAutoRealm> ar; | |||
41078 | if (objIsXray) { | |||
41079 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
41080 | // we know Xrays have no dynamic unwrap behavior. | |||
41081 | obj = js::CheckedUnwrapStatic(obj); | |||
41082 | if (!obj) { | |||
41083 | return false; | |||
41084 | } | |||
41085 | ar.emplace(cx, obj); | |||
41086 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
41087 | return false; | |||
41088 | } | |||
41089 | if (!arg0.WrapIntoNewCompartment(cx)) { | |||
41090 | return false; | |||
41091 | } | |||
41092 | } | |||
41093 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Constructor(global, Constify(arg0)))); | |||
41094 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41094); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41094; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41095 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
41096 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
41097 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
41098 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41098); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 41098; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41099 | return false; | |||
41100 | } | |||
41101 | return true; | |||
41102 | } while (false); | |||
41103 | do { | |||
41104 | RootedSpiderMonkeyInterface<Uint8Array> arg0(cx); | |||
41105 | if (!arg0.Init(&args[0].toObject())) { | |||
41106 | break; | |||
41107 | } | |||
41108 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
41109 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
41110 | return false; | |||
41111 | } | |||
41112 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
41113 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
41114 | return false; | |||
41115 | } | |||
41116 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
41117 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
41118 | return false; | |||
41119 | } | |||
41120 | GlobalObject global(cx, obj); | |||
41121 | if (global.Failed()) { | |||
41122 | return false; | |||
41123 | } | |||
41124 | ||||
41125 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
41126 | Maybe<JSAutoRealm> ar; | |||
41127 | if (objIsXray) { | |||
41128 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
41129 | // we know Xrays have no dynamic unwrap behavior. | |||
41130 | obj = js::CheckedUnwrapStatic(obj); | |||
41131 | if (!obj) { | |||
41132 | return false; | |||
41133 | } | |||
41134 | ar.emplace(cx, obj); | |||
41135 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
41136 | return false; | |||
41137 | } | |||
41138 | if (!arg0.WrapIntoNewCompartment(cx)) { | |||
41139 | return false; | |||
41140 | } | |||
41141 | } | |||
41142 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Constructor(global, Constify(arg0)))); | |||
41143 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41143); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41143; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41144 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
41145 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
41146 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
41147 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41147); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 41147; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41148 | return false; | |||
41149 | } | |||
41150 | return true; | |||
41151 | } while (false); | |||
41152 | } | |||
41153 | GlobalObject global(cx, obj); | |||
41154 | if (global.Failed()) { | |||
41155 | return false; | |||
41156 | } | |||
41157 | ||||
41158 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
41159 | binding_detail::FakeString<char16_t> arg0; | |||
41160 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
41161 | return false; | |||
41162 | } | |||
41163 | Maybe<JSAutoRealm> ar; | |||
41164 | if (objIsXray) { | |||
41165 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
41166 | // we know Xrays have no dynamic unwrap behavior. | |||
41167 | obj = js::CheckedUnwrapStatic(obj); | |||
41168 | if (!obj) { | |||
41169 | return false; | |||
41170 | } | |||
41171 | ar.emplace(cx, obj); | |||
41172 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
41173 | return false; | |||
41174 | } | |||
41175 | } | |||
41176 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Constructor(global, NonNullHelper(Constify(arg0))))); | |||
41177 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41177); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41177; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41178 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
41179 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
41180 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
41181 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41181); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 41181; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41182 | return false; | |||
41183 | } | |||
41184 | return true; | |||
41185 | break; | |||
41186 | } | |||
41187 | case 2: { | |||
41188 | uint32_t arg0; | |||
41189 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
41190 | return false; | |||
41191 | } | |||
41192 | if (args[1].isObject()) { | |||
41193 | do { | |||
41194 | NonNull<mozilla::dom::TestInterface> arg1; | |||
41195 | { | |||
41196 | // Our JSContext should be in the right global to do unwrapping in. | |||
41197 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[1], arg1, cx); | |||
41198 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
41199 | break; | |||
41200 | } | |||
41201 | } | |||
41202 | GlobalObject global(cx, obj); | |||
41203 | if (global.Failed()) { | |||
41204 | return false; | |||
41205 | } | |||
41206 | ||||
41207 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
41208 | Maybe<JSAutoRealm> ar; | |||
41209 | if (objIsXray) { | |||
41210 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
41211 | // we know Xrays have no dynamic unwrap behavior. | |||
41212 | obj = js::CheckedUnwrapStatic(obj); | |||
41213 | if (!obj) { | |||
41214 | return false; | |||
41215 | } | |||
41216 | ar.emplace(cx, obj); | |||
41217 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
41218 | return false; | |||
41219 | } | |||
41220 | } | |||
41221 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Constructor(global, arg0, MOZ_KnownLive(NonNullHelper(arg1))(NonNullHelper(arg1))))); | |||
41222 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41222); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41222; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41223 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
41224 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
41225 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
41226 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41226); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 41226; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41227 | return false; | |||
41228 | } | |||
41229 | return true; | |||
41230 | } while (false); | |||
41231 | } | |||
41232 | GlobalObject global(cx, obj); | |||
41233 | if (global.Failed()) { | |||
41234 | return false; | |||
41235 | } | |||
41236 | ||||
41237 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
41238 | Nullable<bool> arg1; | |||
41239 | if (args[1].isNullOrUndefined()) { | |||
41240 | arg1.SetNull(); | |||
41241 | } else if (!ValueToPrimitive<bool, eDefault>(cx, args[1], "Argument 2", &arg1.SetValue())) { | |||
41242 | return false; | |||
41243 | } | |||
41244 | Maybe<JSAutoRealm> ar; | |||
41245 | if (objIsXray) { | |||
41246 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
41247 | // we know Xrays have no dynamic unwrap behavior. | |||
41248 | obj = js::CheckedUnwrapStatic(obj); | |||
41249 | if (!obj) { | |||
41250 | return false; | |||
41251 | } | |||
41252 | ar.emplace(cx, obj); | |||
41253 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
41254 | return false; | |||
41255 | } | |||
41256 | } | |||
41257 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleInterface>(mozilla::dom::TestExampleInterface::Constructor(global, arg0, Constify(arg1)))); | |||
41258 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41258); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41258; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41259 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
41260 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
41261 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
41262 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41262); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 41262; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41263 | return false; | |||
41264 | } | |||
41265 | return true; | |||
41266 | break; | |||
41267 | } | |||
41268 | default: { | |||
41269 | // Using nsPrintfCString here would require including that | |||
41270 | // header. Let's not worry about it. | |||
41271 | nsAutoCString argCountStr; | |||
41272 | argCountStr.AppendPrintf("%u", args.length()); | |||
41273 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
41274 | } | |||
41275 | } | |||
41276 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 41276); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 41276; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
41277 | return false; | |||
41278 | } | |||
41279 | ||||
41280 | static const DOMInterfaceInfo sInterfaceObjectInfo = { | |||
41281 | { _constructor, &sNativePropertyHooks }, | |||
41282 | JS::GetRealmFunctionPrototypeHandle, | |||
41283 | prototypes::id::TestExampleInterface, | |||
41284 | PrototypeTraits<prototypes::id::TestExampleInterface>::Depth, | |||
41285 | true, | |||
41286 | }; | |||
41287 | ||||
41288 | bool sLegacyFactoryFunctionNativePropertiesInited = true; | |||
41289 | const NativePropertyHooks sLegacyFactoryFunctionNativePropertyHooks = { | |||
41290 | nullptr, | |||
41291 | { nullptr, nullptr, &sLegacyFactoryFunctionNativePropertiesInited }, | |||
41292 | prototypes::id::TestExampleInterface, | |||
41293 | constructors::id::TestExampleInterface, | |||
41294 | nullptr | |||
41295 | }; | |||
41296 | ||||
41297 | static const LegacyFactoryFunction legacyFactoryFunctions[] = { | |||
41298 | { "Example", { _Example, &sLegacyFactoryFunctionNativePropertyHooks }, 0 }, | |||
41299 | { "Example2", { _Example2, &sLegacyFactoryFunctionNativePropertyHooks }, 1 }, | |||
41300 | }; | |||
41301 | ||||
41302 | MOZ_CAN_RUN_SCRIPT static bool | |||
41303 | _legacycaller(JSContext* cx_, unsigned argc, JS::Value* vp) | |||
41304 | { | |||
41305 | BindingCallContext cx(cx_, "TestExampleInterface legacy caller"); | |||
41306 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
41307 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
41308 | ||||
41309 | mozilla::dom::TestExampleInterface* self; | |||
41310 | JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj)); | |||
41311 | { | |||
41312 | // Our JSContext should be in the right global to do unwrapping in. | |||
41313 | nsresult rv = UnwrapObject<prototypes::id::TestExampleInterface, mozilla::dom::TestExampleInterface>(&rootSelf, self, cx); | |||
41314 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
41315 | MOZ_CRASH("Unexpected object in '_legacycaller' hook")do { do { } while (false); MOZ_ReportCrash("" "Unexpected object in '_legacycaller' hook" , "../TestExampleGenBinding.cpp", 41315); AnnotateMozCrashReason ("MOZ_CRASH(" "Unexpected object in '_legacycaller' hook" ")" ); do { *((volatile int*)__null) = 41315; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
41316 | return false; | |||
41317 | } | |||
41318 | } | |||
41319 | if (!args.requireAtLeast(cx, "TestExampleInterface legacy caller", 2)) { | |||
41320 | return false; | |||
41321 | } | |||
41322 | uint32_t arg0; | |||
41323 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
41324 | return false; | |||
41325 | } | |||
41326 | NonNull<mozilla::dom::TestInterface> arg1; | |||
41327 | if (args[1].isObject()) { | |||
41328 | { | |||
41329 | // Our JSContext should be in the right global to do unwrapping in. | |||
41330 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[1], arg1, cx); | |||
41331 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
41332 | cx.ThrowErrorMessage<MSG_DOES_NOT_IMPLEMENT_INTERFACE>("Argument 2", "TestInterface"); | |||
41333 | return false; | |||
41334 | } | |||
41335 | } | |||
41336 | } else { | |||
41337 | cx.ThrowErrorMessage<MSG_NOT_OBJECT>("Argument 2"); | |||
41338 | return false; | |||
41339 | } | |||
41340 | int16_t result(MOZ_KnownLive(self)(self)->LegacyCall(args.thisv(), arg0, MOZ_KnownLive(NonNullHelper(arg1))(NonNullHelper(arg1)))); | |||
41341 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41341); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41341; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41342 | args.rval().setInt32(int32_t(result)); | |||
41343 | return true; | |||
41344 | } | |||
41345 | ||||
41346 | static const DOMIfaceAndProtoJSClass sPrototypeClass = { | |||
41347 | { | |||
41348 | "TestExampleInterfacePrototype", | |||
41349 | JSCLASS_IS_DOMIFACEANDPROTOJSCLASSJSCLASS_USERBIT2 | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE0 + 1 /* slot for the JSObject holding the unforgeable properties */), | |||
41350 | JS_NULL_CLASS_OPS, | |||
41351 | JS_NULL_CLASS_SPEC, | |||
41352 | JS_NULL_CLASS_EXT, | |||
41353 | JS_NULL_OBJECT_OPS | |||
41354 | }, | |||
41355 | eInterfacePrototype, | |||
41356 | prototypes::id::TestExampleInterface, | |||
41357 | PrototypeTraits<prototypes::id::TestExampleInterface>::Depth, | |||
41358 | &sNativePropertyHooks, | |||
41359 | JS::GetRealmObjectPrototype | |||
41360 | }; | |||
41361 | ||||
41362 | static JS::Handle<JSObject*> | |||
41363 | GetProtoObjectHandle(JSContext* aCx); | |||
41364 | ||||
41365 | static const JSClassOps sClassOps = { | |||
41366 | _addProperty, /* addProperty */ | |||
41367 | nullptr, /* delProperty */ | |||
41368 | nullptr, /* enumerate */ | |||
41369 | nullptr, /* newEnumerate */ | |||
41370 | nullptr, /* resolve */ | |||
41371 | nullptr, /* mayResolve */ | |||
41372 | _finalize, /* finalize */ | |||
41373 | _legacycaller, /* call */ | |||
41374 | nullptr, /* construct */ | |||
41375 | nullptr, /* trace */ | |||
41376 | }; | |||
41377 | ||||
41378 | static const js::ClassExtension sClassExtension = { | |||
41379 | _objectMoved /* objectMovedOp */ | |||
41380 | }; | |||
41381 | ||||
41382 | static const DOMJSClass sClass = { | |||
41383 | { "TestExampleInterface", | |||
41384 | JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(22), | |||
41385 | &sClassOps, | |||
41386 | JS_NULL_CLASS_SPEC, | |||
41387 | &sClassExtension, | |||
41388 | JS_NULL_OBJECT_OPS | |||
41389 | }, | |||
41390 | { prototypes::id::TestExampleInterface, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count }, | |||
41391 | std::is_base_of_v<nsISupports, mozilla::dom::TestExampleInterface>, | |||
41392 | &sNativePropertyHooks, | |||
41393 | FindAssociatedGlobalForNative<mozilla::dom::TestExampleInterface>::Get, | |||
41394 | GetProtoObjectHandle, | |||
41395 | GetCCParticipant<mozilla::dom::TestExampleInterface>::Get(), | |||
41396 | nullptr, | |||
41397 | _getWrapperCache | |||
41398 | }; | |||
41399 | static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS1, | |||
41400 | "Must have the right minimal number of reserved slots."); | |||
41401 | static_assert(22 >= 22, | |||
41402 | "Must have enough reserved slots."); | |||
41403 | ||||
41404 | static bool | |||
41405 | UpdateMemberSlots(JSContext* aCx, JS::Handle<JSObject*> aWrapper, mozilla::dom::TestExampleInterface* aObject) | |||
41406 | { | |||
41407 | JS::Rooted<JS::Value> temp(aCx); | |||
41408 | JSJitGetterCallArgs args(&temp); | |||
41409 | ||||
41410 | static_assert((DOM_INSTANCE_RESERVED_SLOTS1 + 1) < JS::shadow::Object::MAX_FIXED_SLOTS, | |||
41411 | "Not enough fixed slots to fit 'TestExampleInterface.cachedConstantByte. Ion's visitGetDOMMemberV/visitGetDOMMemberT assume StoreInSlot things are all in fixed slots."); | |||
41412 | if (!get_cachedConstantByte(aCx, aWrapper, aObject, args)) { | |||
41413 | return false; | |||
41414 | } | |||
41415 | // Getter handled setting our reserved slots | |||
41416 | ||||
41417 | return true; | |||
41418 | } | |||
41419 | ||||
41420 | bool | |||
41421 | Wrap(JSContext* aCx, mozilla::dom::TestExampleInterface* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector) | |||
41422 | { | |||
41423 | static_assert(!std::is_base_of_v<NonRefcountedDOMObject, mozilla::dom::TestExampleInterface>, | |||
41424 | "Shouldn't have wrappercached things that are not refcounted."); | |||
41425 | static_assert(std::is_same_v<decltype(aObject), mozilla::dom::TestExampleInterface*>); | |||
41426 | MOZ_ASSERT(ToSupportsIsCorrect(aObject))do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsCorrect(aObject))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(ToSupportsIsCorrect(aObject) ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "ToSupportsIsCorrect(aObject)", "../TestExampleGenBinding.cpp" , 41426); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsCorrect(aObject)" ")"); do { *((volatile int*)__null) = 41426; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
41427 | MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx))do { if (aGivenProto) { do { static_assert( mozilla::detail:: AssertionConditionType<decltype(js::IsObjectInContextCompartment (aGivenProto, aCx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(js::IsObjectInContextCompartment (aGivenProto, aCx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("js::IsObjectInContextCompartment(aGivenProto, aCx)", "../TestExampleGenBinding.cpp" , 41427); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(aGivenProto, aCx)" ")"); do { *((volatile int*)__null) = 41427; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); } } while (false); | |||
41428 | MOZ_ASSERT(!aCache->GetWrapper(),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 41430); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 41430; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
41429 | "You should probably not be using Wrap() directly; use "do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 41430); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 41430; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
41430 | "GetOrCreateDOMReflector instead")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 41430); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 41430; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41431 | ||||
41432 | MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" " (" "nsISupports must be on our primary inheritance chain" ")", "../TestExampleGenBinding.cpp" , 41433); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" ") (" "nsISupports must be on our primary inheritance chain" ")"); do { *((volatile int*)__null) = 41433; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
41433 | "nsISupports must be on our primary inheritance chain")do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" " (" "nsISupports must be on our primary inheritance chain" ")", "../TestExampleGenBinding.cpp" , 41433); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" ") (" "nsISupports must be on our primary inheritance chain" ")"); do { *((volatile int*)__null) = 41433; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
41434 | ||||
41435 | // If the wrapper cache contains a dead reflector then finalize that | |||
41436 | // now, ensuring that the finalizer for the old reflector always | |||
41437 | // runs before the new reflector is created and attached. This | |||
41438 | // avoids the awkward situation where there are multiple reflector | |||
41439 | // objects that contain pointers to the same native. | |||
41440 | ||||
41441 | if (JSObject* oldReflector = aCache->GetWrapperMaybeDead()) { | |||
41442 | _finalize(nullptr /* unused */, oldReflector); | |||
41443 | MOZ_ASSERT(!aCache->GetWrapperMaybeDead())do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapperMaybeDead())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapperMaybeDead ()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("!aCache->GetWrapperMaybeDead()", "../TestExampleGenBinding.cpp" , 41443); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapperMaybeDead()" ")"); do { *((volatile int*)__null) = 41443; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
41444 | } | |||
41445 | ||||
41446 | JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject())); | |||
41447 | if (!global) { | |||
41448 | return false; | |||
41449 | } | |||
41450 | MOZ_ASSERT(JS_IsGlobalObject(global))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsGlobalObject(global))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsGlobalObject(global)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsGlobalObject(global)" , "../TestExampleGenBinding.cpp", 41450); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsGlobalObject(global)" ")"); do { *((volatile int*)__null) = 41450; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
41451 | JS::AssertObjectIsNotGray(global); | |||
41452 | ||||
41453 | // That might have ended up wrapping us already, due to the wonders | |||
41454 | // of XBL. Check for that, and bail out as needed. | |||
41455 | aReflector.set(aCache->GetWrapper()); | |||
41456 | if (aReflector) { | |||
41457 | #ifdef DEBUG1 | |||
41458 | AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto); | |||
41459 | #endif // DEBUG | |||
41460 | return true; | |||
41461 | } | |||
41462 | ||||
41463 | JSAutoRealm ar(aCx, global); | |||
41464 | JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx); | |||
41465 | if (!canonicalProto) { | |||
41466 | return false; | |||
41467 | } | |||
41468 | JS::Rooted<JSObject*> proto(aCx); | |||
41469 | if (aGivenProto) { | |||
41470 | proto = aGivenProto; | |||
41471 | // Unfortunately, while aGivenProto was in the compartment of aCx | |||
41472 | // coming in, we changed compartments to that of "parent" so may need | |||
41473 | // to wrap the proto here. | |||
41474 | if (js::GetContextCompartment(aCx) != JS::GetCompartment(proto)) { | |||
41475 | if (!JS_WrapObject(aCx, &proto)) { | |||
41476 | return false; | |||
41477 | } | |||
41478 | } | |||
41479 | } else { | |||
41480 | proto = canonicalProto; | |||
41481 | } | |||
41482 | ||||
41483 | BindingJSObjectCreator<mozilla::dom::TestExampleInterface> creator(aCx); | |||
41484 | creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector); | |||
41485 | if (!aReflector) { | |||
41486 | return false; | |||
41487 | } | |||
41488 | ||||
41489 | aCache->SetWrapper(aReflector); | |||
41490 | ||||
41491 | // Important: do unforgeable property setup after we have handed | |||
41492 | // over ownership of the C++ object to obj as needed, so that if | |||
41493 | // we fail and it ends up GCed it won't have problems in the | |||
41494 | // finalizer trying to drop its ownership of the C++ object. | |||
41495 | JS::Rooted<JSObject*> unforgeableHolder(aCx, | |||
41496 | &JS::GetReservedSlot(canonicalProto, DOM_INTERFACE_PROTO_SLOTS_BASE0).toObject()); | |||
41497 | if (!JS_InitializePropertiesFromCompatibleNativeObject(aCx, aReflector, unforgeableHolder)) { | |||
41498 | aCache->ReleaseWrapper(aObject); | |||
41499 | aCache->ClearWrapper(); | |||
41500 | return false; | |||
41501 | } | |||
41502 | if (!UpdateMemberSlots(aCx, aReflector, aObject)) { | |||
41503 | aCache->ReleaseWrapper(aObject); | |||
41504 | aCache->ClearWrapper(); | |||
41505 | return false; | |||
41506 | } | |||
41507 | creator.InitializationSucceeded(); | |||
41508 | ||||
41509 | MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&do { static_assert( mozilla::detail::AssertionConditionType< decltype(aCache->GetWrapperPreserveColor() && aCache ->GetWrapperPreserveColor() == aReflector)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aCache->GetWrapperPreserveColor () && aCache->GetWrapperPreserveColor() == aReflector ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" , "../TestExampleGenBinding.cpp", 41510); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" ")"); do { *((volatile int*)__null) = 41510; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
41510 | aCache->GetWrapperPreserveColor() == aReflector)do { static_assert( mozilla::detail::AssertionConditionType< decltype(aCache->GetWrapperPreserveColor() && aCache ->GetWrapperPreserveColor() == aReflector)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aCache->GetWrapperPreserveColor () && aCache->GetWrapperPreserveColor() == aReflector ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" , "../TestExampleGenBinding.cpp", 41510); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" ")"); do { *((volatile int*)__null) = 41510; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
41511 | // If proto != canonicalProto, we have to preserve our wrapper; | |||
41512 | // otherwise we won't be able to properly recreate it later, since | |||
41513 | // we won't know what proto to use. Note that we don't check | |||
41514 | // aGivenProto here, since it's entirely possible (and even | |||
41515 | // somewhat common) to have a non-null aGivenProto which is the | |||
41516 | // same as canonicalProto. | |||
41517 | if (proto != canonicalProto) { | |||
41518 | PreserveWrapper(aObject); | |||
41519 | } | |||
41520 | ||||
41521 | return true; | |||
41522 | } | |||
41523 | ||||
41524 | void | |||
41525 | ClearCachedCachedByteValue(mozilla::dom::TestExampleInterface* aObject) | |||
41526 | { | |||
41527 | JSObject* obj; | |||
41528 | obj = aObject->GetWrapper(); | |||
41529 | if (!obj) { | |||
41530 | return; | |||
41531 | } | |||
41532 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 0), JS::UndefinedValue()); | |||
41533 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 0)); | |||
41534 | } | |||
41535 | ||||
41536 | void | |||
41537 | ClearCachedCachedWritableByteValue(mozilla::dom::TestExampleInterface* aObject) | |||
41538 | { | |||
41539 | JSObject* obj; | |||
41540 | obj = aObject->GetWrapper(); | |||
41541 | if (!obj) { | |||
41542 | return; | |||
41543 | } | |||
41544 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 2), JS::UndefinedValue()); | |||
41545 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 2)); | |||
41546 | } | |||
41547 | ||||
41548 | void | |||
41549 | ClearCachedCachedSelfValue(mozilla::dom::TestExampleInterface* aObject) | |||
41550 | { | |||
41551 | JSObject* obj; | |||
41552 | obj = aObject->GetWrapper(); | |||
41553 | if (!obj) { | |||
41554 | return; | |||
41555 | } | |||
41556 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 3), JS::UndefinedValue()); | |||
41557 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 3)); | |||
41558 | } | |||
41559 | ||||
41560 | void | |||
41561 | ClearCachedReadonlySequenceValue(mozilla::dom::TestExampleInterface* aObject) | |||
41562 | { | |||
41563 | JSObject* obj; | |||
41564 | obj = aObject->GetWrapper(); | |||
41565 | if (!obj) { | |||
41566 | return; | |||
41567 | } | |||
41568 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 4), JS::UndefinedValue()); | |||
41569 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 4)); | |||
41570 | } | |||
41571 | ||||
41572 | void | |||
41573 | ClearCachedReadonlySequenceOfDictionariesValue(mozilla::dom::TestExampleInterface* aObject) | |||
41574 | { | |||
41575 | JSObject* obj; | |||
41576 | obj = aObject->GetWrapper(); | |||
41577 | if (!obj) { | |||
41578 | return; | |||
41579 | } | |||
41580 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 5), JS::UndefinedValue()); | |||
41581 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 5)); | |||
41582 | } | |||
41583 | ||||
41584 | void | |||
41585 | ClearCachedReadonlyNullableSequenceOfDictionariesValue(mozilla::dom::TestExampleInterface* aObject) | |||
41586 | { | |||
41587 | JSObject* obj; | |||
41588 | obj = aObject->GetWrapper(); | |||
41589 | if (!obj) { | |||
41590 | return; | |||
41591 | } | |||
41592 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 6), JS::UndefinedValue()); | |||
41593 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 6)); | |||
41594 | } | |||
41595 | ||||
41596 | void | |||
41597 | ClearCachedReadonlyFrozenSequenceValue(mozilla::dom::TestExampleInterface* aObject) | |||
41598 | { | |||
41599 | JSObject* obj; | |||
41600 | obj = aObject->GetWrapper(); | |||
41601 | if (!obj) { | |||
41602 | return; | |||
41603 | } | |||
41604 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 7), JS::UndefinedValue()); | |||
41605 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 7)); | |||
41606 | } | |||
41607 | ||||
41608 | void | |||
41609 | ClearCachedReadonlyFrozenNullableSequenceValue(mozilla::dom::TestExampleInterface* aObject) | |||
41610 | { | |||
41611 | JSObject* obj; | |||
41612 | obj = aObject->GetWrapper(); | |||
41613 | if (!obj) { | |||
41614 | return; | |||
41615 | } | |||
41616 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 8), JS::UndefinedValue()); | |||
41617 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 8)); | |||
41618 | } | |||
41619 | ||||
41620 | void | |||
41621 | ClearCachedBooleanObservableArrayValue(mozilla::dom::TestExampleInterface* aObject) | |||
41622 | { | |||
41623 | JSObject* obj; | |||
41624 | obj = aObject->GetWrapper(); | |||
41625 | if (!obj) { | |||
41626 | return; | |||
41627 | } | |||
41628 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 9), JS::UndefinedValue()); | |||
41629 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 9)); | |||
41630 | } | |||
41631 | ||||
41632 | void | |||
41633 | ClearCachedObjectObservableArrayValue(mozilla::dom::TestExampleInterface* aObject) | |||
41634 | { | |||
41635 | JSObject* obj; | |||
41636 | obj = aObject->GetWrapper(); | |||
41637 | if (!obj) { | |||
41638 | return; | |||
41639 | } | |||
41640 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 10), JS::UndefinedValue()); | |||
41641 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 10)); | |||
41642 | } | |||
41643 | ||||
41644 | void | |||
41645 | ClearCachedAnyObservableArrayValue(mozilla::dom::TestExampleInterface* aObject) | |||
41646 | { | |||
41647 | JSObject* obj; | |||
41648 | obj = aObject->GetWrapper(); | |||
41649 | if (!obj) { | |||
41650 | return; | |||
41651 | } | |||
41652 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 11), JS::UndefinedValue()); | |||
41653 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 11)); | |||
41654 | } | |||
41655 | ||||
41656 | void | |||
41657 | ClearCachedInterfaceObservableArrayValue(mozilla::dom::TestExampleInterface* aObject) | |||
41658 | { | |||
41659 | JSObject* obj; | |||
41660 | obj = aObject->GetWrapper(); | |||
41661 | if (!obj) { | |||
41662 | return; | |||
41663 | } | |||
41664 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 12), JS::UndefinedValue()); | |||
41665 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 12)); | |||
41666 | } | |||
41667 | ||||
41668 | void | |||
41669 | ClearCachedNullableObservableArrayValue(mozilla::dom::TestExampleInterface* aObject) | |||
41670 | { | |||
41671 | JSObject* obj; | |||
41672 | obj = aObject->GetWrapper(); | |||
41673 | if (!obj) { | |||
41674 | return; | |||
41675 | } | |||
41676 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 13), JS::UndefinedValue()); | |||
41677 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 13)); | |||
41678 | } | |||
41679 | ||||
41680 | void | |||
41681 | ClearCachedReadonlyDictionaryValue(mozilla::dom::TestExampleInterface* aObject) | |||
41682 | { | |||
41683 | JSObject* obj; | |||
41684 | obj = aObject->GetWrapper(); | |||
41685 | if (!obj) { | |||
41686 | return; | |||
41687 | } | |||
41688 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 14), JS::UndefinedValue()); | |||
41689 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 14)); | |||
41690 | } | |||
41691 | ||||
41692 | void | |||
41693 | ClearCachedReadonlyNullableDictionaryValue(mozilla::dom::TestExampleInterface* aObject) | |||
41694 | { | |||
41695 | JSObject* obj; | |||
41696 | obj = aObject->GetWrapper(); | |||
41697 | if (!obj) { | |||
41698 | return; | |||
41699 | } | |||
41700 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 15), JS::UndefinedValue()); | |||
41701 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 15)); | |||
41702 | } | |||
41703 | ||||
41704 | void | |||
41705 | ClearCachedWritableDictionaryValue(mozilla::dom::TestExampleInterface* aObject) | |||
41706 | { | |||
41707 | JSObject* obj; | |||
41708 | obj = aObject->GetWrapper(); | |||
41709 | if (!obj) { | |||
41710 | return; | |||
41711 | } | |||
41712 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 16), JS::UndefinedValue()); | |||
41713 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 16)); | |||
41714 | } | |||
41715 | ||||
41716 | void | |||
41717 | ClearCachedReadonlyFrozenDictionaryValue(mozilla::dom::TestExampleInterface* aObject) | |||
41718 | { | |||
41719 | JSObject* obj; | |||
41720 | obj = aObject->GetWrapper(); | |||
41721 | if (!obj) { | |||
41722 | return; | |||
41723 | } | |||
41724 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 17), JS::UndefinedValue()); | |||
41725 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 17)); | |||
41726 | } | |||
41727 | ||||
41728 | void | |||
41729 | ClearCachedReadonlyFrozenNullableDictionaryValue(mozilla::dom::TestExampleInterface* aObject) | |||
41730 | { | |||
41731 | JSObject* obj; | |||
41732 | obj = aObject->GetWrapper(); | |||
41733 | if (!obj) { | |||
41734 | return; | |||
41735 | } | |||
41736 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 18), JS::UndefinedValue()); | |||
41737 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 18)); | |||
41738 | } | |||
41739 | ||||
41740 | void | |||
41741 | ClearCachedWritableFrozenDictionaryValue(mozilla::dom::TestExampleInterface* aObject) | |||
41742 | { | |||
41743 | JSObject* obj; | |||
41744 | obj = aObject->GetWrapper(); | |||
41745 | if (!obj) { | |||
41746 | return; | |||
41747 | } | |||
41748 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 19), JS::UndefinedValue()); | |||
41749 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 19)); | |||
41750 | } | |||
41751 | ||||
41752 | void | |||
41753 | ClearCachedReflectedHTMLAttributeReturningFrozenArrayValue(mozilla::dom::TestExampleInterface* aObject) | |||
41754 | { | |||
41755 | JSObject* obj; | |||
41756 | obj = aObject->GetWrapper(); | |||
41757 | if (!obj) { | |||
41758 | return; | |||
41759 | } | |||
41760 | JS::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS1 + 20), JS::UndefinedValue()); | |||
41761 | xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 20)); | |||
41762 | } | |||
41763 | ||||
41764 | void | |||
41765 | CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, DefineInterfaceProperty aDefineOnGlobal) | |||
41766 | { | |||
41767 | JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::TestExampleInterface); | |||
41768 | JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::TestExampleInterface); | |||
41769 | ||||
41770 | JS::Handle<JSObject*> parentProto(JS::GetRealmObjectPrototypeHandle(aCx)); | |||
41771 | if (!parentProto) { | |||
41772 | return; | |||
41773 | } | |||
41774 | ||||
41775 | JS::Handle<JSObject*> constructorProto(JS::GetRealmFunctionPrototypeHandle(aCx)); | |||
41776 | if (!constructorProto) { | |||
41777 | return; | |||
41778 | } | |||
41779 | ||||
41780 | dom::CreateInterfaceObjects(aCx, aGlobal, parentProto, | |||
41781 | &sPrototypeClass, protoCache, | |||
41782 | constructorProto, &sInterfaceObjectInfo, 0, false, Span(legacyFactoryFunctions), | |||
41783 | interfaceCache, | |||
41784 | sNativeProperties.Upcast(), | |||
41785 | sChromeOnlyNativeProperties.Upcast(), | |||
41786 | "TestExampleInterface", | |||
41787 | aDefineOnGlobal != DefineInterfaceProperty::No, | |||
41788 | nullptr, | |||
41789 | false, | |||
41790 | nullptr); | |||
41791 | ||||
41792 | JS::AssertObjectIsNotGray(*protoCache); | |||
41793 | JS::Handle<JSObject*> proto = JS::Handle<JSObject*>::fromMarkedLocation(protoCache->unsafeAddress()); | |||
41794 | if (!proto) { | |||
41795 | *protoCache = nullptr; | |||
41796 | if (interfaceCache) { | |||
41797 | *interfaceCache = nullptr; | |||
41798 | } | |||
41799 | return; | |||
41800 | } | |||
41801 | ||||
41802 | JS::Rooted<JSObject*> unforgeableHolder( | |||
41803 | aCx, JS_NewObjectWithoutMetadata(aCx, sClass.ToJSClass(), proto)); | |||
41804 | if (!unforgeableHolder) { | |||
41805 | *protoCache = nullptr; | |||
41806 | if (interfaceCache) { | |||
41807 | *interfaceCache = nullptr; | |||
41808 | } | |||
41809 | return; | |||
41810 | } | |||
41811 | ||||
41812 | if (!DefineLegacyUnforgeableAttributes(aCx, unforgeableHolder, sUnforgeableAttributes)) { | |||
41813 | *protoCache = nullptr; | |||
41814 | if (interfaceCache) { | |||
41815 | *interfaceCache = nullptr; | |||
41816 | } | |||
41817 | return; | |||
41818 | } | |||
41819 | if (nsContentUtils::ThreadsafeIsSystemCaller(aCx)) { | |||
41820 | if (!DefineLegacyUnforgeableAttributes(aCx, unforgeableHolder, sChromeUnforgeableAttributes)) { | |||
41821 | *protoCache = nullptr; | |||
41822 | if (interfaceCache) { | |||
41823 | *interfaceCache = nullptr; | |||
41824 | } | |||
41825 | return; | |||
41826 | } | |||
41827 | } | |||
41828 | if (!DefineLegacyUnforgeableMethods(aCx, unforgeableHolder, sUnforgeableMethods)) { | |||
41829 | *protoCache = nullptr; | |||
41830 | if (interfaceCache) { | |||
41831 | *interfaceCache = nullptr; | |||
41832 | } | |||
41833 | return; | |||
41834 | } | |||
41835 | if (nsContentUtils::ThreadsafeIsSystemCaller(aCx)) { | |||
41836 | if (!DefineLegacyUnforgeableMethods(aCx, unforgeableHolder, sChromeUnforgeableMethods)) { | |||
41837 | *protoCache = nullptr; | |||
41838 | if (interfaceCache) { | |||
41839 | *interfaceCache = nullptr; | |||
41840 | } | |||
41841 | return; | |||
41842 | } | |||
41843 | } | |||
41844 | ||||
41845 | if (*protoCache) { | |||
41846 | JS::SetReservedSlot(*protoCache, DOM_INTERFACE_PROTO_SLOTS_BASE0, | |||
41847 | JS::ObjectValue(*unforgeableHolder)); | |||
41848 | } | |||
41849 | } | |||
41850 | ||||
41851 | static JS::Handle<JSObject*> | |||
41852 | GetProtoObjectHandle(JSContext* aCx) | |||
41853 | { | |||
41854 | /* Get the interface prototype object for this class. This will create the | |||
41855 | object as needed. */ | |||
41856 | return GetPerInterfaceObjectHandle(aCx, prototypes::id::TestExampleInterface, | |||
41857 | &CreateInterfaceObjects, | |||
41858 | DefineInterfaceProperty::CheckExposure); | |||
41859 | ||||
41860 | } | |||
41861 | ||||
41862 | JS::Handle<JSObject*> | |||
41863 | GetConstructorObjectHandle(JSContext* aCx) | |||
41864 | { | |||
41865 | /* Get the interface object for this class. This will create the object as | |||
41866 | needed. */ | |||
41867 | ||||
41868 | return GetPerInterfaceObjectHandle(aCx, constructors::id::TestExampleInterface, | |||
41869 | &CreateInterfaceObjects, | |||
41870 | DefineInterfaceProperty::CheckExposure); | |||
41871 | } | |||
41872 | ||||
41873 | } // namespace TestExampleInterface_Binding | |||
41874 | ||||
41875 | ||||
41876 | ||||
41877 | namespace TestExampleProxyInterface_Binding { | |||
41878 | ||||
41879 | MOZ_CAN_RUN_SCRIPT static bool | |||
41880 | longIndexedGetter(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
41881 | { | |||
41882 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject41885( cx, "TestExampleProxyInterface" , "longIndexedGetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41883 | "TestExampleProxyInterface", "longIndexedGetter", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject41885( cx, "TestExampleProxyInterface" , "longIndexedGetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41884 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject41885( cx, "TestExampleProxyInterface" , "longIndexedGetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41885 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject41885( cx, "TestExampleProxyInterface" , "longIndexedGetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
41886 | ||||
41887 | auto* self = static_cast<mozilla::dom::TestExampleProxyInterface*>(void_self); | |||
41888 | if (!args.requireAtLeast(cx, "TestExampleProxyInterface.longIndexedGetter", 1)) { | |||
41889 | return false; | |||
41890 | } | |||
41891 | uint32_t arg0; | |||
41892 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
41893 | return false; | |||
41894 | } | |||
41895 | int32_t result(MOZ_KnownLive(self)(self)->LongIndexedGetter(arg0)); | |||
41896 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41896); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41896; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41897 | args.rval().setInt32(int32_t(result)); | |||
41898 | return true; | |||
41899 | } | |||
41900 | ||||
41901 | static const JSJitInfo longIndexedGetter_methodinfo = { | |||
41902 | { (JSJitGetterOp)longIndexedGetter }, | |||
41903 | { prototypes::id::TestExampleProxyInterface }, | |||
41904 | { PrototypeTraits<prototypes::id::TestExampleProxyInterface>::Depth }, | |||
41905 | JSJitInfo::Method, | |||
41906 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
41907 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
41908 | false, /* isInfallible. False in setters. */ | |||
41909 | false, /* isMovable. Not relevant for setters. */ | |||
41910 | false, /* isEliminatable. Not relevant for setters. */ | |||
41911 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
41912 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
41913 | false, /* isTypedMethod. Only relevant for methods. */ | |||
41914 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
41915 | }; | |||
41916 | ||||
41917 | MOZ_CAN_RUN_SCRIPT static bool | |||
41918 | longIndexedSetter(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
41919 | { | |||
41920 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject41923( cx, "TestExampleProxyInterface" , "longIndexedSetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41921 | "TestExampleProxyInterface", "longIndexedSetter", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject41923( cx, "TestExampleProxyInterface" , "longIndexedSetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41922 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject41923( cx, "TestExampleProxyInterface" , "longIndexedSetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41923 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject41923( cx, "TestExampleProxyInterface" , "longIndexedSetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
41924 | ||||
41925 | auto* self = static_cast<mozilla::dom::TestExampleProxyInterface*>(void_self); | |||
41926 | if (!args.requireAtLeast(cx, "TestExampleProxyInterface.longIndexedSetter", 2)) { | |||
41927 | return false; | |||
41928 | } | |||
41929 | uint32_t arg0; | |||
41930 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
41931 | return false; | |||
41932 | } | |||
41933 | int32_t arg1; | |||
41934 | if (!ValueToPrimitive<int32_t, eDefault>(cx, args[1], "Argument 2", &arg1)) { | |||
41935 | return false; | |||
41936 | } | |||
41937 | // NOTE: This assert does NOT call the function. | |||
41938 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->LongIndexedSetter(arg0, arg1))>, "Should be returning void here"); | |||
41939 | MOZ_KnownLive(self)(self)->LongIndexedSetter(arg0, arg1); | |||
41940 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41940); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41940; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41941 | args.rval().setUndefined(); | |||
41942 | return true; | |||
41943 | } | |||
41944 | ||||
41945 | static const JSJitInfo longIndexedSetter_methodinfo = { | |||
41946 | { (JSJitGetterOp)longIndexedSetter }, | |||
41947 | { prototypes::id::TestExampleProxyInterface }, | |||
41948 | { PrototypeTraits<prototypes::id::TestExampleProxyInterface>::Depth }, | |||
41949 | JSJitInfo::Method, | |||
41950 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
41951 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
41952 | false, /* isInfallible. False in setters. */ | |||
41953 | false, /* isMovable. Not relevant for setters. */ | |||
41954 | false, /* isEliminatable. Not relevant for setters. */ | |||
41955 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
41956 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
41957 | false, /* isTypedMethod. Only relevant for methods. */ | |||
41958 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
41959 | }; | |||
41960 | ||||
41961 | MOZ_CAN_RUN_SCRIPT static bool | |||
41962 | get_length(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
41963 | { | |||
41964 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject41967( cx, "TestExampleProxyInterface" , "length", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
41965 | "TestExampleProxyInterface", "length", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject41967( cx, "TestExampleProxyInterface" , "length", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
41966 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject41967( cx, "TestExampleProxyInterface" , "length", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)) | |||
41967 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject41967( cx, "TestExampleProxyInterface" , "length", JS::ProfilingCategoryPair::DOM, uint32_t(js::ProfilingStackFrame ::Flags::STRING_TEMPLATE_GETTER) | uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); | |||
41968 | ||||
41969 | auto* self = static_cast<mozilla::dom::TestExampleProxyInterface*>(void_self); | |||
41970 | uint32_t result(MOZ_KnownLive(self)(self)->Length()); | |||
41971 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 41971); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 41971; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
41972 | args.rval().setNumber(result); | |||
41973 | return true; | |||
41974 | } | |||
41975 | ||||
41976 | static const JSJitInfo length_getterinfo = { | |||
41977 | { get_length }, | |||
41978 | { prototypes::id::TestExampleProxyInterface }, | |||
41979 | { PrototypeTraits<prototypes::id::TestExampleProxyInterface>::Depth }, | |||
41980 | JSJitInfo::Getter, | |||
41981 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
41982 | JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */ | |||
41983 | true, /* isInfallible. False in setters. */ | |||
41984 | false, /* isMovable. Not relevant for setters. */ | |||
41985 | false, /* isEliminatable. Not relevant for setters. */ | |||
41986 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
41987 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
41988 | false, /* isTypedMethod. Only relevant for methods. */ | |||
41989 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
41990 | }; | |||
41991 | ||||
41992 | MOZ_CAN_RUN_SCRIPT static bool | |||
41993 | myStringifier(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
41994 | { | |||
41995 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject41998( cx, "TestExampleProxyInterface" , "myStringifier", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41996 | "TestExampleProxyInterface", "myStringifier", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject41998( cx, "TestExampleProxyInterface" , "myStringifier", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41997 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject41998( cx, "TestExampleProxyInterface" , "myStringifier", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
41998 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject41998( cx, "TestExampleProxyInterface" , "myStringifier", JS::ProfilingCategoryPair::DOM, uint32_t(js ::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
41999 | ||||
42000 | auto* self = static_cast<mozilla::dom::TestExampleProxyInterface*>(void_self); | |||
42001 | DOMString result; | |||
42002 | // NOTE: This assert does NOT call the function. | |||
42003 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->MyStringifier(result))>, "Should be returning void here"); | |||
42004 | MOZ_KnownLive(self)(self)->MyStringifier(result); | |||
42005 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42005); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42005; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42006 | if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) { | |||
42007 | return false; | |||
42008 | } | |||
42009 | return true; | |||
42010 | } | |||
42011 | ||||
42012 | static const JSJitInfo myStringifier_methodinfo = { | |||
42013 | { (JSJitGetterOp)myStringifier }, | |||
42014 | { prototypes::id::TestExampleProxyInterface }, | |||
42015 | { PrototypeTraits<prototypes::id::TestExampleProxyInterface>::Depth }, | |||
42016 | JSJitInfo::Method, | |||
42017 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
42018 | JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */ | |||
42019 | false, /* isInfallible. False in setters. */ | |||
42020 | false, /* isMovable. Not relevant for setters. */ | |||
42021 | false, /* isEliminatable. Not relevant for setters. */ | |||
42022 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
42023 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
42024 | false, /* isTypedMethod. Only relevant for methods. */ | |||
42025 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
42026 | }; | |||
42027 | ||||
42028 | MOZ_CAN_RUN_SCRIPT static bool | |||
42029 | shortNameGetter(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
42030 | { | |||
42031 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject42034( cx, "TestExampleProxyInterface" , "shortNameGetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
42032 | "TestExampleProxyInterface", "shortNameGetter", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject42034( cx, "TestExampleProxyInterface" , "shortNameGetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
42033 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject42034( cx, "TestExampleProxyInterface" , "shortNameGetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
42034 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject42034( cx, "TestExampleProxyInterface" , "shortNameGetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
42035 | ||||
42036 | auto* self = static_cast<mozilla::dom::TestExampleProxyInterface*>(void_self); | |||
42037 | if (!args.requireAtLeast(cx, "TestExampleProxyInterface.shortNameGetter", 1)) { | |||
42038 | return false; | |||
42039 | } | |||
42040 | binding_detail::FakeString<char16_t> arg0; | |||
42041 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
42042 | return false; | |||
42043 | } | |||
42044 | int16_t result(MOZ_KnownLive(self)(self)->ShortNameGetter(NonNullHelper(Constify(arg0)))); | |||
42045 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42045); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42045; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42046 | args.rval().setInt32(int32_t(result)); | |||
42047 | return true; | |||
42048 | } | |||
42049 | ||||
42050 | static const JSJitInfo shortNameGetter_methodinfo = { | |||
42051 | { (JSJitGetterOp)shortNameGetter }, | |||
42052 | { prototypes::id::TestExampleProxyInterface }, | |||
42053 | { PrototypeTraits<prototypes::id::TestExampleProxyInterface>::Depth }, | |||
42054 | JSJitInfo::Method, | |||
42055 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
42056 | JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */ | |||
42057 | false, /* isInfallible. False in setters. */ | |||
42058 | false, /* isMovable. Not relevant for setters. */ | |||
42059 | false, /* isEliminatable. Not relevant for setters. */ | |||
42060 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
42061 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
42062 | false, /* isTypedMethod. Only relevant for methods. */ | |||
42063 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
42064 | }; | |||
42065 | ||||
42066 | MOZ_CAN_RUN_SCRIPT static bool | |||
42067 | shortNamedSetter(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
42068 | { | |||
42069 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject42072( cx, "TestExampleProxyInterface" , "shortNamedSetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
42070 | "TestExampleProxyInterface", "shortNamedSetter", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject42072( cx, "TestExampleProxyInterface" , "shortNamedSetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
42071 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject42072( cx, "TestExampleProxyInterface" , "shortNamedSetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
42072 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject42072( cx, "TestExampleProxyInterface" , "shortNamedSetter", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
42073 | ||||
42074 | auto* self = static_cast<mozilla::dom::TestExampleProxyInterface*>(void_self); | |||
42075 | if (!args.requireAtLeast(cx, "TestExampleProxyInterface.shortNamedSetter", 2)) { | |||
42076 | return false; | |||
42077 | } | |||
42078 | binding_detail::FakeString<char16_t> arg0; | |||
42079 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
42080 | return false; | |||
42081 | } | |||
42082 | int16_t arg1; | |||
42083 | if (!ValueToPrimitive<int16_t, eDefault>(cx, args[1], "Argument 2", &arg1)) { | |||
42084 | return false; | |||
42085 | } | |||
42086 | // NOTE: This assert does NOT call the function. | |||
42087 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->ShortNamedSetter(NonNullHelper(Constify(arg0)), arg1))>, "Should be returning void here"); | |||
42088 | MOZ_KnownLive(self)(self)->ShortNamedSetter(NonNullHelper(Constify(arg0)), arg1); | |||
42089 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42089); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42089; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42090 | args.rval().setUndefined(); | |||
42091 | return true; | |||
42092 | } | |||
42093 | ||||
42094 | static const JSJitInfo shortNamedSetter_methodinfo = { | |||
42095 | { (JSJitGetterOp)shortNamedSetter }, | |||
42096 | { prototypes::id::TestExampleProxyInterface }, | |||
42097 | { PrototypeTraits<prototypes::id::TestExampleProxyInterface>::Depth }, | |||
42098 | JSJitInfo::Method, | |||
42099 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
42100 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
42101 | false, /* isInfallible. False in setters. */ | |||
42102 | false, /* isMovable. Not relevant for setters. */ | |||
42103 | false, /* isEliminatable. Not relevant for setters. */ | |||
42104 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
42105 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
42106 | false, /* isTypedMethod. Only relevant for methods. */ | |||
42107 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
42108 | }; | |||
42109 | ||||
42110 | static const JSFunctionSpec sMethods_specs[] = { | |||
42111 | JS_FNSPEC("longIndexedGetter", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&longIndexedGetter_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("longIndexedGetter"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&longIndexedGetter_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
42112 | JS_FNSPEC("longIndexedSetter", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&longIndexedSetter_methodinfo), 2, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("longIndexedSetter"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&longIndexedSetter_methodinfo)}, 2, JSPROP_ENUMERATE , nullptr}, | |||
42113 | JS_FNSPEC("myStringifier", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&myStringifier_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("myStringifier"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&myStringifier_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
42114 | JS_FNSPEC("shortNameGetter", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&shortNameGetter_methodinfo), 1, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("shortNameGetter"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&shortNameGetter_methodinfo)}, 1, JSPROP_ENUMERATE , nullptr}, | |||
42115 | JS_FNSPEC("shortNamedSetter", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&shortNamedSetter_methodinfo), 2, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("shortNamedSetter"), {(GenericMethod< NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&shortNamedSetter_methodinfo)}, 2, JSPROP_ENUMERATE , nullptr}, | |||
42116 | JS_SYM_FNSPEC(iterator, nullptr, nullptr, 0, 0, "$ArrayValues"){JSFunctionSpec::Name(::JS::SymbolCode::iterator), {nullptr, nullptr }, 0, 0, "$ArrayValues"}, | |||
42117 | JS_FNSPEC("toString", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&myStringifier_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("toString"), {(GenericMethod<NormalThisPolicy , ThrowExceptions>), reinterpret_cast<const JSJitInfo*> (&myStringifier_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr }, | |||
42118 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr } | |||
42119 | }; | |||
42120 | ||||
42121 | ||||
42122 | static const Prefable<const JSFunctionSpec> sMethods[] = { | |||
42123 | { nullptr, &sMethods_specs[0] }, | |||
42124 | { nullptr, nullptr } | |||
42125 | }; | |||
42126 | ||||
42127 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
42128 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
42129 | static_assert(7 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
42130 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
42131 | ||||
42132 | static const JSPropertySpec sAttributes_specs[] = { | |||
42133 | JSPropertySpec::nativeAccessors("length", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &length_getterinfo, nullptr, nullptr), | |||
42134 | JS_PS_ENDJSPropertySpec::sentinel() | |||
42135 | }; | |||
42136 | ||||
42137 | ||||
42138 | static const Prefable<const JSPropertySpec> sAttributes[] = { | |||
42139 | { nullptr, &sAttributes_specs[0] }, | |||
42140 | { nullptr, nullptr } | |||
42141 | }; | |||
42142 | ||||
42143 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
42144 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
42145 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
42146 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
42147 | ||||
42148 | ||||
42149 | static uint16_t sNativeProperties_sortedPropertyIndices[8]; | |||
42150 | static PropertyInfo sNativeProperties_propertyInfos[8]; | |||
42151 | ||||
42152 | static const NativePropertiesN<2> sNativeProperties = { | |||
42153 | false, 0, | |||
42154 | false, 0, | |||
42155 | true, 0 /* sMethods */, | |||
42156 | true, 1 /* sAttributes */, | |||
42157 | false, 0, | |||
42158 | false, 0, | |||
42159 | false, 0, | |||
42160 | -1, | |||
42161 | 8, | |||
42162 | sNativeProperties_sortedPropertyIndices, | |||
42163 | { | |||
42164 | { sMethods, &sNativeProperties_propertyInfos[0] }, | |||
42165 | { sAttributes, &sNativeProperties_propertyInfos[7] } | |||
42166 | } | |||
42167 | }; | |||
42168 | static_assert(8 < 1ull << (CHAR_BIT8 * sizeof(sNativeProperties.propertyInfoCount)), | |||
42169 | "We have a property info count that is oversized"); | |||
42170 | ||||
42171 | static_assert(std::is_base_of_v<nsISupports, mozilla::dom::TestExampleProxyInterface>, | |||
42172 | "We don't support non-nsISupports native classes for " | |||
42173 | "proxy-based bindings yet"); | |||
42174 | ||||
42175 | ||||
42176 | class DOMProxyHandler : public mozilla::dom::DOMProxyHandler | |||
42177 | { | |||
42178 | public: | |||
42179 | explicit constexpr DOMProxyHandler() | |||
42180 | { | |||
42181 | } | |||
42182 | ||||
42183 | bool | |||
42184 | getOwnPropDescriptor(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, bool ignoreNamedProps, JS::MutableHandle<Maybe<JS::PropertyDescriptor>> desc) const override; | |||
42185 | ||||
42186 | bool | |||
42187 | defineProperty(JSContext* cx_, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, JS::Handle<JS::PropertyDescriptor> desc, JS::ObjectOpResult& opresult, bool* done) const override; | |||
42188 | ||||
42189 | using mozilla::dom::DOMProxyHandler::defineProperty; | |||
42190 | ||||
42191 | bool | |||
42192 | ownPropNames(JSContext* cx, JS::Handle<JSObject*> proxy, unsigned flags, JS::MutableHandleVector<jsid> props) const override; | |||
42193 | ||||
42194 | bool | |||
42195 | hasOwn(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, bool* bp) const override; | |||
42196 | ||||
42197 | bool | |||
42198 | get(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<JS::Value> receiver, JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const override; | |||
42199 | ||||
42200 | const char* | |||
42201 | className(JSContext* cx, JS::Handle<JSObject*> proxy) const override; | |||
42202 | ||||
42203 | bool | |||
42204 | finalizeInBackground(const JS::Value& priv) const override; | |||
42205 | ||||
42206 | void | |||
42207 | finalize(JS::GCContext* gcx, JSObject* proxy) const override; | |||
42208 | ||||
42209 | static const DOMProxyHandler* | |||
42210 | getInstance(); | |||
42211 | ||||
42212 | bool | |||
42213 | delete_(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, JS::ObjectOpResult& opresult) const override; | |||
42214 | ||||
42215 | bool | |||
42216 | getElements(JSContext* cx, JS::Handle<JSObject*> proxy, uint32_t begin, uint32_t end, js::ElementAdder* adder) const override; | |||
42217 | ||||
42218 | bool | |||
42219 | setCustom(JSContext* cx_, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, JS::Handle<JS::Value> v, bool* done) const override; | |||
42220 | ||||
42221 | size_t | |||
42222 | objectMoved(JSObject* obj, JSObject* old) const override; | |||
42223 | }; | |||
42224 | ||||
42225 | MOZ_ALWAYS_INLINEinline bool | |||
42226 | IsProxy(JSObject* obj) | |||
42227 | { | |||
42228 | return js::IsProxy(obj) && js::GetProxyHandler(obj) == DOMProxyHandler::getInstance(); | |||
42229 | } | |||
42230 | ||||
42231 | MOZ_ALWAYS_INLINEinline mozilla::dom::TestExampleProxyInterface* | |||
42232 | UnwrapProxy(JSObject* obj) | |||
42233 | { | |||
42234 | MOZ_ASSERT(js::IsProxy(obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(js::IsProxy(obj))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(js::IsProxy(obj)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::IsProxy(obj)" , "../TestExampleGenBinding.cpp", 42234); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "js::IsProxy(obj)" ")"); do { *((volatile int *)__null) = 42234; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42235 | if (js::GetProxyHandler(obj) != DOMProxyHandler::getInstance()) { | |||
42236 | MOZ_ASSERT(xpc::WrapperFactory::IsXrayWrapper(obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(xpc::WrapperFactory::IsXrayWrapper(obj))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(xpc::WrapperFactory::IsXrayWrapper(obj)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("xpc::WrapperFactory::IsXrayWrapper(obj)" , "../TestExampleGenBinding.cpp", 42236); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "xpc::WrapperFactory::IsXrayWrapper(obj)" ")" ); do { *((volatile int*)__null) = 42236; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
42237 | obj = js::UncheckedUnwrap(obj); | |||
42238 | } | |||
42239 | MOZ_ASSERT(IsProxy(obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsProxy(obj))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsProxy(obj)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("IsProxy(obj)", "../TestExampleGenBinding.cpp" , 42239); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsProxy(obj)" ")"); do { *((volatile int*)__null) = 42239; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
42240 | return static_cast<mozilla::dom::TestExampleProxyInterface*>(js::GetProxyReservedSlot(obj, DOM_OBJECT_SLOT0).toPrivate()); | |||
42241 | } | |||
42242 | ||||
42243 | static bool | |||
42244 | DeleteNamedProperty(JSContext* cx, JS::Handle<JSObject*> xray, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, JS::ObjectOpResult& opresult) | |||
42245 | { | |||
42246 | MOZ_ASSERT(xpc::WrapperFactory::IsXrayWrapper(xray))do { static_assert( mozilla::detail::AssertionConditionType< decltype(xpc::WrapperFactory::IsXrayWrapper(xray))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(xpc::WrapperFactory::IsXrayWrapper(xray)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("xpc::WrapperFactory::IsXrayWrapper(xray)" , "../TestExampleGenBinding.cpp", 42246); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "xpc::WrapperFactory::IsXrayWrapper(xray)" ")" ); do { *((volatile int*)__null) = 42246; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
42247 | MOZ_ASSERT(js::IsProxy(proxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(js::IsProxy(proxy))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(js::IsProxy(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::IsProxy(proxy)" , "../TestExampleGenBinding.cpp", 42247); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "js::IsProxy(proxy)" ")"); do { *((volatile int*)__null) = 42247; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42248 | MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" , "../TestExampleGenBinding.cpp", 42248); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ")"); do { *((volatile int*)__null) = 42248; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
42249 | JSAutoRealm ar(cx, proxy); | |||
42250 | bool deleteSucceeded = false; | |||
42251 | bool found = false; | |||
42252 | FakeString<char16_t> nomnom; | |||
42253 | bool isSymbol; | |||
42254 | if (!ConvertIdToString(cx, id, nomnom, isSymbol)) { | |||
42255 | return false; | |||
42256 | } | |||
42257 | if (!isSymbol) { | |||
42258 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42259 | // NOTE: This assert does NOT call the function. | |||
42260 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NamedDeleter(NonNullHelper(Constify(nomnom)), found))>, "Should be returning void here"); | |||
42261 | MOZ_KnownLive(self)(self)->NamedDeleter(NonNullHelper(Constify(nomnom)), found); | |||
42262 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42262); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42262; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42263 | } | |||
42264 | deleteSucceeded = true; | |||
42265 | if (!found || deleteSucceeded) { | |||
42266 | return opresult.succeed(); | |||
42267 | } | |||
42268 | return opresult.failCantDelete(); | |||
42269 | } | |||
42270 | ||||
42271 | const NativeNamedOrIndexedPropertyHooks sNativeNamedOrIndexedPropertyHooks = { | |||
42272 | binding_detail::ResolveOwnProperty, | |||
42273 | binding_detail::EnumerateOwnProperties, | |||
42274 | DeleteNamedProperty | |||
42275 | }; | |||
42276 | bool sNativePropertiesInited = false; | |||
42277 | const NativePropertyHooks sNativePropertyHooks = { | |||
42278 | &sNativeNamedOrIndexedPropertyHooks, | |||
42279 | { sNativeProperties.Upcast(), nullptr, &sNativePropertiesInited }, | |||
42280 | prototypes::id::TestExampleProxyInterface, | |||
42281 | constructors::id::TestExampleProxyInterface, | |||
42282 | &DefaultXrayExpandoObjectClass | |||
42283 | }; | |||
42284 | ||||
42285 | static const DOMInterfaceInfo sInterfaceObjectInfo = { | |||
42286 | { ThrowingConstructor, &sNativePropertyHooks }, | |||
42287 | JS::GetRealmFunctionPrototypeHandle, | |||
42288 | prototypes::id::TestExampleProxyInterface, | |||
42289 | PrototypeTraits<prototypes::id::TestExampleProxyInterface>::Depth, | |||
42290 | true, | |||
42291 | }; | |||
42292 | ||||
42293 | static const DOMIfaceAndProtoJSClass sPrototypeClass = { | |||
42294 | { | |||
42295 | "TestExampleProxyInterfacePrototype", | |||
42296 | JSCLASS_IS_DOMIFACEANDPROTOJSCLASSJSCLASS_USERBIT2 | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE0), | |||
42297 | JS_NULL_CLASS_OPS, | |||
42298 | JS_NULL_CLASS_SPEC, | |||
42299 | JS_NULL_CLASS_EXT, | |||
42300 | JS_NULL_OBJECT_OPS | |||
42301 | }, | |||
42302 | eInterfacePrototype, | |||
42303 | prototypes::id::TestExampleProxyInterface, | |||
42304 | PrototypeTraits<prototypes::id::TestExampleProxyInterface>::Depth, | |||
42305 | &sNativePropertyHooks, | |||
42306 | JS::GetRealmObjectPrototype | |||
42307 | }; | |||
42308 | ||||
42309 | static JS::Handle<JSObject*> | |||
42310 | GetProtoObjectHandle(JSContext* aCx); | |||
42311 | ||||
42312 | bool | |||
42313 | DOMProxyHandler::getOwnPropDescriptor(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, bool ignoreNamedProps, JS::MutableHandle<Maybe<JS::PropertyDescriptor>> desc) const | |||
42314 | { | |||
42315 | bool isXray = xpc::WrapperFactory::IsXrayWrapper(proxy); | |||
42316 | uint32_t index = GetArrayIndexFromId(id); | |||
42317 | if (IsArrayIndex(index)) { | |||
42318 | JS::Rooted<JS::Value> value(cx); | |||
42319 | uint32_t ix = index; | |||
42320 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42321 | bool found = false; | |||
42322 | int32_t result(MOZ_KnownLive(self)(self)->IndexedGetter(ix, found)); | |||
42323 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42323); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42323; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42324 | ||||
42325 | if (found) { | |||
42326 | value.setInt32(int32_t(result)); | |||
42327 | desc.set(mozilla::Some(JS::PropertyDescriptor::Data(value, { JS::PropertyAttribute::Configurable, JS::PropertyAttribute::Enumerable, JS::PropertyAttribute::Writable }))); | |||
42328 | return true; | |||
42329 | } | |||
42330 | } | |||
42331 | ||||
42332 | JS::Rooted<JSObject*> expando(cx); | |||
42333 | if (!isXray &&(expando = GetExpandoObject(proxy))) { | |||
42334 | if (!JS_GetOwnPropertyDescriptorById(cx, expando, id, desc)) { | |||
42335 | return false; | |||
42336 | } | |||
42337 | if (desc.isSome()) { | |||
42338 | return true; | |||
42339 | } | |||
42340 | } | |||
42341 | ||||
42342 | bool callNamedGetter = false; | |||
42343 | if (!IsArrayIndex(index) && !ignoreNamedProps) { | |||
42344 | bool hasOnProto; | |||
42345 | if (!HasPropertyOnPrototype(cx, proxy, id, &hasOnProto)) { | |||
42346 | return false; | |||
42347 | } | |||
42348 | callNamedGetter = !hasOnProto; | |||
42349 | } | |||
42350 | if (callNamedGetter) { | |||
42351 | JS::Rooted<JS::Value> value(cx); | |||
42352 | FakeString<char16_t> nom; | |||
42353 | bool isSymbol; | |||
42354 | if (!ConvertIdToString(cx, id, nom, isSymbol)) { | |||
42355 | return false; | |||
42356 | } | |||
42357 | if (!isSymbol) { | |||
42358 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42359 | bool found = false; | |||
42360 | int16_t result(MOZ_KnownLive(self)(self)->NamedGetter(NonNullHelper(Constify(nom)), found)); | |||
42361 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42361); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42361; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42362 | ||||
42363 | if (found) { | |||
42364 | value.setInt32(int32_t(result)); | |||
42365 | desc.set(mozilla::Some(JS::PropertyDescriptor::Data(value, { JS::PropertyAttribute::Configurable, JS::PropertyAttribute::Enumerable, JS::PropertyAttribute::Writable }))); | |||
42366 | return true; | |||
42367 | } | |||
42368 | } | |||
42369 | } | |||
42370 | ||||
42371 | desc.reset(); | |||
42372 | return true; | |||
42373 | } | |||
42374 | ||||
42375 | bool | |||
42376 | DOMProxyHandler::defineProperty(JSContext* cx_, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, JS::Handle<JS::PropertyDescriptor> desc, JS::ObjectOpResult& opresult, bool* done) const | |||
42377 | { | |||
42378 | uint32_t index = GetArrayIndexFromId(id); | |||
42379 | if (IsArrayIndex(index)) { | |||
42380 | JSContext* cx = cx_; | |||
42381 | *done = true; | |||
42382 | // https://webidl.spec.whatwg.org/#legacy-platform-object-defineownproperty | |||
42383 | // Step 1.1. The no-indexed-setter case is handled by step 1.2. | |||
42384 | if (!desc.isDataDescriptor()) { | |||
42385 | return opresult.failNotDataDescriptor(); | |||
42386 | } | |||
42387 | ||||
42388 | uint32_t y = index; | |||
42389 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42390 | JS::Rooted<JS::Value> rootedValue(cx, desc.value()); | |||
42391 | int32_t z; | |||
42392 | if (!ValueToPrimitive<int32_t, eDefault>(cx, desc.value(), "Value being assigned to TestExampleProxyInterface setter", &z)) { | |||
42393 | return false; | |||
42394 | } | |||
42395 | // NOTE: This assert does NOT call the function. | |||
42396 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->IndexedSetter(y, z))>, "Should be returning void here"); | |||
42397 | MOZ_KnownLive(self)(self)->IndexedSetter(y, z); | |||
42398 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42398); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42398; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42399 | return opresult.succeed(); | |||
42400 | } | |||
42401 | JSContext* cx = cx_; | |||
42402 | // https://webidl.spec.whatwg.org/#legacy-platform-object-defineownproperty | |||
42403 | // Step 2.2.2.1. | |||
42404 | if (!desc.isDataDescriptor()) { | |||
42405 | *done = true; | |||
42406 | return opresult.failNotDataDescriptor(); | |||
42407 | } | |||
42408 | FakeString<char16_t> me; | |||
42409 | bool isSymbol; | |||
42410 | if (!ConvertIdToString(cx, id, me, isSymbol)) { | |||
42411 | return false; | |||
42412 | } | |||
42413 | if (!isSymbol) { | |||
42414 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42415 | JS::Rooted<JS::Value> rootedValue(cx, desc.value()); | |||
42416 | int16_t value; | |||
42417 | if (!ValueToPrimitive<int16_t, eDefault>(cx, desc.value(), "Value being assigned to TestExampleProxyInterface setter", &value)) { | |||
42418 | return false; | |||
42419 | } | |||
42420 | // NOTE: This assert does NOT call the function. | |||
42421 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NamedSetter(NonNullHelper(Constify(me)), value))>, "Should be returning void here"); | |||
42422 | MOZ_KnownLive(self)(self)->NamedSetter(NonNullHelper(Constify(me)), value); | |||
42423 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42423); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42423; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42424 | *done = true; | |||
42425 | return opresult.succeed(); | |||
42426 | } | |||
42427 | return mozilla::dom::DOMProxyHandler::defineProperty(cx_, proxy, id, desc, opresult, done); | |||
42428 | } | |||
42429 | ||||
42430 | ||||
42431 | bool | |||
42432 | DOMProxyHandler::ownPropNames(JSContext* cx, JS::Handle<JSObject*> proxy, unsigned flags, JS::MutableHandleVector<jsid> props) const | |||
42433 | { | |||
42434 | bool isXray = xpc::WrapperFactory::IsXrayWrapper(proxy); | |||
42435 | ||||
42436 | uint32_t length = UnwrapProxy(proxy)->Length(); | |||
42437 | MOZ_ASSERT(int32_t(length) >= 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype(int32_t(length) >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(int32_t(length) >= 0))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("int32_t(length) >= 0" , "../TestExampleGenBinding.cpp", 42437); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "int32_t(length) >= 0" ")"); do { *((volatile int*)__null) = 42437; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42438 | for (int32_t i = 0; i < int32_t(length); ++i) { | |||
42439 | if (!props.append(JS::PropertyKey::Int(i))) { | |||
42440 | return false; | |||
42441 | } | |||
42442 | } | |||
42443 | ||||
42444 | nsTArray<nsString> names; | |||
42445 | UnwrapProxy(proxy)->GetSupportedNames(names); | |||
42446 | if (!AppendNamedPropertyIds(cx, proxy, names, false, props)) { | |||
42447 | return false; | |||
42448 | } | |||
42449 | ||||
42450 | JS::Rooted<JSObject*> expando(cx); | |||
42451 | if (!isXray &&(expando = DOMProxyHandler::GetExpandoObject(proxy)) && | |||
42452 | !js::GetPropertyKeys(cx, expando, flags, props)) { | |||
42453 | return false; | |||
42454 | } | |||
42455 | ||||
42456 | return true; | |||
42457 | } | |||
42458 | ||||
42459 | bool | |||
42460 | DOMProxyHandler::hasOwn(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, bool* bp) const | |||
42461 | { | |||
42462 | MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42463); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42463; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
42463 | "Should not have a XrayWrapper here")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42463); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42463; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42464 | uint32_t index = GetArrayIndexFromId(id); | |||
42465 | if (IsArrayIndex(index)) { | |||
42466 | bool found = false; | |||
42467 | uint32_t ix = index; | |||
42468 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42469 | int32_t result(MOZ_KnownLive(self)(self)->IndexedGetter(ix, found)); | |||
42470 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42470); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42470; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42471 | (void)result; | |||
42472 | ||||
42473 | *bp = found; | |||
42474 | return true; | |||
42475 | } | |||
42476 | ||||
42477 | ||||
42478 | JS::Rooted<JSObject*> expando(cx, GetExpandoObject(proxy)); | |||
42479 | if (expando) { | |||
42480 | bool b = true; | |||
42481 | bool ok = JS_HasPropertyById(cx, expando, id, &b); | |||
42482 | *bp = !!b; | |||
42483 | if (!ok || *bp) { | |||
42484 | return ok; | |||
42485 | } | |||
42486 | } | |||
42487 | ||||
42488 | bool hasOnProto; | |||
42489 | if (!HasPropertyOnPrototype(cx, proxy, id, &hasOnProto)) { | |||
42490 | return false; | |||
42491 | } | |||
42492 | if (!hasOnProto) { | |||
42493 | bool found = false; | |||
42494 | FakeString<char16_t> nom; | |||
42495 | bool isSymbol; | |||
42496 | if (!ConvertIdToString(cx, id, nom, isSymbol)) { | |||
42497 | return false; | |||
42498 | } | |||
42499 | if (!isSymbol) { | |||
42500 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42501 | int16_t result(MOZ_KnownLive(self)(self)->NamedGetter(NonNullHelper(Constify(nom)), found)); | |||
42502 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42502); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42502; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42503 | (void)result; | |||
42504 | } | |||
42505 | ||||
42506 | *bp = found; | |||
42507 | return true; | |||
42508 | } | |||
42509 | *bp = false; | |||
42510 | return true; | |||
42511 | } | |||
42512 | ||||
42513 | bool | |||
42514 | DOMProxyHandler::get(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<JS::Value> receiver, JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const | |||
42515 | { | |||
42516 | MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42517); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42517; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
42517 | "Should not have a XrayWrapper here")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42517); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42517; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42518 | ||||
42519 | uint32_t index = GetArrayIndexFromId(id); | |||
42520 | if (IsArrayIndex(index)) { | |||
42521 | uint32_t ix = index; | |||
42522 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42523 | bool found = false; | |||
42524 | int32_t result(MOZ_KnownLive(self)(self)->IndexedGetter(ix, found)); | |||
42525 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42525); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42525; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42526 | ||||
42527 | if (found) { | |||
42528 | vp.setInt32(int32_t(result)); | |||
42529 | return true; | |||
42530 | } | |||
42531 | // Even if we don't have this index, we don't forward the | |||
42532 | // get on to our expando object. | |||
42533 | } else { | |||
42534 | bool expandoHasProp = false; | |||
42535 | { // Scope for expando | |||
42536 | JS::Rooted<JSObject*> expando(cx, DOMProxyHandler::GetExpandoObject(proxy)); | |||
42537 | if (expando) { | |||
42538 | if (!JS_HasPropertyById(cx, expando, id, &expandoHasProp)) { | |||
42539 | return false; | |||
42540 | } | |||
42541 | ||||
42542 | if (expandoHasProp) { | |||
42543 | // Forward the get to the expando object, but our receiver is whatever our | |||
42544 | // receiver is. | |||
42545 | if (!JS_ForwardGetPropertyTo(cx, expando, id, receiver, vp)) { | |||
42546 | return false; | |||
42547 | } | |||
42548 | } | |||
42549 | } | |||
42550 | } | |||
42551 | ||||
42552 | if (expandoHasProp) { | |||
42553 | return true; | |||
42554 | } | |||
42555 | } | |||
42556 | ||||
42557 | bool foundOnPrototype; | |||
42558 | if (!GetPropertyOnPrototype(cx, proxy, receiver, id, &foundOnPrototype, vp)) { | |||
42559 | return false; | |||
42560 | } | |||
42561 | ||||
42562 | if (foundOnPrototype) { | |||
42563 | return true; | |||
42564 | } | |||
42565 | ||||
42566 | MOZ_ASSERT(vp.isUndefined())do { static_assert( mozilla::detail::AssertionConditionType< decltype(vp.isUndefined())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(vp.isUndefined()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("vp.isUndefined()" , "../TestExampleGenBinding.cpp", 42566); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "vp.isUndefined()" ")"); do { *((volatile int *)__null) = 42566; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42567 | if (!IsArrayIndex(index)) { | |||
42568 | FakeString<char16_t> nom; | |||
42569 | bool isSymbol; | |||
42570 | if (!ConvertIdToString(cx, id, nom, isSymbol)) { | |||
42571 | return false; | |||
42572 | } | |||
42573 | if (!isSymbol) { | |||
42574 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42575 | bool found = false; | |||
42576 | int16_t result(MOZ_KnownLive(self)(self)->NamedGetter(NonNullHelper(Constify(nom)), found)); | |||
42577 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42577); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42577; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42578 | ||||
42579 | if (found) { | |||
42580 | vp.setInt32(int32_t(result)); | |||
42581 | return true; | |||
42582 | } | |||
42583 | } | |||
42584 | } | |||
42585 | ||||
42586 | return true; | |||
42587 | } | |||
42588 | ||||
42589 | const char* | |||
42590 | DOMProxyHandler::className(JSContext* cx, JS::Handle<JSObject*> proxy) const | |||
42591 | { | |||
42592 | return "TestExampleProxyInterface"; | |||
42593 | } | |||
42594 | ||||
42595 | bool | |||
42596 | DOMProxyHandler::finalizeInBackground(const JS::Value& priv) const | |||
42597 | { | |||
42598 | return false; | |||
42599 | } | |||
42600 | ||||
42601 | void | |||
42602 | DOMProxyHandler::finalize(JS::GCContext* gcx, JSObject* proxy) const | |||
42603 | { | |||
42604 | mozilla::dom::TestExampleProxyInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleProxyInterface>(proxy); | |||
42605 | if (self) { | |||
42606 | JS::SetReservedSlot(proxy, DOM_OBJECT_SLOT0, JS::UndefinedValue()); | |||
42607 | ClearWrapper(self, self, proxy); | |||
42608 | if (size_t mallocBytes = BindingJSObjectMallocBytes(self)) { | |||
42609 | JS::RemoveAssociatedMemory(proxy, mallocBytes, | |||
42610 | JS::MemoryUse::DOMBinding); | |||
42611 | } | |||
42612 | AddForDeferredFinalization<mozilla::dom::TestExampleProxyInterface>(self); | |||
42613 | } | |||
42614 | } | |||
42615 | ||||
42616 | const DOMProxyHandler* | |||
42617 | DOMProxyHandler::getInstance() | |||
42618 | { | |||
42619 | static const DOMProxyHandler instance; | |||
42620 | return &instance; | |||
42621 | } | |||
42622 | ||||
42623 | bool | |||
42624 | DOMProxyHandler::delete_(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, JS::ObjectOpResult& opresult) const | |||
42625 | { | |||
42626 | MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42627); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42627; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
42627 | "Should not have a XrayWrapper here")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42627); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42627; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42628 | ||||
42629 | uint32_t index = GetArrayIndexFromId(id); | |||
42630 | if (IsArrayIndex(index)) { | |||
42631 | bool deleteSucceeded; | |||
42632 | bool found = false; | |||
42633 | uint32_t ix = index; | |||
42634 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42635 | int32_t result(MOZ_KnownLive(self)(self)->IndexedGetter(ix, found)); | |||
42636 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42636); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42636; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42637 | (void)result; | |||
42638 | deleteSucceeded = !found; | |||
42639 | return deleteSucceeded ? opresult.succeed() : opresult.failCantDelete(); | |||
42640 | } | |||
42641 | // Try named delete only if the named property visibility | |||
42642 | // algorithm says the property is visible. | |||
42643 | bool tryNamedDelete = true; | |||
42644 | { // Scope for expando | |||
42645 | JS::Rooted<JSObject*> expando(cx, DOMProxyHandler::GetExpandoObject(proxy)); | |||
42646 | if (expando) { | |||
42647 | bool hasProp; | |||
42648 | if (!JS_HasPropertyById(cx, expando, id, &hasProp)) { | |||
42649 | return false; | |||
42650 | } | |||
42651 | tryNamedDelete = !hasProp; | |||
42652 | } | |||
42653 | } | |||
42654 | if (tryNamedDelete) { | |||
42655 | bool hasOnProto; | |||
42656 | if (!HasPropertyOnPrototype(cx, proxy, id, &hasOnProto)) { | |||
42657 | return false; | |||
42658 | } | |||
42659 | tryNamedDelete = !hasOnProto; | |||
42660 | } | |||
42661 | if (tryNamedDelete) { | |||
42662 | bool found = false; | |||
42663 | bool deleteSucceeded; | |||
42664 | FakeString<char16_t> nomnom; | |||
42665 | bool isSymbol; | |||
42666 | if (!ConvertIdToString(cx, id, nomnom, isSymbol)) { | |||
42667 | return false; | |||
42668 | } | |||
42669 | if (!isSymbol) { | |||
42670 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42671 | // NOTE: This assert does NOT call the function. | |||
42672 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NamedDeleter(NonNullHelper(Constify(nomnom)), found))>, "Should be returning void here"); | |||
42673 | MOZ_KnownLive(self)(self)->NamedDeleter(NonNullHelper(Constify(nomnom)), found); | |||
42674 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42674); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42674; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42675 | } | |||
42676 | deleteSucceeded = true; | |||
42677 | if (found) { | |||
42678 | return deleteSucceeded ? opresult.succeed() : opresult.failCantDelete(); | |||
42679 | } | |||
42680 | } | |||
42681 | ||||
42682 | return dom::DOMProxyHandler::delete_(cx, proxy, id, opresult); | |||
42683 | } | |||
42684 | ||||
42685 | bool | |||
42686 | DOMProxyHandler::getElements(JSContext* cx, JS::Handle<JSObject*> proxy, uint32_t begin, uint32_t end, js::ElementAdder* adder) const | |||
42687 | { | |||
42688 | JS::Rooted<JS::Value> temp(cx); | |||
42689 | MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42690); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42690; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
42690 | "Should not have a XrayWrapper here")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42690); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42690; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42691 | ||||
42692 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42693 | uint32_t length = self->Length(); | |||
42694 | // Compute the end of the indices we'll get ourselves | |||
42695 | uint32_t ourEnd = std::max(begin, std::min(end, length)); | |||
42696 | ||||
42697 | for (uint32_t index = begin; index < ourEnd; ++index) { | |||
42698 | uint32_t ix = index; | |||
42699 | bool found = false; | |||
42700 | int32_t result(MOZ_KnownLive(self)(self)->IndexedGetter(ix, found)); | |||
42701 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42701); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42701; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42702 | ||||
42703 | MOZ_ASSERT(found)do { static_assert( mozilla::detail::AssertionConditionType< decltype(found)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(found))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("found", "../TestExampleGenBinding.cpp" , 42703); AnnotateMozCrashReason("MOZ_ASSERT" "(" "found" ")" ); do { *((volatile int*)__null) = 42703; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
42704 | temp.setInt32(int32_t(result)); | |||
42705 | if (!adder->append(cx, temp)) return false; | |||
42706 | continue; | |||
42707 | } | |||
42708 | ||||
42709 | if (end > ourEnd) { | |||
42710 | JS::Rooted<JSObject*> proto(cx); | |||
42711 | if (!js::GetObjectProto(cx, proxy, &proto)) { | |||
42712 | return false; | |||
42713 | } | |||
42714 | return js::GetElementsWithAdder(cx, proto, proxy, ourEnd, end, adder); | |||
42715 | } | |||
42716 | ||||
42717 | return true; | |||
42718 | } | |||
42719 | ||||
42720 | bool | |||
42721 | DOMProxyHandler::setCustom(JSContext* cx_, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, JS::Handle<JS::Value> v, bool* done) const | |||
42722 | { | |||
42723 | MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42724); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42724; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
42724 | "Should not have a XrayWrapper here")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!xpc::WrapperFactory::IsXrayWrapper(proxy))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(!xpc::WrapperFactory::IsXrayWrapper(proxy)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!xpc::WrapperFactory::IsXrayWrapper(proxy)" " (" "Should not have a XrayWrapper here" ")", "../TestExampleGenBinding.cpp" , 42724); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!xpc::WrapperFactory::IsXrayWrapper(proxy)" ") (" "Should not have a XrayWrapper here" ")"); do { *((volatile int*)__null) = 42724; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42725 | uint32_t index = GetArrayIndexFromId(id); | |||
42726 | if (IsArrayIndex(index)) { | |||
42727 | JSContext* cx = cx_; | |||
42728 | uint32_t y = index; | |||
42729 | mozilla::dom::TestExampleProxyInterface* self = UnwrapProxy(proxy); | |||
42730 | JS::Rooted<JS::Value> rootedValue(cx, v); | |||
42731 | int32_t z; | |||
42732 | if (!ValueToPrimitive<int32_t, eDefault>(cx, v, "Value being assigned to TestExampleProxyInterface setter", &z)) { | |||
42733 | return false; | |||
42734 | } | |||
42735 | // NOTE: This assert does NOT call the function. | |||
42736 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->IndexedSetter(y, z))>, "Should be returning void here"); | |||
42737 | MOZ_KnownLive(self)(self)->IndexedSetter(y, z); | |||
42738 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 42738); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 42738; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
42739 | *done = true; | |||
42740 | return true; | |||
42741 | } | |||
42742 | ||||
42743 | *done = false; | |||
42744 | return true; | |||
42745 | } | |||
42746 | ||||
42747 | size_t | |||
42748 | DOMProxyHandler::objectMoved(JSObject* obj, JSObject* old) const | |||
42749 | { | |||
42750 | mozilla::dom::TestExampleProxyInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleProxyInterface>(obj); | |||
42751 | if (self) { | |||
42752 | UpdateWrapper(self, self, obj, old); | |||
42753 | } | |||
42754 | ||||
42755 | return 0; | |||
42756 | } | |||
42757 | ||||
42758 | static const DOMJSClass sClass = { | |||
42759 | PROXY_CLASS_DEF("TestExampleProxyInterface",{"TestExampleProxyInterface", JSClass::NON_NATIVE | JSCLASS_IS_PROXY | JSCLASS_DELAY_METADATA_BUILDER | js::CheckProxyFlags<JSCLASS_IS_DOMJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(1)>(), &js::ProxyClassOps , JS_NULL_CLASS_SPEC, &js::ProxyClassExtension, &js:: ProxyObjectOps} | |||
42760 | JSCLASS_IS_DOMJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(1)){"TestExampleProxyInterface", JSClass::NON_NATIVE | JSCLASS_IS_PROXY | JSCLASS_DELAY_METADATA_BUILDER | js::CheckProxyFlags<JSCLASS_IS_DOMJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(1)>(), &js::ProxyClassOps , JS_NULL_CLASS_SPEC, &js::ProxyClassExtension, &js:: ProxyObjectOps}, | |||
42761 | { prototypes::id::TestExampleProxyInterface, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count }, | |||
42762 | std::is_base_of_v<nsISupports, mozilla::dom::TestExampleProxyInterface>, | |||
42763 | &sNativePropertyHooks, | |||
42764 | FindAssociatedGlobalForNative<mozilla::dom::TestExampleProxyInterface>::Get, | |||
42765 | GetProtoObjectHandle, | |||
42766 | GetCCParticipant<mozilla::dom::TestExampleProxyInterface>::Get(), | |||
42767 | nullptr, | |||
42768 | nullptr | |||
42769 | }; | |||
42770 | ||||
42771 | bool | |||
42772 | Wrap(JSContext* aCx, mozilla::dom::TestExampleProxyInterface* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector) | |||
42773 | { | |||
42774 | static_assert(!std::is_base_of_v<NonRefcountedDOMObject, mozilla::dom::TestExampleProxyInterface>, | |||
42775 | "Shouldn't have wrappercached things that are not refcounted."); | |||
42776 | static_assert(std::is_same_v<decltype(aObject), mozilla::dom::TestExampleProxyInterface*>); | |||
42777 | MOZ_ASSERT(ToSupportsIsCorrect(aObject))do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsCorrect(aObject))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(ToSupportsIsCorrect(aObject) ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "ToSupportsIsCorrect(aObject)", "../TestExampleGenBinding.cpp" , 42777); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsCorrect(aObject)" ")"); do { *((volatile int*)__null) = 42777; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
42778 | MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx))do { if (aGivenProto) { do { static_assert( mozilla::detail:: AssertionConditionType<decltype(js::IsObjectInContextCompartment (aGivenProto, aCx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(js::IsObjectInContextCompartment (aGivenProto, aCx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("js::IsObjectInContextCompartment(aGivenProto, aCx)", "../TestExampleGenBinding.cpp" , 42778); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(aGivenProto, aCx)" ")"); do { *((volatile int*)__null) = 42778; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); } } while (false); | |||
42779 | MOZ_ASSERT(!aCache->GetWrapper(),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 42781); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 42781; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
42780 | "You should probably not be using Wrap() directly; use "do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 42781); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 42781; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
42781 | "GetOrCreateDOMReflector instead")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 42781); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 42781; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42782 | ||||
42783 | MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" " (" "nsISupports must be on our primary inheritance chain" ")", "../TestExampleGenBinding.cpp" , 42784); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" ") (" "nsISupports must be on our primary inheritance chain" ")"); do { *((volatile int*)__null) = 42784; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
42784 | "nsISupports must be on our primary inheritance chain")do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" " (" "nsISupports must be on our primary inheritance chain" ")", "../TestExampleGenBinding.cpp" , 42784); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" ") (" "nsISupports must be on our primary inheritance chain" ")"); do { *((volatile int*)__null) = 42784; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
42785 | ||||
42786 | // If the wrapper cache contains a dead reflector then finalize that | |||
42787 | // now, ensuring that the finalizer for the old reflector always | |||
42788 | // runs before the new reflector is created and attached. This | |||
42789 | // avoids the awkward situation where there are multiple reflector | |||
42790 | // objects that contain pointers to the same native. | |||
42791 | ||||
42792 | if (JSObject* oldReflector = aCache->GetWrapperMaybeDead()) { | |||
42793 | DOMProxyHandler::getInstance()->finalize(nullptr /* unused */, oldReflector); | |||
42794 | MOZ_ASSERT(!aCache->GetWrapperMaybeDead())do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapperMaybeDead())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapperMaybeDead ()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("!aCache->GetWrapperMaybeDead()", "../TestExampleGenBinding.cpp" , 42794); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapperMaybeDead()" ")"); do { *((volatile int*)__null) = 42794; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
42795 | } | |||
42796 | ||||
42797 | JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject())); | |||
42798 | if (!global) { | |||
42799 | return false; | |||
42800 | } | |||
42801 | MOZ_ASSERT(JS_IsGlobalObject(global))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsGlobalObject(global))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsGlobalObject(global)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsGlobalObject(global)" , "../TestExampleGenBinding.cpp", 42801); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsGlobalObject(global)" ")"); do { *((volatile int*)__null) = 42801; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
42802 | JS::AssertObjectIsNotGray(global); | |||
42803 | ||||
42804 | // That might have ended up wrapping us already, due to the wonders | |||
42805 | // of XBL. Check for that, and bail out as needed. | |||
42806 | aReflector.set(aCache->GetWrapper()); | |||
42807 | if (aReflector) { | |||
42808 | #ifdef DEBUG1 | |||
42809 | AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto); | |||
42810 | #endif // DEBUG | |||
42811 | return true; | |||
42812 | } | |||
42813 | ||||
42814 | JSAutoRealm ar(aCx, global); | |||
42815 | JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx); | |||
42816 | if (!canonicalProto) { | |||
42817 | return false; | |||
42818 | } | |||
42819 | JS::Rooted<JSObject*> proto(aCx); | |||
42820 | if (aGivenProto) { | |||
42821 | proto = aGivenProto; | |||
42822 | // Unfortunately, while aGivenProto was in the compartment of aCx | |||
42823 | // coming in, we changed compartments to that of "parent" so may need | |||
42824 | // to wrap the proto here. | |||
42825 | if (js::GetContextCompartment(aCx) != JS::GetCompartment(proto)) { | |||
42826 | if (!JS_WrapObject(aCx, &proto)) { | |||
42827 | return false; | |||
42828 | } | |||
42829 | } | |||
42830 | } else { | |||
42831 | proto = canonicalProto; | |||
42832 | } | |||
42833 | ||||
42834 | BindingJSObjectCreator<mozilla::dom::TestExampleProxyInterface> creator(aCx); | |||
42835 | creator.CreateProxyObject(aCx, &sClass.mBase, DOMProxyHandler::getInstance(), | |||
42836 | proto, /* aLazyProto = */ false, | |||
42837 | aObject, JS::UndefinedHandleValue, aReflector); | |||
42838 | if (!aReflector) { | |||
42839 | return false; | |||
42840 | } | |||
42841 | ||||
42842 | aCache->SetWrapper(aReflector); | |||
42843 | creator.InitializationSucceeded(); | |||
42844 | ||||
42845 | MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&do { static_assert( mozilla::detail::AssertionConditionType< decltype(aCache->GetWrapperPreserveColor() && aCache ->GetWrapperPreserveColor() == aReflector)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aCache->GetWrapperPreserveColor () && aCache->GetWrapperPreserveColor() == aReflector ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" , "../TestExampleGenBinding.cpp", 42846); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" ")"); do { *((volatile int*)__null) = 42846; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
42846 | aCache->GetWrapperPreserveColor() == aReflector)do { static_assert( mozilla::detail::AssertionConditionType< decltype(aCache->GetWrapperPreserveColor() && aCache ->GetWrapperPreserveColor() == aReflector)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aCache->GetWrapperPreserveColor () && aCache->GetWrapperPreserveColor() == aReflector ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" , "../TestExampleGenBinding.cpp", 42846); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" ")"); do { *((volatile int*)__null) = 42846; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
42847 | // If proto != canonicalProto, we have to preserve our wrapper; | |||
42848 | // otherwise we won't be able to properly recreate it later, since | |||
42849 | // we won't know what proto to use. Note that we don't check | |||
42850 | // aGivenProto here, since it's entirely possible (and even | |||
42851 | // somewhat common) to have a non-null aGivenProto which is the | |||
42852 | // same as canonicalProto. | |||
42853 | if (proto != canonicalProto) { | |||
42854 | PreserveWrapper(aObject); | |||
42855 | } | |||
42856 | ||||
42857 | return true; | |||
42858 | } | |||
42859 | ||||
42860 | void | |||
42861 | CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, DefineInterfaceProperty aDefineOnGlobal) | |||
42862 | { | |||
42863 | JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::TestExampleProxyInterface); | |||
42864 | JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::TestExampleProxyInterface); | |||
42865 | ||||
42866 | JS::Handle<JSObject*> parentProto(JS::GetRealmObjectPrototypeHandle(aCx)); | |||
42867 | if (!parentProto) { | |||
42868 | return; | |||
42869 | } | |||
42870 | ||||
42871 | JS::Handle<JSObject*> constructorProto(JS::GetRealmFunctionPrototypeHandle(aCx)); | |||
42872 | if (!constructorProto) { | |||
42873 | return; | |||
42874 | } | |||
42875 | ||||
42876 | dom::CreateInterfaceObjects(aCx, aGlobal, parentProto, | |||
42877 | &sPrototypeClass, protoCache, | |||
42878 | constructorProto, &sInterfaceObjectInfo, 0, false, Span<const LegacyFactoryFunction, 0>{}, | |||
42879 | interfaceCache, | |||
42880 | sNativeProperties.Upcast(), | |||
42881 | nullptr, | |||
42882 | "TestExampleProxyInterface", | |||
42883 | aDefineOnGlobal != DefineInterfaceProperty::No, | |||
42884 | nullptr, | |||
42885 | false, | |||
42886 | nullptr); | |||
42887 | } | |||
42888 | ||||
42889 | static JS::Handle<JSObject*> | |||
42890 | GetProtoObjectHandle(JSContext* aCx) | |||
42891 | { | |||
42892 | /* Get the interface prototype object for this class. This will create the | |||
42893 | object as needed. */ | |||
42894 | return GetPerInterfaceObjectHandle(aCx, prototypes::id::TestExampleProxyInterface, | |||
42895 | &CreateInterfaceObjects, | |||
42896 | DefineInterfaceProperty::CheckExposure); | |||
42897 | ||||
42898 | } | |||
42899 | ||||
42900 | JS::Handle<JSObject*> | |||
42901 | GetConstructorObjectHandle(JSContext* aCx) | |||
42902 | { | |||
42903 | /* Get the interface object for this class. This will create the object as | |||
42904 | needed. */ | |||
42905 | ||||
42906 | return GetPerInterfaceObjectHandle(aCx, constructors::id::TestExampleProxyInterface, | |||
42907 | &CreateInterfaceObjects, | |||
42908 | DefineInterfaceProperty::CheckExposure); | |||
42909 | } | |||
42910 | ||||
42911 | } // namespace TestExampleProxyInterface_Binding | |||
42912 | ||||
42913 | ||||
42914 | ||||
42915 | namespace TestExampleThrowingConstructorInterface_Binding { | |||
42916 | ||||
42917 | static bool | |||
42918 | _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val) | |||
42919 | { | |||
42920 | mozilla::dom::TestExampleThrowingConstructorInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleThrowingConstructorInterface>(obj); | |||
42921 | // We don't want to preserve if we don't have a wrapper, and we | |||
42922 | // obviously can't preserve if we're not initialized. | |||
42923 | if (self && self->GetWrapperPreserveColor()) { | |||
42924 | PreserveWrapper(self); | |||
42925 | } | |||
42926 | return true; | |||
42927 | } | |||
42928 | ||||
42929 | static void | |||
42930 | _finalize(JS::GCContext* gcx, JSObject* obj) | |||
42931 | { | |||
42932 | mozilla::dom::TestExampleThrowingConstructorInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleThrowingConstructorInterface>(obj); | |||
42933 | if (self) { | |||
42934 | JS::SetReservedSlot(obj, DOM_OBJECT_SLOT0, JS::UndefinedValue()); | |||
42935 | ClearWrapper(self, self, obj); | |||
42936 | if (size_t mallocBytes = BindingJSObjectMallocBytes(self)) { | |||
42937 | JS::RemoveAssociatedMemory(obj, mallocBytes, | |||
42938 | JS::MemoryUse::DOMBinding); | |||
42939 | } | |||
42940 | AddForDeferredFinalization<mozilla::dom::TestExampleThrowingConstructorInterface>(self); | |||
42941 | } | |||
42942 | } | |||
42943 | ||||
42944 | static nsWrapperCache* | |||
42945 | _getWrapperCache(JS::Handle<JSObject*> obj) | |||
42946 | { | |||
42947 | mozilla::dom::TestExampleThrowingConstructorInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleThrowingConstructorInterface>(obj); | |||
42948 | return self; | |||
42949 | } | |||
42950 | ||||
42951 | static size_t | |||
42952 | _objectMoved(JSObject* obj, JSObject* old) | |||
42953 | { | |||
42954 | mozilla::dom::TestExampleThrowingConstructorInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleThrowingConstructorInterface>(obj); | |||
42955 | if (self) { | |||
42956 | UpdateWrapper(self, self, obj, old); | |||
42957 | } | |||
42958 | ||||
42959 | return 0; | |||
42960 | } | |||
42961 | ||||
42962 | bool sNativePropertiesInited = false; | |||
42963 | const NativePropertyHooks sNativePropertyHooks = { | |||
42964 | nullptr, | |||
42965 | { nullptr, nullptr, &sNativePropertiesInited }, | |||
42966 | prototypes::id::TestExampleThrowingConstructorInterface, | |||
42967 | constructors::id::TestExampleThrowingConstructorInterface, | |||
42968 | &DefaultXrayExpandoObjectClass | |||
42969 | }; | |||
42970 | ||||
42971 | static bool | |||
42972 | _constructor(JSContext* cx_, unsigned argc, JS::Value* vp) | |||
42973 | { | |||
42974 | BindingCallContext cx(cx_, "TestExampleThrowingConstructorInterface constructor"); | |||
42975 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject42977( cx, "TestExampleThrowingConstructorInterface" , "constructor", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
42976 | "TestExampleThrowingConstructorInterface", "constructor", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject42977( cx, "TestExampleThrowingConstructorInterface" , "constructor", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
42977 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject42977( cx, "TestExampleThrowingConstructorInterface" , "constructor", JS::ProfilingCategoryPair::DOM, uint32_t(js:: ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
42978 | ||||
42979 | JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||
42980 | JS::Rooted<JSObject*> obj(cx, &args.callee()); | |||
42981 | if (!args.isConstructing()) { | |||
42982 | return ThrowConstructorWithoutNew(cx, "TestExampleThrowingConstructorInterface"); | |||
42983 | } | |||
42984 | ||||
42985 | JS::Rooted<JSObject*> desiredProto(cx); | |||
42986 | if (!GetDesiredProto(cx, args, | |||
42987 | prototypes::id::TestExampleThrowingConstructorInterface, | |||
42988 | CreateInterfaceObjects, | |||
42989 | &desiredProto)) { | |||
42990 | return false; | |||
42991 | } | |||
42992 | ||||
42993 | unsigned argcount = std::min(args.length(), 2u); | |||
42994 | switch (argcount) { | |||
42995 | case 0: { | |||
42996 | GlobalObject global(cx, obj); | |||
42997 | if (global.Failed()) { | |||
42998 | return false; | |||
42999 | } | |||
43000 | ||||
43001 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
43002 | Maybe<JSAutoRealm> ar; | |||
43003 | if (objIsXray) { | |||
43004 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
43005 | // we know Xrays have no dynamic unwrap behavior. | |||
43006 | obj = js::CheckedUnwrapStatic(obj); | |||
43007 | if (!obj) { | |||
43008 | return false; | |||
43009 | } | |||
43010 | ar.emplace(cx, obj); | |||
43011 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
43012 | return false; | |||
43013 | } | |||
43014 | } | |||
43015 | FastErrorResult rv; | |||
43016 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleThrowingConstructorInterface>(mozilla::dom::TestExampleThrowingConstructorInterface::Constructor(global, rv))); | |||
43017 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor" )), 0))) { | |||
43018 | return false; | |||
43019 | } | |||
43020 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43020); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43020; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43021 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
43022 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
43023 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
43024 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43024); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 43024; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43025 | return false; | |||
43026 | } | |||
43027 | return true; | |||
43028 | break; | |||
43029 | } | |||
43030 | case 1: { | |||
43031 | if (args[0].isNullOrUndefined()) { | |||
43032 | mozilla::dom::TestInterface* arg0; | |||
43033 | arg0 = nullptr; | |||
43034 | GlobalObject global(cx, obj); | |||
43035 | if (global.Failed()) { | |||
43036 | return false; | |||
43037 | } | |||
43038 | ||||
43039 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
43040 | Maybe<JSAutoRealm> ar; | |||
43041 | if (objIsXray) { | |||
43042 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
43043 | // we know Xrays have no dynamic unwrap behavior. | |||
43044 | obj = js::CheckedUnwrapStatic(obj); | |||
43045 | if (!obj) { | |||
43046 | return false; | |||
43047 | } | |||
43048 | ar.emplace(cx, obj); | |||
43049 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
43050 | return false; | |||
43051 | } | |||
43052 | } | |||
43053 | FastErrorResult rv; | |||
43054 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleThrowingConstructorInterface>(mozilla::dom::TestExampleThrowingConstructorInterface::Constructor(global, MOZ_KnownLive(Constify(arg0))(Constify(arg0)), rv))); | |||
43055 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor" )), 0))) { | |||
43056 | return false; | |||
43057 | } | |||
43058 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43058); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43058; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43059 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
43060 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
43061 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
43062 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43062); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 43062; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43063 | return false; | |||
43064 | } | |||
43065 | return true; | |||
43066 | } | |||
43067 | if (args[0].isObject()) { | |||
43068 | do { | |||
43069 | mozilla::dom::TestInterface* arg0; | |||
43070 | { | |||
43071 | // Our JSContext should be in the right global to do unwrapping in. | |||
43072 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[0], arg0, cx); | |||
43073 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
43074 | break; | |||
43075 | } | |||
43076 | } | |||
43077 | GlobalObject global(cx, obj); | |||
43078 | if (global.Failed()) { | |||
43079 | return false; | |||
43080 | } | |||
43081 | ||||
43082 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
43083 | Maybe<JSAutoRealm> ar; | |||
43084 | if (objIsXray) { | |||
43085 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
43086 | // we know Xrays have no dynamic unwrap behavior. | |||
43087 | obj = js::CheckedUnwrapStatic(obj); | |||
43088 | if (!obj) { | |||
43089 | return false; | |||
43090 | } | |||
43091 | ar.emplace(cx, obj); | |||
43092 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
43093 | return false; | |||
43094 | } | |||
43095 | } | |||
43096 | FastErrorResult rv; | |||
43097 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleThrowingConstructorInterface>(mozilla::dom::TestExampleThrowingConstructorInterface::Constructor(global, MOZ_KnownLive(Constify(arg0))(Constify(arg0)), rv))); | |||
43098 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor" )), 0))) { | |||
43099 | return false; | |||
43100 | } | |||
43101 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43101); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43101; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43102 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
43103 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
43104 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
43105 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43105); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 43105; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43106 | return false; | |||
43107 | } | |||
43108 | return true; | |||
43109 | } while (false); | |||
43110 | do { | |||
43111 | RootedSpiderMonkeyInterface<ArrayBuffer> arg0(cx); | |||
43112 | if (!arg0.Init(&args[0].toObject())) { | |||
43113 | break; | |||
43114 | } | |||
43115 | if (JS::IsSharedArrayBufferObject(arg0.Obj())) { | |||
43116 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
43117 | return false; | |||
43118 | } | |||
43119 | if (JS::IsLargeArrayBufferMaybeShared(arg0.Obj())) { | |||
43120 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
43121 | return false; | |||
43122 | } | |||
43123 | if (JS::IsResizableArrayBufferMaybeShared(arg0.Obj())) { | |||
43124 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
43125 | return false; | |||
43126 | } | |||
43127 | GlobalObject global(cx, obj); | |||
43128 | if (global.Failed()) { | |||
43129 | return false; | |||
43130 | } | |||
43131 | ||||
43132 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
43133 | Maybe<JSAutoRealm> ar; | |||
43134 | if (objIsXray) { | |||
43135 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
43136 | // we know Xrays have no dynamic unwrap behavior. | |||
43137 | obj = js::CheckedUnwrapStatic(obj); | |||
43138 | if (!obj) { | |||
43139 | return false; | |||
43140 | } | |||
43141 | ar.emplace(cx, obj); | |||
43142 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
43143 | return false; | |||
43144 | } | |||
43145 | if (!arg0.WrapIntoNewCompartment(cx)) { | |||
43146 | return false; | |||
43147 | } | |||
43148 | } | |||
43149 | FastErrorResult rv; | |||
43150 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleThrowingConstructorInterface>(mozilla::dom::TestExampleThrowingConstructorInterface::Constructor(global, Constify(arg0), rv))); | |||
43151 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor" )), 0))) { | |||
43152 | return false; | |||
43153 | } | |||
43154 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43154); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43154; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43155 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
43156 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
43157 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
43158 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43158); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 43158; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43159 | return false; | |||
43160 | } | |||
43161 | return true; | |||
43162 | } while (false); | |||
43163 | do { | |||
43164 | RootedSpiderMonkeyInterface<Uint8Array> arg0(cx); | |||
43165 | if (!arg0.Init(&args[0].toObject())) { | |||
43166 | break; | |||
43167 | } | |||
43168 | if (JS::IsArrayBufferViewShared(arg0.Obj())) { | |||
43169 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_SHARED>("Argument 1"); | |||
43170 | return false; | |||
43171 | } | |||
43172 | if (JS::IsLargeArrayBufferView(arg0.Obj())) { | |||
43173 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_LARGE>("Argument 1"); | |||
43174 | return false; | |||
43175 | } | |||
43176 | if (JS::IsResizableArrayBufferView(arg0.Obj())) { | |||
43177 | cx.ThrowErrorMessage<MSG_TYPEDARRAY_IS_RESIZABLE>("Argument 1"); | |||
43178 | return false; | |||
43179 | } | |||
43180 | GlobalObject global(cx, obj); | |||
43181 | if (global.Failed()) { | |||
43182 | return false; | |||
43183 | } | |||
43184 | ||||
43185 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
43186 | Maybe<JSAutoRealm> ar; | |||
43187 | if (objIsXray) { | |||
43188 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
43189 | // we know Xrays have no dynamic unwrap behavior. | |||
43190 | obj = js::CheckedUnwrapStatic(obj); | |||
43191 | if (!obj) { | |||
43192 | return false; | |||
43193 | } | |||
43194 | ar.emplace(cx, obj); | |||
43195 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
43196 | return false; | |||
43197 | } | |||
43198 | if (!arg0.WrapIntoNewCompartment(cx)) { | |||
43199 | return false; | |||
43200 | } | |||
43201 | } | |||
43202 | FastErrorResult rv; | |||
43203 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleThrowingConstructorInterface>(mozilla::dom::TestExampleThrowingConstructorInterface::Constructor(global, Constify(arg0), rv))); | |||
43204 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor" )), 0))) { | |||
43205 | return false; | |||
43206 | } | |||
43207 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43207); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43207; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43208 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
43209 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
43210 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
43211 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43211); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 43211; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43212 | return false; | |||
43213 | } | |||
43214 | return true; | |||
43215 | } while (false); | |||
43216 | } | |||
43217 | GlobalObject global(cx, obj); | |||
43218 | if (global.Failed()) { | |||
43219 | return false; | |||
43220 | } | |||
43221 | ||||
43222 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
43223 | binding_detail::FakeString<char16_t> arg0; | |||
43224 | if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) { | |||
43225 | return false; | |||
43226 | } | |||
43227 | Maybe<JSAutoRealm> ar; | |||
43228 | if (objIsXray) { | |||
43229 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
43230 | // we know Xrays have no dynamic unwrap behavior. | |||
43231 | obj = js::CheckedUnwrapStatic(obj); | |||
43232 | if (!obj) { | |||
43233 | return false; | |||
43234 | } | |||
43235 | ar.emplace(cx, obj); | |||
43236 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
43237 | return false; | |||
43238 | } | |||
43239 | } | |||
43240 | FastErrorResult rv; | |||
43241 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleThrowingConstructorInterface>(mozilla::dom::TestExampleThrowingConstructorInterface::Constructor(global, NonNullHelper(Constify(arg0)), rv))); | |||
43242 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor" )), 0))) { | |||
43243 | return false; | |||
43244 | } | |||
43245 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43245); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43245; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43246 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
43247 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
43248 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
43249 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43249); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 43249; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43250 | return false; | |||
43251 | } | |||
43252 | return true; | |||
43253 | break; | |||
43254 | } | |||
43255 | case 2: { | |||
43256 | uint32_t arg0; | |||
43257 | if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], "Argument 1", &arg0)) { | |||
43258 | return false; | |||
43259 | } | |||
43260 | if (args[1].isObject()) { | |||
43261 | do { | |||
43262 | NonNull<mozilla::dom::TestInterface> arg1; | |||
43263 | { | |||
43264 | // Our JSContext should be in the right global to do unwrapping in. | |||
43265 | nsresult rv = UnwrapObject<prototypes::id::TestInterface, mozilla::dom::TestInterface>(args[1], arg1, cx); | |||
43266 | if (NS_FAILED(rv)((bool)(__builtin_expect(!!(NS_FAILED_impl(rv)), 0)))) { | |||
43267 | break; | |||
43268 | } | |||
43269 | } | |||
43270 | GlobalObject global(cx, obj); | |||
43271 | if (global.Failed()) { | |||
43272 | return false; | |||
43273 | } | |||
43274 | ||||
43275 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
43276 | Maybe<JSAutoRealm> ar; | |||
43277 | if (objIsXray) { | |||
43278 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
43279 | // we know Xrays have no dynamic unwrap behavior. | |||
43280 | obj = js::CheckedUnwrapStatic(obj); | |||
43281 | if (!obj) { | |||
43282 | return false; | |||
43283 | } | |||
43284 | ar.emplace(cx, obj); | |||
43285 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
43286 | return false; | |||
43287 | } | |||
43288 | } | |||
43289 | FastErrorResult rv; | |||
43290 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleThrowingConstructorInterface>(mozilla::dom::TestExampleThrowingConstructorInterface::Constructor(global, arg0, MOZ_KnownLive(NonNullHelper(arg1))(NonNullHelper(arg1)), rv))); | |||
43291 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor" )), 0))) { | |||
43292 | return false; | |||
43293 | } | |||
43294 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43294); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43294; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43295 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
43296 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
43297 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
43298 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43298); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 43298; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43299 | return false; | |||
43300 | } | |||
43301 | return true; | |||
43302 | } while (false); | |||
43303 | } | |||
43304 | GlobalObject global(cx, obj); | |||
43305 | if (global.Failed()) { | |||
43306 | return false; | |||
43307 | } | |||
43308 | ||||
43309 | bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj); | |||
43310 | Nullable<bool> arg1; | |||
43311 | if (args[1].isNullOrUndefined()) { | |||
43312 | arg1.SetNull(); | |||
43313 | } else if (!ValueToPrimitive<bool, eDefault>(cx, args[1], "Argument 2", &arg1.SetValue())) { | |||
43314 | return false; | |||
43315 | } | |||
43316 | Maybe<JSAutoRealm> ar; | |||
43317 | if (objIsXray) { | |||
43318 | // Since our object is an Xray, we can just CheckedUnwrapStatic: | |||
43319 | // we know Xrays have no dynamic unwrap behavior. | |||
43320 | obj = js::CheckedUnwrapStatic(obj); | |||
43321 | if (!obj) { | |||
43322 | return false; | |||
43323 | } | |||
43324 | ar.emplace(cx, obj); | |||
43325 | if (!JS_WrapObject(cx, &desiredProto)) { | |||
43326 | return false; | |||
43327 | } | |||
43328 | } | |||
43329 | FastErrorResult rv; | |||
43330 | auto result(StrongOrRawPtr<mozilla::dom::TestExampleThrowingConstructorInterface>(mozilla::dom::TestExampleThrowingConstructorInterface::Constructor(global, arg0, Constify(arg1), rv))); | |||
43331 | if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor"))(__builtin_expect(!!(rv.MaybeSetPendingException(cx, "TestExampleThrowingConstructorInterface constructor" )), 0))) { | |||
43332 | return false; | |||
43333 | } | |||
43334 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43334); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43334; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43335 | static_assert(!std::is_pointer_v<decltype(result)>, | |||
43336 | "NewObject implies that we need to keep the object alive with a strong reference."); | |||
43337 | if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) { | |||
43338 | MOZ_ASSERT(JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsExceptionPending(cx)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43338); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsExceptionPending(cx)" ")"); do { *((volatile int*)__null) = 43338; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43339 | return false; | |||
43340 | } | |||
43341 | return true; | |||
43342 | break; | |||
43343 | } | |||
43344 | default: { | |||
43345 | // Using nsPrintfCString here would require including that | |||
43346 | // header. Let's not worry about it. | |||
43347 | nsAutoCString argCountStr; | |||
43348 | argCountStr.AppendPrintf("%u", args.length()); | |||
43349 | return cx.ThrowErrorMessage<MSG_INVALID_OVERLOAD_ARGCOUNT>(argCountStr.get()); | |||
43350 | } | |||
43351 | } | |||
43352 | MOZ_CRASH("We have an always-returning default case")do { do { } while (false); MOZ_ReportCrash("" "We have an always-returning default case" , "../TestExampleGenBinding.cpp", 43352); AnnotateMozCrashReason ("MOZ_CRASH(" "We have an always-returning default case" ")") ; do { *((volatile int*)__null) = 43352; __attribute__((nomerge )) ::abort(); } while (false); } while (false); | |||
43353 | return false; | |||
43354 | } | |||
43355 | ||||
43356 | static const DOMInterfaceInfo sInterfaceObjectInfo = { | |||
43357 | { _constructor, &sNativePropertyHooks }, | |||
43358 | JS::GetRealmFunctionPrototypeHandle, | |||
43359 | prototypes::id::TestExampleThrowingConstructorInterface, | |||
43360 | PrototypeTraits<prototypes::id::TestExampleThrowingConstructorInterface>::Depth, | |||
43361 | true, | |||
43362 | }; | |||
43363 | ||||
43364 | static const DOMIfaceAndProtoJSClass sPrototypeClass = { | |||
43365 | { | |||
43366 | "TestExampleThrowingConstructorInterfacePrototype", | |||
43367 | JSCLASS_IS_DOMIFACEANDPROTOJSCLASSJSCLASS_USERBIT2 | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE0), | |||
43368 | JS_NULL_CLASS_OPS, | |||
43369 | JS_NULL_CLASS_SPEC, | |||
43370 | JS_NULL_CLASS_EXT, | |||
43371 | JS_NULL_OBJECT_OPS | |||
43372 | }, | |||
43373 | eInterfacePrototype, | |||
43374 | prototypes::id::TestExampleThrowingConstructorInterface, | |||
43375 | PrototypeTraits<prototypes::id::TestExampleThrowingConstructorInterface>::Depth, | |||
43376 | &sNativePropertyHooks, | |||
43377 | JS::GetRealmObjectPrototype | |||
43378 | }; | |||
43379 | ||||
43380 | static JS::Handle<JSObject*> | |||
43381 | GetProtoObjectHandle(JSContext* aCx); | |||
43382 | ||||
43383 | static const JSClassOps sClassOps = { | |||
43384 | _addProperty, /* addProperty */ | |||
43385 | nullptr, /* delProperty */ | |||
43386 | nullptr, /* enumerate */ | |||
43387 | nullptr, /* newEnumerate */ | |||
43388 | nullptr, /* resolve */ | |||
43389 | nullptr, /* mayResolve */ | |||
43390 | _finalize, /* finalize */ | |||
43391 | nullptr, /* call */ | |||
43392 | nullptr, /* construct */ | |||
43393 | nullptr, /* trace */ | |||
43394 | }; | |||
43395 | ||||
43396 | static const js::ClassExtension sClassExtension = { | |||
43397 | _objectMoved /* objectMovedOp */ | |||
43398 | }; | |||
43399 | ||||
43400 | static const DOMJSClass sClass = { | |||
43401 | { "TestExampleThrowingConstructorInterface", | |||
43402 | JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1), | |||
43403 | &sClassOps, | |||
43404 | JS_NULL_CLASS_SPEC, | |||
43405 | &sClassExtension, | |||
43406 | JS_NULL_OBJECT_OPS | |||
43407 | }, | |||
43408 | { prototypes::id::TestExampleThrowingConstructorInterface, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count }, | |||
43409 | std::is_base_of_v<nsISupports, mozilla::dom::TestExampleThrowingConstructorInterface>, | |||
43410 | &sNativePropertyHooks, | |||
43411 | FindAssociatedGlobalForNative<mozilla::dom::TestExampleThrowingConstructorInterface>::Get, | |||
43412 | GetProtoObjectHandle, | |||
43413 | GetCCParticipant<mozilla::dom::TestExampleThrowingConstructorInterface>::Get(), | |||
43414 | nullptr, | |||
43415 | _getWrapperCache | |||
43416 | }; | |||
43417 | static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS1, | |||
43418 | "Must have the right minimal number of reserved slots."); | |||
43419 | static_assert(1 >= 1, | |||
43420 | "Must have enough reserved slots."); | |||
43421 | ||||
43422 | bool | |||
43423 | Wrap(JSContext* aCx, mozilla::dom::TestExampleThrowingConstructorInterface* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector) | |||
43424 | { | |||
43425 | static_assert(!std::is_base_of_v<NonRefcountedDOMObject, mozilla::dom::TestExampleThrowingConstructorInterface>, | |||
43426 | "Shouldn't have wrappercached things that are not refcounted."); | |||
43427 | static_assert(std::is_same_v<decltype(aObject), mozilla::dom::TestExampleThrowingConstructorInterface*>); | |||
43428 | MOZ_ASSERT(ToSupportsIsCorrect(aObject))do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsCorrect(aObject))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(ToSupportsIsCorrect(aObject) ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "ToSupportsIsCorrect(aObject)", "../TestExampleGenBinding.cpp" , 43428); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsCorrect(aObject)" ")"); do { *((volatile int*)__null) = 43428; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
43429 | MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx))do { if (aGivenProto) { do { static_assert( mozilla::detail:: AssertionConditionType<decltype(js::IsObjectInContextCompartment (aGivenProto, aCx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(js::IsObjectInContextCompartment (aGivenProto, aCx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("js::IsObjectInContextCompartment(aGivenProto, aCx)", "../TestExampleGenBinding.cpp" , 43429); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(aGivenProto, aCx)" ")"); do { *((volatile int*)__null) = 43429; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); } } while (false); | |||
43430 | MOZ_ASSERT(!aCache->GetWrapper(),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 43432); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 43432; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
43431 | "You should probably not be using Wrap() directly; use "do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 43432); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 43432; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
43432 | "GetOrCreateDOMReflector instead")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 43432); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 43432; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43433 | ||||
43434 | MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" " (" "nsISupports must be on our primary inheritance chain" ")", "../TestExampleGenBinding.cpp" , 43435); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" ") (" "nsISupports must be on our primary inheritance chain" ")"); do { *((volatile int*)__null) = 43435; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
43435 | "nsISupports must be on our primary inheritance chain")do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" " (" "nsISupports must be on our primary inheritance chain" ")", "../TestExampleGenBinding.cpp" , 43435); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" ") (" "nsISupports must be on our primary inheritance chain" ")"); do { *((volatile int*)__null) = 43435; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
43436 | ||||
43437 | // If the wrapper cache contains a dead reflector then finalize that | |||
43438 | // now, ensuring that the finalizer for the old reflector always | |||
43439 | // runs before the new reflector is created and attached. This | |||
43440 | // avoids the awkward situation where there are multiple reflector | |||
43441 | // objects that contain pointers to the same native. | |||
43442 | ||||
43443 | if (JSObject* oldReflector = aCache->GetWrapperMaybeDead()) { | |||
43444 | _finalize(nullptr /* unused */, oldReflector); | |||
43445 | MOZ_ASSERT(!aCache->GetWrapperMaybeDead())do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapperMaybeDead())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapperMaybeDead ()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("!aCache->GetWrapperMaybeDead()", "../TestExampleGenBinding.cpp" , 43445); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapperMaybeDead()" ")"); do { *((volatile int*)__null) = 43445; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
43446 | } | |||
43447 | ||||
43448 | JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject())); | |||
43449 | if (!global) { | |||
43450 | return false; | |||
43451 | } | |||
43452 | MOZ_ASSERT(JS_IsGlobalObject(global))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsGlobalObject(global))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsGlobalObject(global)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsGlobalObject(global)" , "../TestExampleGenBinding.cpp", 43452); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsGlobalObject(global)" ")"); do { *((volatile int*)__null) = 43452; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
43453 | JS::AssertObjectIsNotGray(global); | |||
43454 | ||||
43455 | // That might have ended up wrapping us already, due to the wonders | |||
43456 | // of XBL. Check for that, and bail out as needed. | |||
43457 | aReflector.set(aCache->GetWrapper()); | |||
43458 | if (aReflector) { | |||
43459 | #ifdef DEBUG1 | |||
43460 | AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto); | |||
43461 | #endif // DEBUG | |||
43462 | return true; | |||
43463 | } | |||
43464 | ||||
43465 | JSAutoRealm ar(aCx, global); | |||
43466 | JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx); | |||
43467 | if (!canonicalProto) { | |||
43468 | return false; | |||
43469 | } | |||
43470 | JS::Rooted<JSObject*> proto(aCx); | |||
43471 | if (aGivenProto) { | |||
43472 | proto = aGivenProto; | |||
43473 | // Unfortunately, while aGivenProto was in the compartment of aCx | |||
43474 | // coming in, we changed compartments to that of "parent" so may need | |||
43475 | // to wrap the proto here. | |||
43476 | if (js::GetContextCompartment(aCx) != JS::GetCompartment(proto)) { | |||
43477 | if (!JS_WrapObject(aCx, &proto)) { | |||
43478 | return false; | |||
43479 | } | |||
43480 | } | |||
43481 | } else { | |||
43482 | proto = canonicalProto; | |||
43483 | } | |||
43484 | ||||
43485 | BindingJSObjectCreator<mozilla::dom::TestExampleThrowingConstructorInterface> creator(aCx); | |||
43486 | creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector); | |||
43487 | if (!aReflector) { | |||
43488 | return false; | |||
43489 | } | |||
43490 | ||||
43491 | aCache->SetWrapper(aReflector); | |||
43492 | creator.InitializationSucceeded(); | |||
43493 | ||||
43494 | MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&do { static_assert( mozilla::detail::AssertionConditionType< decltype(aCache->GetWrapperPreserveColor() && aCache ->GetWrapperPreserveColor() == aReflector)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aCache->GetWrapperPreserveColor () && aCache->GetWrapperPreserveColor() == aReflector ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" , "../TestExampleGenBinding.cpp", 43495); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" ")"); do { *((volatile int*)__null) = 43495; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
43495 | aCache->GetWrapperPreserveColor() == aReflector)do { static_assert( mozilla::detail::AssertionConditionType< decltype(aCache->GetWrapperPreserveColor() && aCache ->GetWrapperPreserveColor() == aReflector)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aCache->GetWrapperPreserveColor () && aCache->GetWrapperPreserveColor() == aReflector ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" , "../TestExampleGenBinding.cpp", 43495); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" ")"); do { *((volatile int*)__null) = 43495; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
43496 | // If proto != canonicalProto, we have to preserve our wrapper; | |||
43497 | // otherwise we won't be able to properly recreate it later, since | |||
43498 | // we won't know what proto to use. Note that we don't check | |||
43499 | // aGivenProto here, since it's entirely possible (and even | |||
43500 | // somewhat common) to have a non-null aGivenProto which is the | |||
43501 | // same as canonicalProto. | |||
43502 | if (proto != canonicalProto) { | |||
43503 | PreserveWrapper(aObject); | |||
43504 | } | |||
43505 | ||||
43506 | return true; | |||
43507 | } | |||
43508 | ||||
43509 | void | |||
43510 | CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, DefineInterfaceProperty aDefineOnGlobal) | |||
43511 | { | |||
43512 | JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::TestExampleThrowingConstructorInterface); | |||
43513 | JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::TestExampleThrowingConstructorInterface); | |||
43514 | ||||
43515 | JS::Handle<JSObject*> parentProto(JS::GetRealmObjectPrototypeHandle(aCx)); | |||
43516 | if (!parentProto) { | |||
43517 | return; | |||
43518 | } | |||
43519 | ||||
43520 | JS::Handle<JSObject*> constructorProto(JS::GetRealmFunctionPrototypeHandle(aCx)); | |||
43521 | if (!constructorProto) { | |||
43522 | return; | |||
43523 | } | |||
43524 | ||||
43525 | dom::CreateInterfaceObjects(aCx, aGlobal, parentProto, | |||
43526 | &sPrototypeClass, protoCache, | |||
43527 | constructorProto, &sInterfaceObjectInfo, 0, false, Span<const LegacyFactoryFunction, 0>{}, | |||
43528 | interfaceCache, | |||
43529 | nullptr, | |||
43530 | nullptr, | |||
43531 | "TestExampleThrowingConstructorInterface", | |||
43532 | aDefineOnGlobal != DefineInterfaceProperty::No, | |||
43533 | nullptr, | |||
43534 | false, | |||
43535 | nullptr); | |||
43536 | } | |||
43537 | ||||
43538 | static JS::Handle<JSObject*> | |||
43539 | GetProtoObjectHandle(JSContext* aCx) | |||
43540 | { | |||
43541 | /* Get the interface prototype object for this class. This will create the | |||
43542 | object as needed. */ | |||
43543 | return GetPerInterfaceObjectHandle(aCx, prototypes::id::TestExampleThrowingConstructorInterface, | |||
43544 | &CreateInterfaceObjects, | |||
43545 | DefineInterfaceProperty::CheckExposure); | |||
43546 | ||||
43547 | } | |||
43548 | ||||
43549 | JS::Handle<JSObject*> | |||
43550 | GetConstructorObjectHandle(JSContext* aCx) | |||
43551 | { | |||
43552 | /* Get the interface object for this class. This will create the object as | |||
43553 | needed. */ | |||
43554 | ||||
43555 | return GetPerInterfaceObjectHandle(aCx, constructors::id::TestExampleThrowingConstructorInterface, | |||
43556 | &CreateInterfaceObjects, | |||
43557 | DefineInterfaceProperty::CheckExposure); | |||
43558 | } | |||
43559 | ||||
43560 | } // namespace TestExampleThrowingConstructorInterface_Binding | |||
43561 | ||||
43562 | ||||
43563 | ||||
43564 | namespace TestExampleWorkerInterface_Binding { | |||
43565 | ||||
43566 | MOZ_CAN_RUN_SCRIPT static bool | |||
43567 | needsSubjectPrincipalMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
43568 | { | |||
43569 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43572( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalMethod", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43570 | "TestExampleWorkerInterface", "needsSubjectPrincipalMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43572( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalMethod", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43571 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject43572( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalMethod", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43572 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43572( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalMethod", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
43573 | ||||
43574 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43575 | NonNull<nsIPrincipal> subjectPrincipal; | |||
43576 | { | |||
43577 | JS::Realm* realm = js::GetContextRealm(cx); | |||
43578 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 43578); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 43578; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
43579 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
43580 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
43581 | ||||
43582 | subjectPrincipal = principal; | |||
43583 | } | |||
43584 | // NOTE: This assert does NOT call the function. | |||
43585 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NeedsSubjectPrincipalMethod(MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal))))>, "Should be returning void here"); | |||
43586 | MOZ_KnownLive(self)(self)->NeedsSubjectPrincipalMethod(MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal))); | |||
43587 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43587); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43587; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43588 | args.rval().setUndefined(); | |||
43589 | return true; | |||
43590 | } | |||
43591 | ||||
43592 | static const JSJitInfo needsSubjectPrincipalMethod_methodinfo = { | |||
43593 | { (JSJitGetterOp)needsSubjectPrincipalMethod }, | |||
43594 | { prototypes::id::TestExampleWorkerInterface }, | |||
43595 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43596 | JSJitInfo::Method, | |||
43597 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43598 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
43599 | true, /* isInfallible. False in setters. */ | |||
43600 | false, /* isMovable. Not relevant for setters. */ | |||
43601 | false, /* isEliminatable. Not relevant for setters. */ | |||
43602 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43603 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43604 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43605 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43606 | }; | |||
43607 | ||||
43608 | MOZ_CAN_RUN_SCRIPT static bool | |||
43609 | get_needsSubjectPrincipalAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
43610 | { | |||
43611 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43614( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43612 | "TestExampleWorkerInterface", "needsSubjectPrincipalAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43614( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43613 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject43614( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43614 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43614( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
43615 | ||||
43616 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43617 | NonNull<nsIPrincipal> subjectPrincipal; | |||
43618 | { | |||
43619 | JS::Realm* realm = js::GetContextRealm(cx); | |||
43620 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 43620); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 43620; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
43621 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
43622 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
43623 | ||||
43624 | subjectPrincipal = principal; | |||
43625 | } | |||
43626 | bool result(MOZ_KnownLive(self)(self)->NeedsSubjectPrincipalAttr(MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal)))); | |||
43627 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43627); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43627; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43628 | args.rval().setBoolean(result); | |||
43629 | return true; | |||
43630 | } | |||
43631 | ||||
43632 | MOZ_CAN_RUN_SCRIPT static bool | |||
43633 | set_needsSubjectPrincipalAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
43634 | { | |||
43635 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43638( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43636 | "TestExampleWorkerInterface", "needsSubjectPrincipalAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43638( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43637 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject43638( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43638 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43638( cx, "TestExampleWorkerInterface" , "needsSubjectPrincipalAttr", JS::ProfilingCategoryPair::DOM , uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
43639 | ||||
43640 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43641 | bool arg0; | |||
43642 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
43643 | return false; | |||
43644 | } | |||
43645 | NonNull<nsIPrincipal> subjectPrincipal; | |||
43646 | { | |||
43647 | JS::Realm* realm = js::GetContextRealm(cx); | |||
43648 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 43648); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 43648; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
43649 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
43650 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
43651 | ||||
43652 | subjectPrincipal = principal; | |||
43653 | } | |||
43654 | // NOTE: This assert does NOT call the function. | |||
43655 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNeedsSubjectPrincipalAttr(arg0, MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal))))>, "Should be returning void here"); | |||
43656 | MOZ_KnownLive(self)(self)->SetNeedsSubjectPrincipalAttr(arg0, MOZ_KnownLive(NonNullHelper(subjectPrincipal))(NonNullHelper(subjectPrincipal))); | |||
43657 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43657); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43657; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43658 | ||||
43659 | return true; | |||
43660 | } | |||
43661 | ||||
43662 | static const JSJitInfo needsSubjectPrincipalAttr_getterinfo = { | |||
43663 | { get_needsSubjectPrincipalAttr }, | |||
43664 | { prototypes::id::TestExampleWorkerInterface }, | |||
43665 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43666 | JSJitInfo::Getter, | |||
43667 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43668 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
43669 | true, /* isInfallible. False in setters. */ | |||
43670 | false, /* isMovable. Not relevant for setters. */ | |||
43671 | false, /* isEliminatable. Not relevant for setters. */ | |||
43672 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43673 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43674 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43675 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43676 | }; | |||
43677 | static const JSJitInfo needsSubjectPrincipalAttr_setterinfo = { | |||
43678 | { (JSJitGetterOp)set_needsSubjectPrincipalAttr }, | |||
43679 | { prototypes::id::TestExampleWorkerInterface }, | |||
43680 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43681 | JSJitInfo::Setter, | |||
43682 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43683 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
43684 | false, /* isInfallible. False in setters. */ | |||
43685 | false, /* isMovable. Not relevant for setters. */ | |||
43686 | false, /* isEliminatable. Not relevant for setters. */ | |||
43687 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43688 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43689 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43690 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43691 | }; | |||
43692 | ||||
43693 | MOZ_CAN_RUN_SCRIPT static bool | |||
43694 | needsCallerTypeMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
43695 | { | |||
43696 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43699( cx, "TestExampleWorkerInterface" , "needsCallerTypeMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43697 | "TestExampleWorkerInterface", "needsCallerTypeMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43699( cx, "TestExampleWorkerInterface" , "needsCallerTypeMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43698 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject43699( cx, "TestExampleWorkerInterface" , "needsCallerTypeMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43699 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43699( cx, "TestExampleWorkerInterface" , "needsCallerTypeMethod", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
43700 | ||||
43701 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43702 | // NOTE: This assert does NOT call the function. | |||
43703 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NeedsCallerTypeMethod(nsContentUtils::ThreadsafeIsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem))>, "Should be returning void here"); | |||
43704 | MOZ_KnownLive(self)(self)->NeedsCallerTypeMethod(nsContentUtils::ThreadsafeIsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem); | |||
43705 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43705); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43705; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43706 | args.rval().setUndefined(); | |||
43707 | return true; | |||
43708 | } | |||
43709 | ||||
43710 | static const JSJitInfo needsCallerTypeMethod_methodinfo = { | |||
43711 | { (JSJitGetterOp)needsCallerTypeMethod }, | |||
43712 | { prototypes::id::TestExampleWorkerInterface }, | |||
43713 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43714 | JSJitInfo::Method, | |||
43715 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43716 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
43717 | true, /* isInfallible. False in setters. */ | |||
43718 | false, /* isMovable. Not relevant for setters. */ | |||
43719 | false, /* isEliminatable. Not relevant for setters. */ | |||
43720 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43721 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43722 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43723 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43724 | }; | |||
43725 | ||||
43726 | MOZ_CAN_RUN_SCRIPT static bool | |||
43727 | get_needsCallerTypeAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
43728 | { | |||
43729 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43732( cx, "TestExampleWorkerInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43730 | "TestExampleWorkerInterface", "needsCallerTypeAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43732( cx, "TestExampleWorkerInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43731 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject43732( cx, "TestExampleWorkerInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43732 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43732( cx, "TestExampleWorkerInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
43733 | ||||
43734 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43735 | bool result(MOZ_KnownLive(self)(self)->NeedsCallerTypeAttr(nsContentUtils::ThreadsafeIsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem)); | |||
43736 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43736); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43736; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43737 | args.rval().setBoolean(result); | |||
43738 | return true; | |||
43739 | } | |||
43740 | ||||
43741 | MOZ_CAN_RUN_SCRIPT static bool | |||
43742 | set_needsCallerTypeAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
43743 | { | |||
43744 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43747( cx, "TestExampleWorkerInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43745 | "TestExampleWorkerInterface", "needsCallerTypeAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43747( cx, "TestExampleWorkerInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43746 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject43747( cx, "TestExampleWorkerInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)) | |||
43747 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43747( cx, "TestExampleWorkerInterface" , "needsCallerTypeAttr", JS::ProfilingCategoryPair::DOM, uint32_t (js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) | uint32_t (js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS)); | |||
43748 | ||||
43749 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43750 | bool arg0; | |||
43751 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
43752 | return false; | |||
43753 | } | |||
43754 | // NOTE: This assert does NOT call the function. | |||
43755 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNeedsCallerTypeAttr(arg0, nsContentUtils::ThreadsafeIsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem))>, "Should be returning void here"); | |||
43756 | MOZ_KnownLive(self)(self)->SetNeedsCallerTypeAttr(arg0, nsContentUtils::ThreadsafeIsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem); | |||
43757 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43757); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43757; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43758 | ||||
43759 | return true; | |||
43760 | } | |||
43761 | ||||
43762 | static const JSJitInfo needsCallerTypeAttr_getterinfo = { | |||
43763 | { get_needsCallerTypeAttr }, | |||
43764 | { prototypes::id::TestExampleWorkerInterface }, | |||
43765 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43766 | JSJitInfo::Getter, | |||
43767 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43768 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
43769 | true, /* isInfallible. False in setters. */ | |||
43770 | false, /* isMovable. Not relevant for setters. */ | |||
43771 | false, /* isEliminatable. Not relevant for setters. */ | |||
43772 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43773 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43774 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43775 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43776 | }; | |||
43777 | static const JSJitInfo needsCallerTypeAttr_setterinfo = { | |||
43778 | { (JSJitGetterOp)set_needsCallerTypeAttr }, | |||
43779 | { prototypes::id::TestExampleWorkerInterface }, | |||
43780 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43781 | JSJitInfo::Setter, | |||
43782 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43783 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
43784 | false, /* isInfallible. False in setters. */ | |||
43785 | false, /* isMovable. Not relevant for setters. */ | |||
43786 | false, /* isEliminatable. Not relevant for setters. */ | |||
43787 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43788 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43789 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43790 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43791 | }; | |||
43792 | ||||
43793 | MOZ_CAN_RUN_SCRIPT static bool | |||
43794 | needsNonSystemSubjectPrincipalMethod(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, const JSJitMethodCallArgs& args) | |||
43795 | { | |||
43796 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43799( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalMethod", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43797 | "TestExampleWorkerInterface", "needsNonSystemSubjectPrincipalMethod", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43799( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalMethod", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43798 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD) |mozilla::AutoProfilerLabelHot raiiObject43799( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalMethod", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43799 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43799( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalMethod", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_METHOD ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
43800 | ||||
43801 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43802 | nsIPrincipal* subjectPrincipal; | |||
43803 | { | |||
43804 | JS::Realm* realm = js::GetContextRealm(cx); | |||
43805 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 43805); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 43805; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
43806 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
43807 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
43808 | if (principal->IsSystemPrincipal()) { | |||
43809 | principal = nullptr; | |||
43810 | } | |||
43811 | ||||
43812 | subjectPrincipal = principal; | |||
43813 | } | |||
43814 | // NOTE: This assert does NOT call the function. | |||
43815 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->NeedsNonSystemSubjectPrincipalMethod(MOZ_KnownLive(subjectPrincipal)(subjectPrincipal)))>, "Should be returning void here"); | |||
43816 | MOZ_KnownLive(self)(self)->NeedsNonSystemSubjectPrincipalMethod(MOZ_KnownLive(subjectPrincipal)(subjectPrincipal)); | |||
43817 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43817); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43817; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43818 | args.rval().setUndefined(); | |||
43819 | return true; | |||
43820 | } | |||
43821 | ||||
43822 | static const JSJitInfo needsNonSystemSubjectPrincipalMethod_methodinfo = { | |||
43823 | { (JSJitGetterOp)needsNonSystemSubjectPrincipalMethod }, | |||
43824 | { prototypes::id::TestExampleWorkerInterface }, | |||
43825 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43826 | JSJitInfo::Method, | |||
43827 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43828 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
43829 | true, /* isInfallible. False in setters. */ | |||
43830 | false, /* isMovable. Not relevant for setters. */ | |||
43831 | false, /* isEliminatable. Not relevant for setters. */ | |||
43832 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43833 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43834 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43835 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43836 | }; | |||
43837 | ||||
43838 | MOZ_CAN_RUN_SCRIPT static bool | |||
43839 | get_needsNonSystemSubjectPrincipalAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitGetterCallArgs args) | |||
43840 | { | |||
43841 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43844( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43842 | "TestExampleWorkerInterface", "needsNonSystemSubjectPrincipalAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43844( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43843 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER) |mozilla::AutoProfilerLabelHot raiiObject43844( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43844 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43844( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_GETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
43845 | ||||
43846 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43847 | nsIPrincipal* subjectPrincipal; | |||
43848 | { | |||
43849 | JS::Realm* realm = js::GetContextRealm(cx); | |||
43850 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 43850); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 43850; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
43851 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
43852 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
43853 | if (principal->IsSystemPrincipal()) { | |||
43854 | principal = nullptr; | |||
43855 | } | |||
43856 | ||||
43857 | subjectPrincipal = principal; | |||
43858 | } | |||
43859 | bool result(MOZ_KnownLive(self)(self)->NeedsNonSystemSubjectPrincipalAttr(MOZ_KnownLive(subjectPrincipal)(subjectPrincipal))); | |||
43860 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43860); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43860; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43861 | args.rval().setBoolean(result); | |||
43862 | return true; | |||
43863 | } | |||
43864 | ||||
43865 | MOZ_CAN_RUN_SCRIPT static bool | |||
43866 | set_needsNonSystemSubjectPrincipalAttr(JSContext* cx, JS::Handle<JSObject*> obj, void* void_self, JSJitSetterCallArgs args) | |||
43867 | { | |||
43868 | AUTO_PROFILER_LABEL_DYNAMIC_FAST(mozilla::AutoProfilerLabelHot raiiObject43871( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43869 | "TestExampleWorkerInterface", "needsNonSystemSubjectPrincipalAttr", DOM, cx,mozilla::AutoProfilerLabelHot raiiObject43871( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43870 | uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER) |mozilla::AutoProfilerLabelHot raiiObject43871( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ) | |||
43871 | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS))mozilla::AutoProfilerLabelHot raiiObject43871( cx, "TestExampleWorkerInterface" , "needsNonSystemSubjectPrincipalAttr", JS::ProfilingCategoryPair ::DOM, uint32_t(js::ProfilingStackFrame::Flags::STRING_TEMPLATE_SETTER ) | uint32_t(js::ProfilingStackFrame::Flags::RELEVANT_FOR_JS) ); | |||
43872 | ||||
43873 | auto* self = static_cast<mozilla::dom::TestExampleWorkerInterface*>(void_self); | |||
43874 | bool arg0; | |||
43875 | if (!ValueToPrimitive<bool, eDefault>(cx, args[0], "Value being assigned", &arg0)) { | |||
43876 | return false; | |||
43877 | } | |||
43878 | nsIPrincipal* subjectPrincipal; | |||
43879 | { | |||
43880 | JS::Realm* realm = js::GetContextRealm(cx); | |||
43881 | MOZ_ASSERT(realm)do { static_assert( mozilla::detail::AssertionConditionType< decltype(realm)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(realm))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("realm", "../TestExampleGenBinding.cpp" , 43881); AnnotateMozCrashReason("MOZ_ASSERT" "(" "realm" ")" ); do { *((volatile int*)__null) = 43881; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
43882 | JSPrincipals* principals = JS::GetRealmPrincipals(realm); | |||
43883 | nsIPrincipal* principal = nsJSPrincipals::get(principals); | |||
43884 | if (principal->IsSystemPrincipal()) { | |||
43885 | principal = nullptr; | |||
43886 | } | |||
43887 | ||||
43888 | subjectPrincipal = principal; | |||
43889 | } | |||
43890 | // NOTE: This assert does NOT call the function. | |||
43891 | static_assert(std::is_void_v<decltype(MOZ_KnownLive(self)(self)->SetNeedsNonSystemSubjectPrincipalAttr(arg0, MOZ_KnownLive(subjectPrincipal)(subjectPrincipal)))>, "Should be returning void here"); | |||
43892 | MOZ_KnownLive(self)(self)->SetNeedsNonSystemSubjectPrincipalAttr(arg0, MOZ_KnownLive(subjectPrincipal)(subjectPrincipal)); | |||
43893 | MOZ_ASSERT(!JS_IsExceptionPending(cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!JS_IsExceptionPending(cx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!JS_IsExceptionPending(cx))) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!JS_IsExceptionPending(cx)" , "../TestExampleGenBinding.cpp", 43893); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "!JS_IsExceptionPending(cx)" ")"); do { *(( volatile int*)__null) = 43893; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); | |||
43894 | ||||
43895 | return true; | |||
43896 | } | |||
43897 | ||||
43898 | static const JSJitInfo needsNonSystemSubjectPrincipalAttr_getterinfo = { | |||
43899 | { get_needsNonSystemSubjectPrincipalAttr }, | |||
43900 | { prototypes::id::TestExampleWorkerInterface }, | |||
43901 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43902 | JSJitInfo::Getter, | |||
43903 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43904 | JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */ | |||
43905 | true, /* isInfallible. False in setters. */ | |||
43906 | false, /* isMovable. Not relevant for setters. */ | |||
43907 | false, /* isEliminatable. Not relevant for setters. */ | |||
43908 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43909 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43910 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43911 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43912 | }; | |||
43913 | static const JSJitInfo needsNonSystemSubjectPrincipalAttr_setterinfo = { | |||
43914 | { (JSJitGetterOp)set_needsNonSystemSubjectPrincipalAttr }, | |||
43915 | { prototypes::id::TestExampleWorkerInterface }, | |||
43916 | { PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth }, | |||
43917 | JSJitInfo::Setter, | |||
43918 | JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */ | |||
43919 | JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */ | |||
43920 | false, /* isInfallible. False in setters. */ | |||
43921 | false, /* isMovable. Not relevant for setters. */ | |||
43922 | false, /* isEliminatable. Not relevant for setters. */ | |||
43923 | false, /* isAlwaysInSlot. Only relevant for getters. */ | |||
43924 | false, /* isLazilyCachedInSlot. Only relevant for getters. */ | |||
43925 | false, /* isTypedMethod. Only relevant for methods. */ | |||
43926 | 0 /* Reserved slot index, if we're stored in a slot, else 0. */ | |||
43927 | }; | |||
43928 | ||||
43929 | static bool | |||
43930 | _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val) | |||
43931 | { | |||
43932 | mozilla::dom::TestExampleWorkerInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleWorkerInterface>(obj); | |||
43933 | // We don't want to preserve if we don't have a wrapper, and we | |||
43934 | // obviously can't preserve if we're not initialized. | |||
43935 | if (self && self->GetWrapperPreserveColor()) { | |||
43936 | PreserveWrapper(self); | |||
43937 | } | |||
43938 | return true; | |||
43939 | } | |||
43940 | ||||
43941 | static void | |||
43942 | _finalize(JS::GCContext* gcx, JSObject* obj) | |||
43943 | { | |||
43944 | mozilla::dom::TestExampleWorkerInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleWorkerInterface>(obj); | |||
43945 | if (self) { | |||
43946 | JS::SetReservedSlot(obj, DOM_OBJECT_SLOT0, JS::UndefinedValue()); | |||
43947 | ClearWrapper(self, self, obj); | |||
43948 | if (size_t mallocBytes = BindingJSObjectMallocBytes(self)) { | |||
43949 | JS::RemoveAssociatedMemory(obj, mallocBytes, | |||
43950 | JS::MemoryUse::DOMBinding); | |||
43951 | } | |||
43952 | AddForDeferredFinalization<mozilla::dom::TestExampleWorkerInterface>(self); | |||
43953 | } | |||
43954 | } | |||
43955 | ||||
43956 | static nsWrapperCache* | |||
43957 | _getWrapperCache(JS::Handle<JSObject*> obj) | |||
43958 | { | |||
43959 | mozilla::dom::TestExampleWorkerInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleWorkerInterface>(obj); | |||
43960 | return self; | |||
43961 | } | |||
43962 | ||||
43963 | static size_t | |||
43964 | _objectMoved(JSObject* obj, JSObject* old) | |||
43965 | { | |||
43966 | mozilla::dom::TestExampleWorkerInterface* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::TestExampleWorkerInterface>(obj); | |||
43967 | if (self) { | |||
43968 | UpdateWrapper(self, self, obj, old); | |||
43969 | } | |||
43970 | ||||
43971 | return 0; | |||
43972 | } | |||
43973 | ||||
43974 | static const JSFunctionSpec sMethods_specs[] = { | |||
43975 | JS_FNSPEC("needsSubjectPrincipalMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&needsSubjectPrincipalMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("needsSubjectPrincipalMethod"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&needsSubjectPrincipalMethod_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
43976 | JS_FNSPEC("needsCallerTypeMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&needsCallerTypeMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("needsCallerTypeMethod"), {(GenericMethod <NormalThisPolicy, ThrowExceptions>), reinterpret_cast< const JSJitInfo*>(&needsCallerTypeMethod_methodinfo)}, 0, JSPROP_ENUMERATE, nullptr}, | |||
43977 | JS_FNSPEC("needsNonSystemSubjectPrincipalMethod", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&needsNonSystemSubjectPrincipalMethod_methodinfo), 0, JSPROP_ENUMERATE, nullptr){JSFunctionSpec::Name("needsNonSystemSubjectPrincipalMethod") , {(GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast <const JSJitInfo*>(&needsNonSystemSubjectPrincipalMethod_methodinfo )}, 0, JSPROP_ENUMERATE, nullptr}, | |||
43978 | JS_FS_END{JSFunctionSpec::Name(nullptr), {nullptr, nullptr}, 0, 0, nullptr } | |||
43979 | }; | |||
43980 | ||||
43981 | ||||
43982 | static const Prefable<const JSFunctionSpec> sMethods[] = { | |||
43983 | { nullptr, &sMethods_specs[0] }, | |||
43984 | { nullptr, nullptr } | |||
43985 | }; | |||
43986 | ||||
43987 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
43988 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
43989 | static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
43990 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
43991 | ||||
43992 | static const JSPropertySpec sAttributes_specs[] = { | |||
43993 | JSPropertySpec::nativeAccessors("needsSubjectPrincipalAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &needsSubjectPrincipalAttr_getterinfo, GenericSetter<NormalThisPolicy>, &needsSubjectPrincipalAttr_setterinfo), | |||
43994 | JSPropertySpec::nativeAccessors("needsCallerTypeAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &needsCallerTypeAttr_getterinfo, GenericSetter<NormalThisPolicy>, &needsCallerTypeAttr_setterinfo), | |||
43995 | JSPropertySpec::nativeAccessors("needsNonSystemSubjectPrincipalAttr", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &needsNonSystemSubjectPrincipalAttr_getterinfo, GenericSetter<NormalThisPolicy>, &needsNonSystemSubjectPrincipalAttr_setterinfo), | |||
43996 | JS_PS_ENDJSPropertySpec::sentinel() | |||
43997 | }; | |||
43998 | ||||
43999 | ||||
44000 | static const Prefable<const JSPropertySpec> sAttributes[] = { | |||
44001 | { nullptr, &sAttributes_specs[0] }, | |||
44002 | { nullptr, nullptr } | |||
44003 | }; | |||
44004 | ||||
44005 | static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX13, | |||
44006 | "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)"); | |||
44007 | static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX16, | |||
44008 | "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)"); | |||
44009 | ||||
44010 | ||||
44011 | static uint16_t sNativeProperties_sortedPropertyIndices[6]; | |||
44012 | static PropertyInfo sNativeProperties_propertyInfos[6]; | |||
44013 | ||||
44014 | static const NativePropertiesN<2> sNativeProperties = { | |||
44015 | false, 0, | |||
44016 | false, 0, | |||
44017 | true, 0 /* sMethods */, | |||
44018 | true, 1 /* sAttributes */, | |||
44019 | false, 0, | |||
44020 | false, 0, | |||
44021 | false, 0, | |||
44022 | -1, | |||
44023 | 6, | |||
44024 | sNativeProperties_sortedPropertyIndices, | |||
44025 | { | |||
44026 | { sMethods, &sNativeProperties_propertyInfos[0] }, | |||
44027 | { sAttributes, &sNativeProperties_propertyInfos[3] } | |||
44028 | } | |||
44029 | }; | |||
44030 | static_assert(6 < 1ull << (CHAR_BIT8 * sizeof(sNativeProperties.propertyInfoCount)), | |||
44031 | "We have a property info count that is oversized"); | |||
44032 | ||||
44033 | bool sNativePropertiesInited = false; | |||
44034 | const NativePropertyHooks sNativePropertyHooks = { | |||
44035 | nullptr, | |||
44036 | { sNativeProperties.Upcast(), nullptr, &sNativePropertiesInited }, | |||
44037 | prototypes::id::TestExampleWorkerInterface, | |||
44038 | constructors::id::TestExampleWorkerInterface, | |||
44039 | &DefaultXrayExpandoObjectClass | |||
44040 | }; | |||
44041 | ||||
44042 | static const DOMInterfaceInfo sInterfaceObjectInfo = { | |||
44043 | { ThrowingConstructor, &sNativePropertyHooks }, | |||
44044 | JS::GetRealmFunctionPrototypeHandle, | |||
44045 | prototypes::id::TestExampleWorkerInterface, | |||
44046 | PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth, | |||
44047 | true, | |||
44048 | }; | |||
44049 | ||||
44050 | static const DOMIfaceAndProtoJSClass sPrototypeClass = { | |||
44051 | { | |||
44052 | "TestExampleWorkerInterfacePrototype", | |||
44053 | JSCLASS_IS_DOMIFACEANDPROTOJSCLASSJSCLASS_USERBIT2 | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE0), | |||
44054 | JS_NULL_CLASS_OPS, | |||
44055 | JS_NULL_CLASS_SPEC, | |||
44056 | JS_NULL_CLASS_EXT, | |||
44057 | JS_NULL_OBJECT_OPS | |||
44058 | }, | |||
44059 | eInterfacePrototype, | |||
44060 | prototypes::id::TestExampleWorkerInterface, | |||
44061 | PrototypeTraits<prototypes::id::TestExampleWorkerInterface>::Depth, | |||
44062 | &sNativePropertyHooks, | |||
44063 | JS::GetRealmObjectPrototype | |||
44064 | }; | |||
44065 | ||||
44066 | static JS::Handle<JSObject*> | |||
44067 | GetProtoObjectHandle(JSContext* aCx); | |||
44068 | ||||
44069 | static const JSClassOps sClassOps = { | |||
44070 | _addProperty, /* addProperty */ | |||
44071 | nullptr, /* delProperty */ | |||
44072 | nullptr, /* enumerate */ | |||
44073 | nullptr, /* newEnumerate */ | |||
44074 | nullptr, /* resolve */ | |||
44075 | nullptr, /* mayResolve */ | |||
44076 | _finalize, /* finalize */ | |||
44077 | nullptr, /* call */ | |||
44078 | nullptr, /* construct */ | |||
44079 | nullptr, /* trace */ | |||
44080 | }; | |||
44081 | ||||
44082 | static const js::ClassExtension sClassExtension = { | |||
44083 | _objectMoved /* objectMovedOp */ | |||
44084 | }; | |||
44085 | ||||
44086 | static const DOMJSClass sClass = { | |||
44087 | { "TestExampleWorkerInterface", | |||
44088 | JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1), | |||
44089 | &sClassOps, | |||
44090 | JS_NULL_CLASS_SPEC, | |||
44091 | &sClassExtension, | |||
44092 | JS_NULL_OBJECT_OPS | |||
44093 | }, | |||
44094 | { prototypes::id::TestExampleWorkerInterface, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count }, | |||
44095 | std::is_base_of_v<nsISupports, mozilla::dom::TestExampleWorkerInterface>, | |||
44096 | &sNativePropertyHooks, | |||
44097 | FindAssociatedGlobalForNative<mozilla::dom::TestExampleWorkerInterface>::Get, | |||
44098 | GetProtoObjectHandle, | |||
44099 | GetCCParticipant<mozilla::dom::TestExampleWorkerInterface>::Get(), | |||
44100 | nullptr, | |||
44101 | _getWrapperCache | |||
44102 | }; | |||
44103 | static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS1, | |||
44104 | "Must have the right minimal number of reserved slots."); | |||
44105 | static_assert(1 >= 1, | |||
44106 | "Must have enough reserved slots."); | |||
44107 | ||||
44108 | bool | |||
44109 | Wrap(JSContext* aCx, mozilla::dom::TestExampleWorkerInterface* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector) | |||
44110 | { | |||
44111 | static_assert(!std::is_base_of_v<NonRefcountedDOMObject, mozilla::dom::TestExampleWorkerInterface>, | |||
44112 | "Shouldn't have wrappercached things that are not refcounted."); | |||
44113 | static_assert(std::is_same_v<decltype(aObject), mozilla::dom::TestExampleWorkerInterface*>); | |||
44114 | MOZ_ASSERT(ToSupportsIsCorrect(aObject))do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsCorrect(aObject))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(ToSupportsIsCorrect(aObject) ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "ToSupportsIsCorrect(aObject)", "../TestExampleGenBinding.cpp" , 44114); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsCorrect(aObject)" ")"); do { *((volatile int*)__null) = 44114; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
44115 | MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx))do { if (aGivenProto) { do { static_assert( mozilla::detail:: AssertionConditionType<decltype(js::IsObjectInContextCompartment (aGivenProto, aCx))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(js::IsObjectInContextCompartment (aGivenProto, aCx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("js::IsObjectInContextCompartment(aGivenProto, aCx)", "../TestExampleGenBinding.cpp" , 44115); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(aGivenProto, aCx)" ")"); do { *((volatile int*)__null) = 44115; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); } } while (false); | |||
44116 | MOZ_ASSERT(!aCache->GetWrapper(),do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 44118); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 44118; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
44117 | "You should probably not be using Wrap() directly; use "do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 44118); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 44118; __attribute__((nomerge)) ::abort(); } while (false); } } while (false) | |||
44118 | "GetOrCreateDOMReflector instead")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapper())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapper()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!aCache->GetWrapper()" " (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")", "../TestExampleGenBinding.cpp" , 44118); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapper()" ") (" "You should probably not be using Wrap() directly; use " "GetOrCreateDOMReflector instead" ")"); do { *((volatile int *)__null) = 44118; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
44119 | ||||
44120 | MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" " (" "nsISupports must be on our primary inheritance chain" ")", "../TestExampleGenBinding.cpp" , 44121); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" ") (" "nsISupports must be on our primary inheritance chain" ")"); do { *((volatile int*)__null) = 44121; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
44121 | "nsISupports must be on our primary inheritance chain")do { static_assert( mozilla::detail::AssertionConditionType< decltype(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" " (" "nsISupports must be on our primary inheritance chain" ")", "../TestExampleGenBinding.cpp" , 44121); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache)" ") (" "nsISupports must be on our primary inheritance chain" ")"); do { *((volatile int*)__null) = 44121; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
44122 | ||||
44123 | // If the wrapper cache contains a dead reflector then finalize that | |||
44124 | // now, ensuring that the finalizer for the old reflector always | |||
44125 | // runs before the new reflector is created and attached. This | |||
44126 | // avoids the awkward situation where there are multiple reflector | |||
44127 | // objects that contain pointers to the same native. | |||
44128 | ||||
44129 | if (JSObject* oldReflector = aCache->GetWrapperMaybeDead()) { | |||
44130 | _finalize(nullptr /* unused */, oldReflector); | |||
44131 | MOZ_ASSERT(!aCache->GetWrapperMaybeDead())do { static_assert( mozilla::detail::AssertionConditionType< decltype(!aCache->GetWrapperMaybeDead())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!aCache->GetWrapperMaybeDead ()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("!aCache->GetWrapperMaybeDead()", "../TestExampleGenBinding.cpp" , 44131); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!aCache->GetWrapperMaybeDead()" ")"); do { *((volatile int*)__null) = 44131; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
44132 | } | |||
44133 | ||||
44134 | JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject())); | |||
44135 | if (!global) { | |||
44136 | return false; | |||
44137 | } | |||
44138 | MOZ_ASSERT(JS_IsGlobalObject(global))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsGlobalObject(global))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsGlobalObject(global)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsGlobalObject(global)" , "../TestExampleGenBinding.cpp", 44138); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "JS_IsGlobalObject(global)" ")"); do { *((volatile int*)__null) = 44138; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); | |||
44139 | JS::AssertObjectIsNotGray(global); | |||
44140 | ||||
44141 | // That might have ended up wrapping us already, due to the wonders | |||
44142 | // of XBL. Check for that, and bail out as needed. | |||
44143 | aReflector.set(aCache->GetWrapper()); | |||
44144 | if (aReflector) { | |||
44145 | #ifdef DEBUG1 | |||
44146 | AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto); | |||
44147 | #endif // DEBUG | |||
44148 | return true; | |||
44149 | } | |||
44150 | ||||
44151 | JSAutoRealm ar(aCx, global); | |||
44152 | JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx); | |||
44153 | if (!canonicalProto) { | |||
44154 | return false; | |||
44155 | } | |||
44156 | JS::Rooted<JSObject*> proto(aCx); | |||
44157 | if (aGivenProto) { | |||
44158 | proto = aGivenProto; | |||
44159 | // Unfortunately, while aGivenProto was in the compartment of aCx | |||
44160 | // coming in, we changed compartments to that of "parent" so may need | |||
44161 | // to wrap the proto here. | |||
44162 | if (js::GetContextCompartment(aCx) != JS::GetCompartment(proto)) { | |||
44163 | if (!JS_WrapObject(aCx, &proto)) { | |||
44164 | return false; | |||
44165 | } | |||
44166 | } | |||
44167 | } else { | |||
44168 | proto = canonicalProto; | |||
44169 | } | |||
44170 | ||||
44171 | BindingJSObjectCreator<mozilla::dom::TestExampleWorkerInterface> creator(aCx); | |||
44172 | creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector); | |||
44173 | if (!aReflector) { | |||
44174 | return false; | |||
44175 | } | |||
44176 | ||||
44177 | aCache->SetWrapper(aReflector); | |||
44178 | creator.InitializationSucceeded(); | |||
44179 | ||||
44180 | MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&do { static_assert( mozilla::detail::AssertionConditionType< decltype(aCache->GetWrapperPreserveColor() && aCache ->GetWrapperPreserveColor() == aReflector)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aCache->GetWrapperPreserveColor () && aCache->GetWrapperPreserveColor() == aReflector ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" , "../TestExampleGenBinding.cpp", 44181); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" ")"); do { *((volatile int*)__null) = 44181; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false) | |||
44181 | aCache->GetWrapperPreserveColor() == aReflector)do { static_assert( mozilla::detail::AssertionConditionType< decltype(aCache->GetWrapperPreserveColor() && aCache ->GetWrapperPreserveColor() == aReflector)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aCache->GetWrapperPreserveColor () && aCache->GetWrapperPreserveColor() == aReflector ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" , "../TestExampleGenBinding.cpp", 44181); AnnotateMozCrashReason ("MOZ_ASSERT" "(" "aCache->GetWrapperPreserveColor() && aCache->GetWrapperPreserveColor() == aReflector" ")"); do { *((volatile int*)__null) = 44181; __attribute__(( nomerge)) ::abort(); } while (false); } } while (false); | |||
44182 | // If proto != canonicalProto, we have to preserve our wrapper; | |||
44183 | // otherwise we won't be able to properly recreate it later, since | |||
44184 | // we won't know what proto to use. Note that we don't check | |||
44185 | // aGivenProto here, since it's entirely possible (and even | |||
44186 | // somewhat common) to have a non-null aGivenProto which is the | |||
44187 | // same as canonicalProto. | |||
44188 | if (proto != canonicalProto) { | |||
44189 | PreserveWrapper(aObject); | |||
44190 | } | |||
44191 | ||||
44192 | return true; | |||
44193 | } | |||
44194 | ||||
44195 | void | |||
44196 | CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, DefineInterfaceProperty aDefineOnGlobal) | |||
44197 | { | |||
44198 | JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::TestExampleWorkerInterface); | |||
44199 | JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::TestExampleWorkerInterface); | |||
44200 | ||||
44201 | JS::Handle<JSObject*> parentProto(JS::GetRealmObjectPrototypeHandle(aCx)); | |||
44202 | if (!parentProto) { | |||
44203 | return; | |||
44204 | } | |||
44205 | ||||
44206 | JS::Handle<JSObject*> constructorProto(JS::GetRealmFunctionPrototypeHandle(aCx)); | |||
44207 | if (!constructorProto) { | |||
44208 | return; | |||
44209 | } | |||
44210 | ||||
44211 | dom::CreateInterfaceObjects(aCx, aGlobal, parentProto, | |||
44212 | &sPrototypeClass, protoCache, | |||
44213 | constructorProto, &sInterfaceObjectInfo, 0, false, Span<const LegacyFactoryFunction, 0>{}, | |||
44214 | interfaceCache, | |||
44215 | sNativeProperties.Upcast(), | |||
44216 | nullptr, | |||
44217 | "TestExampleWorkerInterface", | |||
44218 | aDefineOnGlobal != DefineInterfaceProperty::No, | |||
44219 | nullptr, | |||
44220 | false, | |||
44221 | nullptr); | |||
44222 | } | |||
44223 | ||||
44224 | static JS::Handle<JSObject*> | |||
44225 | GetProtoObjectHandle(JSContext* aCx) | |||
44226 | { | |||
44227 | /* Get the interface prototype object for this class. This will create the | |||
44228 | object as needed. */ | |||
44229 | return GetPerInterfaceObjectHandle(aCx, prototypes::id::TestExampleWorkerInterface, | |||
44230 | &CreateInterfaceObjects, | |||
44231 | DefineInterfaceProperty::CheckExposure); | |||
44232 | ||||
44233 | } | |||
44234 | ||||
44235 | JS::Handle<JSObject*> | |||
44236 | GetConstructorObjectHandle(JSContext* aCx) | |||
44237 | { | |||
44238 | /* Get the interface object for this class. This will create the object as | |||
44239 | needed. */ | |||
44240 | ||||
44241 | return GetPerInterfaceObjectHandle(aCx, constructors::id::TestExampleWorkerInterface, | |||
44242 | &CreateInterfaceObjects, | |||
44243 | DefineInterfaceProperty::CheckExposure); | |||
44244 | } | |||
44245 | ||||
44246 | } // namespace TestExampleWorkerInterface_Binding | |||
44247 | ||||
44248 | ||||
44249 | ||||
44250 | } // namespace mozilla::dom |
1 | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | ||||||||||||
2 | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ | ||||||||||||
3 | /* This Source Code Form is subject to the terms of the Mozilla Public | ||||||||||||
4 | * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||||||||
5 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||||||||||||
6 | |||||||||||||
7 | /* A class for optional values and in-place lazy construction. */ | ||||||||||||
8 | |||||||||||||
9 | #ifndef mozilla_Maybe_h | ||||||||||||
10 | #define mozilla_Maybe_h | ||||||||||||
11 | |||||||||||||
12 | #include <functional> | ||||||||||||
13 | #include <new> // for placement new | ||||||||||||
14 | #include <ostream> | ||||||||||||
15 | #include <type_traits> | ||||||||||||
16 | #include <utility> | ||||||||||||
17 | |||||||||||||
18 | #include "mozilla/Alignment.h" | ||||||||||||
19 | #include "mozilla/Assertions.h" | ||||||||||||
20 | #include "mozilla/Attributes.h" | ||||||||||||
21 | #include "mozilla/MaybeStorageBase.h" | ||||||||||||
22 | #include "mozilla/MemoryChecking.h" | ||||||||||||
23 | #include "mozilla/OperatorNewExtensions.h" | ||||||||||||
24 | #include "mozilla/Poison.h" | ||||||||||||
25 | #include "mozilla/ThreadSafety.h" | ||||||||||||
26 | |||||||||||||
27 | class nsCycleCollectionTraversalCallback; | ||||||||||||
28 | |||||||||||||
29 | template <typename T> | ||||||||||||
30 | inline void CycleCollectionNoteChild( | ||||||||||||
31 | nsCycleCollectionTraversalCallback& aCallback, T* aChild, const char* aName, | ||||||||||||
32 | uint32_t aFlags); | ||||||||||||
33 | |||||||||||||
34 | namespace mozilla { | ||||||||||||
35 | |||||||||||||
36 | struct Nothing {}; | ||||||||||||
37 | |||||||||||||
38 | inline constexpr bool operator==(const Nothing&, const Nothing&) { | ||||||||||||
39 | return true; | ||||||||||||
40 | } | ||||||||||||
41 | |||||||||||||
42 | template <class T> | ||||||||||||
43 | class Maybe; | ||||||||||||
44 | |||||||||||||
45 | namespace detail { | ||||||||||||
46 | |||||||||||||
47 | // You would think that poisoning Maybe instances could just be a call | ||||||||||||
48 | // to mozWritePoison. Unfortunately, using a simple call to | ||||||||||||
49 | // mozWritePoison generates poor code on MSVC for small structures. The | ||||||||||||
50 | // generated code contains (always not-taken) branches and does a bunch | ||||||||||||
51 | // of setup for `rep stos{l,q}`, even though we know at compile time | ||||||||||||
52 | // exactly how many words we're poisoning. Instead, we're going to | ||||||||||||
53 | // force MSVC to generate the code we want via recursive templates. | ||||||||||||
54 | |||||||||||||
55 | // Write the given poisonValue into p at offset*sizeof(uintptr_t). | ||||||||||||
56 | template <size_t offset> | ||||||||||||
57 | inline void WritePoisonAtOffset(void* p, const uintptr_t poisonValue) { | ||||||||||||
58 | memcpy(static_cast<char*>(p) + offset * sizeof(poisonValue), &poisonValue, | ||||||||||||
59 | sizeof(poisonValue)); | ||||||||||||
60 | } | ||||||||||||
61 | |||||||||||||
62 | template <size_t Offset, size_t NOffsets> | ||||||||||||
63 | struct InlinePoisoner { | ||||||||||||
64 | static void poison(void* p, const uintptr_t poisonValue) { | ||||||||||||
65 | WritePoisonAtOffset<Offset>(p, poisonValue); | ||||||||||||
66 | InlinePoisoner<Offset + 1, NOffsets>::poison(p, poisonValue); | ||||||||||||
67 | } | ||||||||||||
68 | }; | ||||||||||||
69 | |||||||||||||
70 | template <size_t N> | ||||||||||||
71 | struct InlinePoisoner<N, N> { | ||||||||||||
72 | static void poison(void*, const uintptr_t) { | ||||||||||||
73 | // All done! | ||||||||||||
74 | } | ||||||||||||
75 | }; | ||||||||||||
76 | |||||||||||||
77 | // We can't generate inline code for large structures, though, because we'll | ||||||||||||
78 | // blow out recursive template instantiation limits, and the code would be | ||||||||||||
79 | // bloated to boot. So provide a fallback to the out-of-line poisoner. | ||||||||||||
80 | template <size_t ObjectSize> | ||||||||||||
81 | struct OutOfLinePoisoner { | ||||||||||||
82 | static MOZ_NEVER_INLINE__attribute__((noinline)) void poison(void* p, const uintptr_t) { | ||||||||||||
83 | mozWritePoison(p, ObjectSize); | ||||||||||||
84 | } | ||||||||||||
85 | }; | ||||||||||||
86 | |||||||||||||
87 | template <typename T> | ||||||||||||
88 | inline void PoisonObject(T* p) { | ||||||||||||
89 | const uintptr_t POISON = mozPoisonValue(); | ||||||||||||
90 | std::conditional_t<(sizeof(T) <= 8 * sizeof(POISON)), | ||||||||||||
91 | InlinePoisoner<0, sizeof(T) / sizeof(POISON)>, | ||||||||||||
92 | OutOfLinePoisoner<sizeof(T)>>::poison(p, POISON); | ||||||||||||
93 | } | ||||||||||||
94 | |||||||||||||
95 | template <typename T> | ||||||||||||
96 | struct MaybePoisoner { | ||||||||||||
97 | static const size_t N = sizeof(T); | ||||||||||||
98 | |||||||||||||
99 | static void poison(void* aPtr) { | ||||||||||||
100 | #ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED1 | ||||||||||||
101 | if (N >= sizeof(uintptr_t)) { | ||||||||||||
102 | PoisonObject(static_cast<std::remove_cv_t<T>*>(aPtr)); | ||||||||||||
103 | } | ||||||||||||
104 | #endif | ||||||||||||
105 | MOZ_MAKE_MEM_UNDEFINED(aPtr, N)do { } while (0); | ||||||||||||
106 | } | ||||||||||||
107 | }; | ||||||||||||
108 | |||||||||||||
109 | template <typename T, | ||||||||||||
110 | bool TriviallyDestructibleAndCopyable = | ||||||||||||
111 | IsTriviallyDestructibleAndCopyable<T>, | ||||||||||||
112 | bool Copyable = std::is_copy_constructible_v<T>, | ||||||||||||
113 | bool Movable = std::is_move_constructible_v<T>> | ||||||||||||
114 | class Maybe_CopyMove_Enabler; | ||||||||||||
115 | |||||||||||||
116 | #define MOZ_MAYBE_COPY_OPS() \ | ||||||||||||
117 | Maybe_CopyMove_Enabler(const Maybe_CopyMove_Enabler& aOther) { \ | ||||||||||||
118 | if (downcast(aOther).isSome()) { \ | ||||||||||||
119 | downcast(*this).emplace(*downcast(aOther)); \ | ||||||||||||
120 | } \ | ||||||||||||
121 | } \ | ||||||||||||
122 | \ | ||||||||||||
123 | Maybe_CopyMove_Enabler& operator=(const Maybe_CopyMove_Enabler& aOther) { \ | ||||||||||||
124 | return downcast(*this).template operator= <T>(downcast(aOther)); \ | ||||||||||||
125 | } | ||||||||||||
126 | |||||||||||||
127 | #define MOZ_MAYBE_MOVE_OPS() \ | ||||||||||||
128 | constexpr Maybe_CopyMove_Enabler(Maybe_CopyMove_Enabler&& aOther) { \ | ||||||||||||
129 | if (downcast(aOther).isSome()) { \ | ||||||||||||
130 | downcast(*this).emplace(std::move(*downcast(aOther))); \ | ||||||||||||
131 | downcast(aOther).reset(); \ | ||||||||||||
132 | } \ | ||||||||||||
133 | } \ | ||||||||||||
134 | \ | ||||||||||||
135 | constexpr Maybe_CopyMove_Enabler& operator=( \ | ||||||||||||
136 | Maybe_CopyMove_Enabler&& aOther) { \ | ||||||||||||
137 | downcast(*this).template operator= <T>(std::move(downcast(aOther))); \ | ||||||||||||
138 | \ | ||||||||||||
139 | return *this; \ | ||||||||||||
140 | } | ||||||||||||
141 | |||||||||||||
142 | #define MOZ_MAYBE_DOWNCAST() \ | ||||||||||||
143 | static constexpr Maybe<T>& downcast(Maybe_CopyMove_Enabler& aObj) { \ | ||||||||||||
144 | return static_cast<Maybe<T>&>(aObj); \ | ||||||||||||
145 | } \ | ||||||||||||
146 | static constexpr const Maybe<T>& downcast( \ | ||||||||||||
147 | const Maybe_CopyMove_Enabler& aObj) { \ | ||||||||||||
148 | return static_cast<const Maybe<T>&>(aObj); \ | ||||||||||||
149 | } | ||||||||||||
150 | |||||||||||||
151 | template <typename T> | ||||||||||||
152 | class Maybe_CopyMove_Enabler<T, true, true, true> { | ||||||||||||
153 | public: | ||||||||||||
154 | Maybe_CopyMove_Enabler() = default; | ||||||||||||
155 | |||||||||||||
156 | Maybe_CopyMove_Enabler(const Maybe_CopyMove_Enabler&) = default; | ||||||||||||
157 | Maybe_CopyMove_Enabler& operator=(const Maybe_CopyMove_Enabler&) = default; | ||||||||||||
158 | constexpr Maybe_CopyMove_Enabler(Maybe_CopyMove_Enabler&& aOther) { | ||||||||||||
159 | downcast(aOther).reset(); | ||||||||||||
160 | } | ||||||||||||
161 | constexpr Maybe_CopyMove_Enabler& operator=(Maybe_CopyMove_Enabler&& aOther) { | ||||||||||||
162 | downcast(aOther).reset(); | ||||||||||||
163 | return *this; | ||||||||||||
164 | } | ||||||||||||
165 | |||||||||||||
166 | private: | ||||||||||||
167 | MOZ_MAYBE_DOWNCAST() | ||||||||||||
168 | }; | ||||||||||||
169 | |||||||||||||
170 | template <typename T> | ||||||||||||
171 | class Maybe_CopyMove_Enabler<T, true, false, true> { | ||||||||||||
172 | public: | ||||||||||||
173 | Maybe_CopyMove_Enabler() = default; | ||||||||||||
174 | |||||||||||||
175 | Maybe_CopyMove_Enabler(const Maybe_CopyMove_Enabler&) = delete; | ||||||||||||
176 | Maybe_CopyMove_Enabler& operator=(const Maybe_CopyMove_Enabler&) = delete; | ||||||||||||
177 | constexpr Maybe_CopyMove_Enabler(Maybe_CopyMove_Enabler&& aOther) { | ||||||||||||
178 | downcast(aOther).reset(); | ||||||||||||
179 | } | ||||||||||||
180 | constexpr Maybe_CopyMove_Enabler& operator=(Maybe_CopyMove_Enabler&& aOther) { | ||||||||||||
181 | downcast(aOther).reset(); | ||||||||||||
182 | return *this; | ||||||||||||
183 | } | ||||||||||||
184 | |||||||||||||
185 | private: | ||||||||||||
186 | MOZ_MAYBE_DOWNCAST() | ||||||||||||
187 | }; | ||||||||||||
188 | |||||||||||||
189 | template <typename T> | ||||||||||||
190 | class Maybe_CopyMove_Enabler<T, false, true, true> { | ||||||||||||
191 | public: | ||||||||||||
192 | Maybe_CopyMove_Enabler() = default; | ||||||||||||
193 | |||||||||||||
194 | MOZ_MAYBE_COPY_OPS() | ||||||||||||
195 | MOZ_MAYBE_MOVE_OPS() | ||||||||||||
196 | |||||||||||||
197 | private: | ||||||||||||
198 | MOZ_MAYBE_DOWNCAST() | ||||||||||||
199 | }; | ||||||||||||
200 | |||||||||||||
201 | template <typename T> | ||||||||||||
202 | class Maybe_CopyMove_Enabler<T, false, false, true> { | ||||||||||||
203 | public: | ||||||||||||
204 | Maybe_CopyMove_Enabler() = default; | ||||||||||||
205 | |||||||||||||
206 | Maybe_CopyMove_Enabler(const Maybe_CopyMove_Enabler&) = delete; | ||||||||||||
207 | Maybe_CopyMove_Enabler& operator=(const Maybe_CopyMove_Enabler&) = delete; | ||||||||||||
208 | MOZ_MAYBE_MOVE_OPS() | ||||||||||||
209 | |||||||||||||
210 | private: | ||||||||||||
211 | MOZ_MAYBE_DOWNCAST() | ||||||||||||
212 | }; | ||||||||||||
213 | |||||||||||||
214 | template <typename T> | ||||||||||||
215 | class Maybe_CopyMove_Enabler<T, false, true, false> { | ||||||||||||
216 | public: | ||||||||||||
217 | Maybe_CopyMove_Enabler() = default; | ||||||||||||
218 | |||||||||||||
219 | MOZ_MAYBE_COPY_OPS() | ||||||||||||
220 | Maybe_CopyMove_Enabler(Maybe_CopyMove_Enabler&&) = delete; | ||||||||||||
221 | Maybe_CopyMove_Enabler& operator=(Maybe_CopyMove_Enabler&&) = delete; | ||||||||||||
222 | |||||||||||||
223 | private: | ||||||||||||
224 | MOZ_MAYBE_DOWNCAST() | ||||||||||||
225 | }; | ||||||||||||
226 | |||||||||||||
227 | template <typename T, bool TriviallyDestructibleAndCopyable> | ||||||||||||
228 | class Maybe_CopyMove_Enabler<T, TriviallyDestructibleAndCopyable, false, | ||||||||||||
229 | false> { | ||||||||||||
230 | public: | ||||||||||||
231 | Maybe_CopyMove_Enabler() = default; | ||||||||||||
232 | |||||||||||||
233 | Maybe_CopyMove_Enabler(const Maybe_CopyMove_Enabler&) = delete; | ||||||||||||
234 | Maybe_CopyMove_Enabler& operator=(const Maybe_CopyMove_Enabler&) = delete; | ||||||||||||
235 | Maybe_CopyMove_Enabler(Maybe_CopyMove_Enabler&&) = delete; | ||||||||||||
236 | Maybe_CopyMove_Enabler& operator=(Maybe_CopyMove_Enabler&&) = delete; | ||||||||||||
237 | }; | ||||||||||||
238 | |||||||||||||
239 | #undef MOZ_MAYBE_COPY_OPS | ||||||||||||
240 | #undef MOZ_MAYBE_MOVE_OPS | ||||||||||||
241 | #undef MOZ_MAYBE_DOWNCAST | ||||||||||||
242 | |||||||||||||
243 | template <typename T, bool TriviallyDestructibleAndCopyable = | ||||||||||||
244 | IsTriviallyDestructibleAndCopyable<T>> | ||||||||||||
245 | struct MaybeStorage; | ||||||||||||
246 | |||||||||||||
247 | template <typename T> | ||||||||||||
248 | struct MaybeStorage<T, false> : MaybeStorageBase<T> { | ||||||||||||
249 | protected: | ||||||||||||
250 | char mIsSome = false; // not bool -- guarantees minimal space consumption | ||||||||||||
251 | |||||||||||||
252 | MaybeStorage() = default; | ||||||||||||
253 | explicit MaybeStorage(const T& aVal) | ||||||||||||
254 | : MaybeStorageBase<T>{aVal}, mIsSome{true} {} | ||||||||||||
255 | explicit MaybeStorage(T&& aVal) | ||||||||||||
256 | : MaybeStorageBase<T>{std::move(aVal)}, mIsSome{true} {} | ||||||||||||
257 | |||||||||||||
258 | template <typename... Args> | ||||||||||||
259 | explicit MaybeStorage(std::in_place_t, Args&&... aArgs) | ||||||||||||
260 | : MaybeStorageBase<T>{std::in_place, std::forward<Args>(aArgs)...}, | ||||||||||||
261 | mIsSome{true} {} | ||||||||||||
262 | |||||||||||||
263 | public: | ||||||||||||
264 | // Copy and move operations are no-ops, since copying is moving is implemented | ||||||||||||
265 | // by Maybe_CopyMove_Enabler. | ||||||||||||
266 | |||||||||||||
267 | MaybeStorage(const MaybeStorage&) : MaybeStorageBase<T>{} {} | ||||||||||||
268 | MaybeStorage& operator=(const MaybeStorage&) { return *this; } | ||||||||||||
269 | MaybeStorage(MaybeStorage&&) : MaybeStorageBase<T>{} {} | ||||||||||||
270 | MaybeStorage& operator=(MaybeStorage&&) { return *this; } | ||||||||||||
271 | |||||||||||||
272 | ~MaybeStorage() { | ||||||||||||
273 | if (mIsSome
| ||||||||||||
274 | this->addr()->T::~T(); | ||||||||||||
275 | } | ||||||||||||
276 | } | ||||||||||||
277 | }; | ||||||||||||
278 | |||||||||||||
279 | template <typename T> | ||||||||||||
280 | struct MaybeStorage<T, true> : MaybeStorageBase<T> { | ||||||||||||
281 | protected: | ||||||||||||
282 | char mIsSome = false; // not bool -- guarantees minimal space consumption | ||||||||||||
283 | |||||||||||||
284 | constexpr MaybeStorage() = default; | ||||||||||||
285 | constexpr explicit MaybeStorage(const T& aVal) | ||||||||||||
286 | : MaybeStorageBase<T>{aVal}, mIsSome{true} {} | ||||||||||||
287 | constexpr explicit MaybeStorage(T&& aVal) | ||||||||||||
288 | : MaybeStorageBase<T>{std::move(aVal)}, mIsSome{true} {} | ||||||||||||
289 | |||||||||||||
290 | template <typename... Args> | ||||||||||||
291 | constexpr explicit MaybeStorage(std::in_place_t, Args&&... aArgs) | ||||||||||||
292 | : MaybeStorageBase<T>{std::in_place, std::forward<Args>(aArgs)...}, | ||||||||||||
293 | mIsSome{true} {} | ||||||||||||
294 | }; | ||||||||||||
295 | |||||||||||||
296 | template <typename T> | ||||||||||||
297 | struct IsMaybeImpl : std::false_type {}; | ||||||||||||
298 | |||||||||||||
299 | template <typename T> | ||||||||||||
300 | struct IsMaybeImpl<Maybe<T>> : std::true_type {}; | ||||||||||||
301 | |||||||||||||
302 | template <typename T> | ||||||||||||
303 | using IsMaybe = IsMaybeImpl<std::decay_t<T>>; | ||||||||||||
304 | |||||||||||||
305 | } // namespace detail | ||||||||||||
306 | |||||||||||||
307 | template <typename T, typename U = typename std::remove_cv< | ||||||||||||
308 | typename std::remove_reference<T>::type>::type> | ||||||||||||
309 | constexpr Maybe<U> Some(T&& aValue); | ||||||||||||
310 | |||||||||||||
311 | /* | ||||||||||||
312 | * Maybe is a container class which contains either zero or one elements. It | ||||||||||||
313 | * serves two roles. It can represent values which are *semantically* optional, | ||||||||||||
314 | * augmenting a type with an explicit 'Nothing' value. In this role, it provides | ||||||||||||
315 | * methods that make it easy to work with values that may be missing, along with | ||||||||||||
316 | * equality and comparison operators so that Maybe values can be stored in | ||||||||||||
317 | * containers. Maybe values can be constructed conveniently in expressions using | ||||||||||||
318 | * type inference, as follows: | ||||||||||||
319 | * | ||||||||||||
320 | * void doSomething(Maybe<Foo> aFoo) { | ||||||||||||
321 | * if (aFoo) // Make sure that aFoo contains a value... | ||||||||||||
322 | * aFoo->takeAction(); // and then use |aFoo->| to access it. | ||||||||||||
323 | * } // |*aFoo| also works! | ||||||||||||
324 | * | ||||||||||||
325 | * doSomething(Nothing()); // Passes a Maybe<Foo> containing no value. | ||||||||||||
326 | * doSomething(Some(Foo(100))); // Passes a Maybe<Foo> containing |Foo(100)|. | ||||||||||||
327 | * | ||||||||||||
328 | * You'll note that it's important to check whether a Maybe contains a value | ||||||||||||
329 | * before using it, using conversion to bool, |isSome()|, or |isNothing()|. You | ||||||||||||
330 | * can avoid these checks, and sometimes write more readable code, using | ||||||||||||
331 | * |valueOr()|, |ptrOr()|, and |refOr()|, which allow you to retrieve the value | ||||||||||||
332 | * in the Maybe and provide a default for the 'Nothing' case. You can also use | ||||||||||||
333 | * |apply()| to call a function only if the Maybe holds a value, and |map()| to | ||||||||||||
334 | * transform the value in the Maybe, returning another Maybe with a possibly | ||||||||||||
335 | * different type. | ||||||||||||
336 | * | ||||||||||||
337 | * Maybe's other role is to support lazily constructing objects without using | ||||||||||||
338 | * dynamic storage. A Maybe directly contains storage for a value, but it's | ||||||||||||
339 | * empty by default. |emplace()|, as mentioned above, can be used to construct a | ||||||||||||
340 | * value in Maybe's storage. The value a Maybe contains can be destroyed by | ||||||||||||
341 | * calling |reset()|; this will happen automatically if a Maybe is destroyed | ||||||||||||
342 | * while holding a value. | ||||||||||||
343 | * | ||||||||||||
344 | * It's a common idiom in C++ to use a pointer as a 'Maybe' type, with a null | ||||||||||||
345 | * value meaning 'Nothing' and any other value meaning 'Some'. You can convert | ||||||||||||
346 | * from such a pointer to a Maybe value using 'ToMaybe()'. | ||||||||||||
347 | * | ||||||||||||
348 | * Maybe is inspired by similar types in the standard library of many other | ||||||||||||
349 | * languages (e.g. Haskell's Maybe and Rust's Option). In the C++ world it's | ||||||||||||
350 | * very similar to std::optional, which was proposed for C++14 and originated in | ||||||||||||
351 | * Boost. The most important differences between Maybe and std::optional are: | ||||||||||||
352 | * | ||||||||||||
353 | * - std::optional<T> may be compared with T. We deliberately forbid that. | ||||||||||||
354 | * - std::optional has |valueOr()|, equivalent to Maybe's |valueOr()|, but | ||||||||||||
355 | * lacks corresponding methods for |refOr()| and |ptrOr()|. | ||||||||||||
356 | * - std::optional lacks |map()| and |apply()|, making it less suitable for | ||||||||||||
357 | * functional-style code. | ||||||||||||
358 | * - std::optional lacks many convenience functions that Maybe has. Most | ||||||||||||
359 | * unfortunately, it lacks equivalents of the type-inferred constructor | ||||||||||||
360 | * functions |Some()| and |Nothing()|. | ||||||||||||
361 | */ | ||||||||||||
362 | template <class T> | ||||||||||||
363 | class MOZ_INHERIT_TYPE_ANNOTATIONS_FROM_TEMPLATE_ARGS Maybe | ||||||||||||
364 | : private detail::MaybeStorage<T>, | ||||||||||||
365 | public detail::Maybe_CopyMove_Enabler<T> { | ||||||||||||
366 | template <typename, bool, bool, bool> | ||||||||||||
367 | friend class detail::Maybe_CopyMove_Enabler; | ||||||||||||
368 | |||||||||||||
369 | template <typename U, typename V> | ||||||||||||
370 | friend constexpr Maybe<V> Some(U&& aValue); | ||||||||||||
371 | |||||||||||||
372 | struct SomeGuard {}; | ||||||||||||
373 | |||||||||||||
374 | template <typename U> | ||||||||||||
375 | constexpr Maybe(U&& aValue, SomeGuard) | ||||||||||||
376 | : detail::MaybeStorage<T>{std::forward<U>(aValue)} {} | ||||||||||||
377 | |||||||||||||
378 | using detail::MaybeStorage<T>::mIsSome; | ||||||||||||
379 | using detail::MaybeStorage<T>::mStorage; | ||||||||||||
380 | |||||||||||||
381 | void poisonData() { detail::MaybePoisoner<T>::poison(&mStorage.val); } | ||||||||||||
382 | |||||||||||||
383 | public: | ||||||||||||
384 | using ValueType = T; | ||||||||||||
385 | |||||||||||||
386 | MOZ_ALLOW_TEMPORARY constexpr Maybe() = default; | ||||||||||||
387 | |||||||||||||
388 | MOZ_ALLOW_TEMPORARY MOZ_IMPLICIT constexpr Maybe(Nothing) : Maybe{} {} | ||||||||||||
389 | |||||||||||||
390 | template <typename... Args> | ||||||||||||
391 | constexpr explicit Maybe(std::in_place_t, Args&&... aArgs) | ||||||||||||
392 | : detail::MaybeStorage<T>{std::in_place, std::forward<Args>(aArgs)...} {} | ||||||||||||
393 | |||||||||||||
394 | /** | ||||||||||||
395 | * Maybe<T> can be copy-constructed from a Maybe<U> if T is constructible from | ||||||||||||
396 | * a const U&. | ||||||||||||
397 | */ | ||||||||||||
398 | template <typename U, | ||||||||||||
399 | std::enable_if_t<std::is_constructible_v<T, const U&>, bool> = true> | ||||||||||||
400 | MOZ_IMPLICIT Maybe(const Maybe<U>& aOther) { | ||||||||||||
401 | if (aOther.isSome()) { | ||||||||||||
402 | emplace(*aOther); | ||||||||||||
403 | } | ||||||||||||
404 | } | ||||||||||||
405 | |||||||||||||
406 | template <typename U, std::enable_if_t<!std::is_constructible_v<T, const U&>, | ||||||||||||
407 | bool> = true> | ||||||||||||
408 | explicit Maybe(const Maybe<U>& aOther) = delete; | ||||||||||||
409 | |||||||||||||
410 | /** | ||||||||||||
411 | * Maybe<T> can be move-constructed from a Maybe<U> if T is constructible from | ||||||||||||
412 | * a U&&. | ||||||||||||
413 | */ | ||||||||||||
414 | template <typename U, | ||||||||||||
415 | std::enable_if_t<std::is_constructible_v<T, U&&>, bool> = true> | ||||||||||||
416 | MOZ_IMPLICIT Maybe(Maybe<U>&& aOther) { | ||||||||||||
417 | if (aOther.isSome()) { | ||||||||||||
418 | emplace(std::move(*aOther)); | ||||||||||||
419 | aOther.reset(); | ||||||||||||
420 | } | ||||||||||||
421 | } | ||||||||||||
422 | template <typename U, | ||||||||||||
423 | std::enable_if_t<!std::is_constructible_v<T, U&&>, bool> = true> | ||||||||||||
424 | explicit Maybe(Maybe<U>&& aOther) = delete; | ||||||||||||
425 | |||||||||||||
426 | template <typename U, | ||||||||||||
427 | std::enable_if_t<std::is_constructible_v<T, const U&>, bool> = true> | ||||||||||||
428 | Maybe& operator=(const Maybe<U>& aOther) { | ||||||||||||
429 | if (aOther.isSome()) { | ||||||||||||
430 | if (mIsSome) { | ||||||||||||
431 | ref() = aOther.ref(); | ||||||||||||
432 | } else { | ||||||||||||
433 | emplace(*aOther); | ||||||||||||
434 | } | ||||||||||||
435 | } else { | ||||||||||||
436 | reset(); | ||||||||||||
437 | } | ||||||||||||
438 | return *this; | ||||||||||||
439 | } | ||||||||||||
440 | |||||||||||||
441 | template <typename U, std::enable_if_t<!std::is_constructible_v<T, const U&>, | ||||||||||||
442 | bool> = true> | ||||||||||||
443 | Maybe& operator=(const Maybe<U>& aOther) = delete; | ||||||||||||
444 | |||||||||||||
445 | template <typename U, | ||||||||||||
446 | std::enable_if_t<std::is_constructible_v<T, U&&>, bool> = true> | ||||||||||||
447 | Maybe& operator=(Maybe<U>&& aOther) { | ||||||||||||
448 | if (aOther.isSome()) { | ||||||||||||
449 | if (mIsSome) { | ||||||||||||
450 | ref() = std::move(aOther.ref()); | ||||||||||||
451 | } else { | ||||||||||||
452 | emplace(std::move(*aOther)); | ||||||||||||
453 | } | ||||||||||||
454 | aOther.reset(); | ||||||||||||
455 | } else { | ||||||||||||
456 | reset(); | ||||||||||||
457 | } | ||||||||||||
458 | |||||||||||||
459 | return *this; | ||||||||||||
460 | } | ||||||||||||
461 | |||||||||||||
462 | template <typename U, | ||||||||||||
463 | std::enable_if_t<!std::is_constructible_v<T, U&&>, bool> = true> | ||||||||||||
464 | Maybe& operator=(Maybe<U>&& aOther) = delete; | ||||||||||||
465 | |||||||||||||
466 | constexpr Maybe& operator=(Nothing) { | ||||||||||||
467 | reset(); | ||||||||||||
468 | return *this; | ||||||||||||
469 | } | ||||||||||||
470 | |||||||||||||
471 | /* Methods that check whether this Maybe contains a value */ | ||||||||||||
472 | constexpr explicit operator bool() const { return isSome(); } | ||||||||||||
473 | constexpr bool isSome() const { return mIsSome; } | ||||||||||||
474 | constexpr bool isNothing() const { return !mIsSome; } | ||||||||||||
475 | |||||||||||||
476 | /* Returns the contents of this Maybe<T> by value. Unsafe unless |isSome()|. | ||||||||||||
477 | */ | ||||||||||||
478 | constexpr T value() const&; | ||||||||||||
479 | constexpr T value() &&; | ||||||||||||
480 | constexpr T value() const&&; | ||||||||||||
481 | |||||||||||||
482 | /** | ||||||||||||
483 | * Move the contents of this Maybe<T> out of internal storage and return it | ||||||||||||
484 | * without calling the destructor. The internal storage is also reset to | ||||||||||||
485 | * avoid multiple calls. Unsafe unless |isSome()|. | ||||||||||||
486 | */ | ||||||||||||
487 | constexpr T extract() { | ||||||||||||
488 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 488); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 488; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
489 | T v = std::move(mStorage.val); | ||||||||||||
490 | reset(); | ||||||||||||
491 | return v; | ||||||||||||
492 | } | ||||||||||||
493 | |||||||||||||
494 | /** | ||||||||||||
495 | * Returns the value (possibly |Nothing()|) by moving it out of this Maybe<T> | ||||||||||||
496 | * and leaving |Nothing()| in its place. | ||||||||||||
497 | */ | ||||||||||||
498 | Maybe<T> take() { return std::exchange(*this, Nothing()); } | ||||||||||||
499 | |||||||||||||
500 | /* | ||||||||||||
501 | * Returns the contents of this Maybe<T> by value. If |isNothing()|, returns | ||||||||||||
502 | * the default value provided. | ||||||||||||
503 | * | ||||||||||||
504 | * Note: If the value passed to aDefault is not the result of a trivial | ||||||||||||
505 | * expression, but expensive to evaluate, e.g. |valueOr(ExpensiveFunction())|, | ||||||||||||
506 | * use |valueOrFrom| instead, e.g. | ||||||||||||
507 | * |valueOrFrom([arg] { return ExpensiveFunction(arg); })|. This ensures | ||||||||||||
508 | * that the expensive expression is only evaluated when its result will | ||||||||||||
509 | * actually be used. | ||||||||||||
510 | */ | ||||||||||||
511 | template <typename V> | ||||||||||||
512 | constexpr T valueOr(V&& aDefault) const { | ||||||||||||
513 | if (isSome()) { | ||||||||||||
514 | return ref(); | ||||||||||||
515 | } | ||||||||||||
516 | return std::forward<V>(aDefault); | ||||||||||||
517 | } | ||||||||||||
518 | |||||||||||||
519 | /* | ||||||||||||
520 | * Returns the contents of this Maybe<T> by value. If |isNothing()|, returns | ||||||||||||
521 | * the value returned from the function or functor provided. | ||||||||||||
522 | */ | ||||||||||||
523 | template <typename F> | ||||||||||||
524 | constexpr T valueOrFrom(F&& aFunc) const { | ||||||||||||
525 | if (isSome()) { | ||||||||||||
526 | return ref(); | ||||||||||||
527 | } | ||||||||||||
528 | return aFunc(); | ||||||||||||
529 | } | ||||||||||||
530 | |||||||||||||
531 | /* Returns the contents of this Maybe<T> by pointer. Unsafe unless |isSome()|. | ||||||||||||
532 | */ | ||||||||||||
533 | T* ptr(); | ||||||||||||
534 | constexpr const T* ptr() const; | ||||||||||||
535 | |||||||||||||
536 | /* | ||||||||||||
537 | * Returns the contents of this Maybe<T> by pointer. If |isNothing()|, | ||||||||||||
538 | * returns the default value provided. | ||||||||||||
539 | */ | ||||||||||||
540 | T* ptrOr(T* aDefault) { | ||||||||||||
541 | if (isSome()) { | ||||||||||||
542 | return ptr(); | ||||||||||||
543 | } | ||||||||||||
544 | return aDefault; | ||||||||||||
545 | } | ||||||||||||
546 | |||||||||||||
547 | constexpr const T* ptrOr(const T* aDefault) const { | ||||||||||||
548 | if (isSome()) { | ||||||||||||
549 | return ptr(); | ||||||||||||
550 | } | ||||||||||||
551 | return aDefault; | ||||||||||||
552 | } | ||||||||||||
553 | |||||||||||||
554 | /* | ||||||||||||
555 | * Returns the contents of this Maybe<T> by pointer. If |isNothing()|, | ||||||||||||
556 | * returns the value returned from the function or functor provided. | ||||||||||||
557 | */ | ||||||||||||
558 | template <typename F> | ||||||||||||
559 | T* ptrOrFrom(F&& aFunc) { | ||||||||||||
560 | if (isSome()) { | ||||||||||||
561 | return ptr(); | ||||||||||||
562 | } | ||||||||||||
563 | return aFunc(); | ||||||||||||
564 | } | ||||||||||||
565 | |||||||||||||
566 | template <typename F> | ||||||||||||
567 | const T* ptrOrFrom(F&& aFunc) const { | ||||||||||||
568 | if (isSome()) { | ||||||||||||
569 | return ptr(); | ||||||||||||
570 | } | ||||||||||||
571 | return aFunc(); | ||||||||||||
572 | } | ||||||||||||
573 | |||||||||||||
574 | constexpr T* operator->(); | ||||||||||||
575 | constexpr const T* operator->() const; | ||||||||||||
576 | |||||||||||||
577 | /* Returns the contents of this Maybe<T> by ref. Unsafe unless |isSome()|. */ | ||||||||||||
578 | constexpr T& ref() &; | ||||||||||||
579 | constexpr const T& ref() const&; | ||||||||||||
580 | constexpr T&& ref() &&; | ||||||||||||
581 | constexpr const T&& ref() const&&; | ||||||||||||
582 | |||||||||||||
583 | /* | ||||||||||||
584 | * Returns the contents of this Maybe<T> by ref. If |isNothing()|, returns | ||||||||||||
585 | * the default value provided. | ||||||||||||
586 | */ | ||||||||||||
587 | constexpr T& refOr(T& aDefault) { | ||||||||||||
588 | if (isSome()) { | ||||||||||||
589 | return ref(); | ||||||||||||
590 | } | ||||||||||||
591 | return aDefault; | ||||||||||||
592 | } | ||||||||||||
593 | |||||||||||||
594 | constexpr const T& refOr(const T& aDefault) const { | ||||||||||||
595 | if (isSome()) { | ||||||||||||
596 | return ref(); | ||||||||||||
597 | } | ||||||||||||
598 | return aDefault; | ||||||||||||
599 | } | ||||||||||||
600 | |||||||||||||
601 | /* | ||||||||||||
602 | * Returns the contents of this Maybe<T> by ref. If |isNothing()|, returns the | ||||||||||||
603 | * value returned from the function or functor provided. | ||||||||||||
604 | */ | ||||||||||||
605 | template <typename F> | ||||||||||||
606 | constexpr T& refOrFrom(F&& aFunc) { | ||||||||||||
607 | if (isSome()) { | ||||||||||||
608 | return ref(); | ||||||||||||
609 | } | ||||||||||||
610 | return aFunc(); | ||||||||||||
611 | } | ||||||||||||
612 | |||||||||||||
613 | template <typename F> | ||||||||||||
614 | constexpr const T& refOrFrom(F&& aFunc) const { | ||||||||||||
615 | if (isSome()) { | ||||||||||||
616 | return ref(); | ||||||||||||
617 | } | ||||||||||||
618 | return aFunc(); | ||||||||||||
619 | } | ||||||||||||
620 | |||||||||||||
621 | constexpr T& operator*() &; | ||||||||||||
622 | constexpr const T& operator*() const&; | ||||||||||||
623 | constexpr T&& operator*() &&; | ||||||||||||
624 | constexpr const T&& operator*() const&&; | ||||||||||||
625 | |||||||||||||
626 | /* If |isSome()|, runs the provided function or functor on the contents of | ||||||||||||
627 | * this Maybe. */ | ||||||||||||
628 | template <typename Func> | ||||||||||||
629 | constexpr Maybe& apply(Func&& aFunc) & { | ||||||||||||
630 | if (isSome()) { | ||||||||||||
631 | std::forward<Func>(aFunc)(ref()); | ||||||||||||
632 | } | ||||||||||||
633 | return *this; | ||||||||||||
634 | } | ||||||||||||
635 | |||||||||||||
636 | template <typename Func> | ||||||||||||
637 | constexpr const Maybe& apply(Func&& aFunc) const& { | ||||||||||||
638 | if (isSome()) { | ||||||||||||
639 | std::forward<Func>(aFunc)(ref()); | ||||||||||||
640 | } | ||||||||||||
641 | return *this; | ||||||||||||
642 | } | ||||||||||||
643 | |||||||||||||
644 | template <typename Func> | ||||||||||||
645 | constexpr Maybe& apply(Func&& aFunc) && { | ||||||||||||
646 | if (isSome()) { | ||||||||||||
647 | std::forward<Func>(aFunc)(extract()); | ||||||||||||
648 | } | ||||||||||||
649 | return *this; | ||||||||||||
650 | } | ||||||||||||
651 | |||||||||||||
652 | template <typename Func> | ||||||||||||
653 | constexpr Maybe& apply(Func&& aFunc) const&& { | ||||||||||||
654 | if (isSome()) { | ||||||||||||
655 | std::forward<Func>(aFunc)(extract()); | ||||||||||||
656 | } | ||||||||||||
657 | return *this; | ||||||||||||
658 | } | ||||||||||||
659 | |||||||||||||
660 | /* | ||||||||||||
661 | * If |isSome()|, runs the provided function and returns the result wrapped | ||||||||||||
662 | * in a Maybe. If |isNothing()|, returns an empty Maybe value with the same | ||||||||||||
663 | * value type as what the provided function would have returned. | ||||||||||||
664 | */ | ||||||||||||
665 | template <typename Func> | ||||||||||||
666 | constexpr auto map(Func&& aFunc) & { | ||||||||||||
667 | if (isSome()) { | ||||||||||||
668 | return Some(std::forward<Func>(aFunc)(ref())); | ||||||||||||
669 | } | ||||||||||||
670 | return Maybe<decltype(std::forward<Func>(aFunc)(ref()))>{}; | ||||||||||||
671 | } | ||||||||||||
672 | |||||||||||||
673 | template <typename Func> | ||||||||||||
674 | constexpr auto map(Func&& aFunc) const& { | ||||||||||||
675 | if (isSome()) { | ||||||||||||
676 | return Some(std::forward<Func>(aFunc)(ref())); | ||||||||||||
677 | } | ||||||||||||
678 | return Maybe<decltype(std::forward<Func>(aFunc)(ref()))>{}; | ||||||||||||
679 | } | ||||||||||||
680 | |||||||||||||
681 | template <typename Func> | ||||||||||||
682 | constexpr auto map(Func&& aFunc) && { | ||||||||||||
683 | if (isSome()) { | ||||||||||||
684 | return Some(std::forward<Func>(aFunc)(extract())); | ||||||||||||
685 | } | ||||||||||||
686 | return Maybe<decltype(std::forward<Func>(aFunc)(extract()))>{}; | ||||||||||||
687 | } | ||||||||||||
688 | |||||||||||||
689 | template <typename Func> | ||||||||||||
690 | constexpr auto map(Func&& aFunc) const&& { | ||||||||||||
691 | if (isSome()) { | ||||||||||||
692 | return Some(std::forward<Func>(aFunc)(extract())); | ||||||||||||
693 | } | ||||||||||||
694 | return Maybe<decltype(std::forward<Func>(aFunc)(extract()))>{}; | ||||||||||||
695 | } | ||||||||||||
696 | |||||||||||||
697 | /* | ||||||||||||
698 | * If |isSome()|, runs the provided function or functor on the contents of | ||||||||||||
699 | * this Maybe and returns the result. Note that the provided function or | ||||||||||||
700 | * functor must return a Maybe<U> of any type U. | ||||||||||||
701 | * If |isNothing()|, returns an empty Maybe value with the same type as what | ||||||||||||
702 | * the provided function would have returned. | ||||||||||||
703 | */ | ||||||||||||
704 | template <typename Func> | ||||||||||||
705 | constexpr auto andThen(Func&& aFunc) & { | ||||||||||||
706 | static_assert(std::is_invocable_v<Func, T&>); | ||||||||||||
707 | using U = std::invoke_result_t<Func, T&>; | ||||||||||||
708 | static_assert(detail::IsMaybe<U>::value); | ||||||||||||
709 | if (isSome()) { | ||||||||||||
710 | return std::invoke(std::forward<Func>(aFunc), ref()); | ||||||||||||
711 | } | ||||||||||||
712 | return std::remove_cv_t<std::remove_reference_t<U>>{}; | ||||||||||||
713 | } | ||||||||||||
714 | |||||||||||||
715 | template <typename Func> | ||||||||||||
716 | constexpr auto andThen(Func&& aFunc) const& { | ||||||||||||
717 | static_assert(std::is_invocable_v<Func, const T&>); | ||||||||||||
718 | using U = std::invoke_result_t<Func, const T&>; | ||||||||||||
719 | static_assert(detail::IsMaybe<U>::value); | ||||||||||||
720 | if (isSome()) { | ||||||||||||
721 | return std::invoke(std::forward<Func>(aFunc), ref()); | ||||||||||||
722 | } | ||||||||||||
723 | return std::remove_cv_t<std::remove_reference_t<U>>{}; | ||||||||||||
724 | } | ||||||||||||
725 | |||||||||||||
726 | template <typename Func> | ||||||||||||
727 | constexpr auto andThen(Func&& aFunc) && { | ||||||||||||
728 | static_assert(std::is_invocable_v<Func, T&&>); | ||||||||||||
729 | using U = std::invoke_result_t<Func, T&&>; | ||||||||||||
730 | static_assert(detail::IsMaybe<U>::value); | ||||||||||||
731 | if (isSome()) { | ||||||||||||
732 | return std::invoke(std::forward<Func>(aFunc), extract()); | ||||||||||||
733 | } | ||||||||||||
734 | return std::remove_cv_t<std::remove_reference_t<U>>{}; | ||||||||||||
735 | } | ||||||||||||
736 | |||||||||||||
737 | template <typename Func> | ||||||||||||
738 | constexpr auto andThen(Func&& aFunc) const&& { | ||||||||||||
739 | static_assert(std::is_invocable_v<Func, const T&&>); | ||||||||||||
740 | using U = std::invoke_result_t<Func, const T&&>; | ||||||||||||
741 | static_assert(detail::IsMaybe<U>::value); | ||||||||||||
742 | if (isSome()) { | ||||||||||||
743 | return std::invoke(std::forward<Func>(aFunc), extract()); | ||||||||||||
744 | } | ||||||||||||
745 | return std::remove_cv_t<std::remove_reference_t<U>>{}; | ||||||||||||
746 | } | ||||||||||||
747 | |||||||||||||
748 | /* | ||||||||||||
749 | * If |isNothing()|, runs the provided function or functor and returns its | ||||||||||||
750 | * result. If |isSome()|, returns the contained value wrapped in a Maybe. | ||||||||||||
751 | */ | ||||||||||||
752 | template <typename Func> | ||||||||||||
753 | constexpr Maybe orElse(Func&& aFunc) & { | ||||||||||||
754 | static_assert(std::is_invocable_v<Func>); | ||||||||||||
755 | using U = std::invoke_result_t<Func>; | ||||||||||||
756 | static_assert( | ||||||||||||
757 | std::is_same_v<Maybe, std::remove_cv_t<std::remove_reference_t<U>>>); | ||||||||||||
758 | if (isSome()) { | ||||||||||||
759 | return *this; | ||||||||||||
760 | } | ||||||||||||
761 | return std::invoke(std::forward<Func>(aFunc)); | ||||||||||||
762 | } | ||||||||||||
763 | |||||||||||||
764 | template <typename Func> | ||||||||||||
765 | constexpr Maybe orElse(Func&& aFunc) const& { | ||||||||||||
766 | static_assert(std::is_invocable_v<Func>); | ||||||||||||
767 | using U = std::invoke_result_t<Func>; | ||||||||||||
768 | static_assert( | ||||||||||||
769 | std::is_same_v<Maybe, std::remove_cv_t<std::remove_reference_t<U>>>); | ||||||||||||
770 | if (isSome()) { | ||||||||||||
771 | return *this; | ||||||||||||
772 | } | ||||||||||||
773 | return std::invoke(std::forward<Func>(aFunc)); | ||||||||||||
774 | } | ||||||||||||
775 | |||||||||||||
776 | template <typename Func> | ||||||||||||
777 | constexpr Maybe orElse(Func&& aFunc) && { | ||||||||||||
778 | static_assert(std::is_invocable_v<Func>); | ||||||||||||
779 | using U = std::invoke_result_t<Func>; | ||||||||||||
780 | static_assert( | ||||||||||||
781 | std::is_same_v<Maybe, std::remove_cv_t<std::remove_reference_t<U>>>); | ||||||||||||
782 | if (isSome()) { | ||||||||||||
783 | return std::move(*this); | ||||||||||||
784 | } | ||||||||||||
785 | return std::invoke(std::forward<Func>(aFunc)); | ||||||||||||
786 | } | ||||||||||||
787 | |||||||||||||
788 | template <typename Func> | ||||||||||||
789 | constexpr Maybe orElse(Func&& aFunc) const&& { | ||||||||||||
790 | static_assert(std::is_invocable_v<Func>); | ||||||||||||
791 | using U = std::invoke_result_t<Func>; | ||||||||||||
792 | static_assert( | ||||||||||||
793 | std::is_same_v<Maybe, std::remove_cv_t<std::remove_reference_t<U>>>); | ||||||||||||
794 | if (isSome()) { | ||||||||||||
795 | return std::move(*this); | ||||||||||||
796 | } | ||||||||||||
797 | return std::invoke(std::forward<Func>(aFunc)); | ||||||||||||
798 | } | ||||||||||||
799 | |||||||||||||
800 | /* If |isSome()|, empties this Maybe and destroys its contents. */ | ||||||||||||
801 | constexpr void reset() { | ||||||||||||
802 | if (isSome()) { | ||||||||||||
803 | if constexpr (!std::is_trivially_destructible_v<T>) { | ||||||||||||
804 | /* | ||||||||||||
805 | * Static analyzer gets confused if we have Maybe<MutexAutoLock>, | ||||||||||||
806 | * so we suppress thread-safety warnings here | ||||||||||||
807 | */ | ||||||||||||
808 | MOZ_PUSH_IGNORE_THREAD_SAFETYGCC diagnostic push
GCC diagnostic ignored "-Wthread-safety" | ||||||||||||
809 | ref().T::~T(); | ||||||||||||
810 | MOZ_POP_THREAD_SAFETYGCC diagnostic pop | ||||||||||||
811 | poisonData(); | ||||||||||||
812 | } | ||||||||||||
813 | mIsSome = false; | ||||||||||||
814 | } | ||||||||||||
815 | } | ||||||||||||
816 | |||||||||||||
817 | /* | ||||||||||||
818 | * Constructs a T value in-place in this empty Maybe<T>'s storage. The | ||||||||||||
819 | * arguments to |emplace()| are the parameters to T's constructor. | ||||||||||||
820 | */ | ||||||||||||
821 | template <typename... Args> | ||||||||||||
822 | constexpr void emplace(Args&&... aArgs); | ||||||||||||
823 | |||||||||||||
824 | template <typename U> | ||||||||||||
825 | constexpr std::enable_if_t<std::is_same_v<T, U> && | ||||||||||||
826 | std::is_copy_constructible_v<U> && | ||||||||||||
827 | !std::is_move_constructible_v<U>> | ||||||||||||
828 | emplace(U&& aArgs) { | ||||||||||||
829 | emplace(aArgs); | ||||||||||||
830 | } | ||||||||||||
831 | |||||||||||||
832 | friend std::ostream& operator<<(std::ostream& aStream, | ||||||||||||
833 | const Maybe<T>& aMaybe) { | ||||||||||||
834 | if (aMaybe) { | ||||||||||||
835 | aStream << aMaybe.ref(); | ||||||||||||
836 | } else { | ||||||||||||
837 | aStream << "<Nothing>"; | ||||||||||||
838 | } | ||||||||||||
839 | return aStream; | ||||||||||||
840 | } | ||||||||||||
841 | }; | ||||||||||||
842 | |||||||||||||
843 | template <typename T> | ||||||||||||
844 | class Maybe<T&> { | ||||||||||||
845 | public: | ||||||||||||
846 | constexpr Maybe() = default; | ||||||||||||
847 | constexpr MOZ_IMPLICIT Maybe(Nothing) {} | ||||||||||||
848 | |||||||||||||
849 | void emplace(T& aRef) { mValue = &aRef; } | ||||||||||||
850 | |||||||||||||
851 | /* Methods that check whether this Maybe contains a value */ | ||||||||||||
852 | constexpr explicit operator bool() const { return isSome(); } | ||||||||||||
853 | constexpr bool isSome() const { return mValue; } | ||||||||||||
854 | constexpr bool isNothing() const { return !mValue; } | ||||||||||||
855 | |||||||||||||
856 | T& ref() const { | ||||||||||||
857 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 857); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 857; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
858 | return *mValue; | ||||||||||||
859 | } | ||||||||||||
860 | |||||||||||||
861 | T* operator->() const { return &ref(); } | ||||||||||||
862 | T& operator*() const { return ref(); } | ||||||||||||
863 | |||||||||||||
864 | // Deliberately not defining value and ptr accessors, as these may be | ||||||||||||
865 | // confusing on a reference-typed Maybe. | ||||||||||||
866 | |||||||||||||
867 | // XXX Should we define refOr? | ||||||||||||
868 | |||||||||||||
869 | void reset() { mValue = nullptr; } | ||||||||||||
870 | |||||||||||||
871 | template <typename Func> | ||||||||||||
872 | const Maybe& apply(Func&& aFunc) const { | ||||||||||||
873 | if (isSome()) { | ||||||||||||
874 | std::forward<Func>(aFunc)(ref()); | ||||||||||||
875 | } | ||||||||||||
876 | return *this; | ||||||||||||
877 | } | ||||||||||||
878 | |||||||||||||
879 | template <typename Func> | ||||||||||||
880 | auto map(Func&& aFunc) const { | ||||||||||||
881 | Maybe<decltype(std::forward<Func>(aFunc)(ref()))> val; | ||||||||||||
882 | if (isSome()) { | ||||||||||||
883 | val.emplace(std::forward<Func>(aFunc)(ref())); | ||||||||||||
884 | } | ||||||||||||
885 | return val; | ||||||||||||
886 | } | ||||||||||||
887 | |||||||||||||
888 | template <typename Func> | ||||||||||||
889 | constexpr auto andThen(Func&& aFunc) const { | ||||||||||||
890 | static_assert(std::is_invocable_v<Func, T&>); | ||||||||||||
891 | using U = std::invoke_result_t<Func, T&>; | ||||||||||||
892 | static_assert(detail::IsMaybe<U>::value); | ||||||||||||
893 | if (isSome()) { | ||||||||||||
894 | return std::invoke(std::forward<Func>(aFunc), ref()); | ||||||||||||
895 | } | ||||||||||||
896 | return std::remove_cv_t<std::remove_reference_t<U>>{}; | ||||||||||||
897 | } | ||||||||||||
898 | |||||||||||||
899 | template <typename Func> | ||||||||||||
900 | constexpr Maybe orElse(Func&& aFunc) const { | ||||||||||||
901 | static_assert(std::is_invocable_v<Func>); | ||||||||||||
902 | using U = std::invoke_result_t<Func>; | ||||||||||||
903 | static_assert( | ||||||||||||
904 | std::is_same_v<Maybe, std::remove_cv_t<std::remove_reference_t<U>>>); | ||||||||||||
905 | if (isSome()) { | ||||||||||||
906 | return *this; | ||||||||||||
907 | } | ||||||||||||
908 | return std::invoke(std::forward<Func>(aFunc)); | ||||||||||||
909 | } | ||||||||||||
910 | |||||||||||||
911 | bool refEquals(const Maybe<T&>& aOther) const { | ||||||||||||
912 | return mValue == aOther.mValue; | ||||||||||||
913 | } | ||||||||||||
914 | |||||||||||||
915 | bool refEquals(const T& aOther) const { return mValue == &aOther; } | ||||||||||||
916 | |||||||||||||
917 | private: | ||||||||||||
918 | T* mValue = nullptr; | ||||||||||||
919 | }; | ||||||||||||
920 | |||||||||||||
921 | template <typename T> | ||||||||||||
922 | constexpr T Maybe<T>::value() const& { | ||||||||||||
923 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 923); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 923; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
924 | return ref(); | ||||||||||||
925 | } | ||||||||||||
926 | |||||||||||||
927 | template <typename T> | ||||||||||||
928 | constexpr T Maybe<T>::value() && { | ||||||||||||
929 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 929); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 929; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
930 | return std::move(ref()); | ||||||||||||
931 | } | ||||||||||||
932 | |||||||||||||
933 | template <typename T> | ||||||||||||
934 | constexpr T Maybe<T>::value() const&& { | ||||||||||||
935 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 935); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 935; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
936 | return std::move(ref()); | ||||||||||||
937 | } | ||||||||||||
938 | |||||||||||||
939 | template <typename T> | ||||||||||||
940 | T* Maybe<T>::ptr() { | ||||||||||||
941 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 941); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 941; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
942 | return &ref(); | ||||||||||||
943 | } | ||||||||||||
944 | |||||||||||||
945 | template <typename T> | ||||||||||||
946 | constexpr const T* Maybe<T>::ptr() const { | ||||||||||||
947 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 947); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 947; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
948 | return &ref(); | ||||||||||||
949 | } | ||||||||||||
950 | |||||||||||||
951 | template <typename T> | ||||||||||||
952 | constexpr T* Maybe<T>::operator->() { | ||||||||||||
953 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 953); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 953; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
954 | return ptr(); | ||||||||||||
955 | } | ||||||||||||
956 | |||||||||||||
957 | template <typename T> | ||||||||||||
958 | constexpr const T* Maybe<T>::operator->() const { | ||||||||||||
959 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 959); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 959; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
960 | return ptr(); | ||||||||||||
961 | } | ||||||||||||
962 | |||||||||||||
963 | template <typename T> | ||||||||||||
964 | constexpr T& Maybe<T>::ref() & { | ||||||||||||
965 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 965); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 965; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
966 | return mStorage.val; | ||||||||||||
967 | } | ||||||||||||
968 | |||||||||||||
969 | template <typename T> | ||||||||||||
970 | constexpr const T& Maybe<T>::ref() const& { | ||||||||||||
971 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 971); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 971; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
972 | return mStorage.val; | ||||||||||||
973 | } | ||||||||||||
974 | |||||||||||||
975 | template <typename T> | ||||||||||||
976 | constexpr T&& Maybe<T>::ref() && { | ||||||||||||
977 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 977); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 977; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
978 | return std::move(mStorage.val); | ||||||||||||
979 | } | ||||||||||||
980 | |||||||||||||
981 | template <typename T> | ||||||||||||
982 | constexpr const T&& Maybe<T>::ref() const&& { | ||||||||||||
983 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 983); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 983; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
984 | return std::move(mStorage.val); | ||||||||||||
985 | } | ||||||||||||
986 | |||||||||||||
987 | template <typename T> | ||||||||||||
988 | constexpr T& Maybe<T>::operator*() & { | ||||||||||||
989 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 989); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 989; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
990 | return ref(); | ||||||||||||
991 | } | ||||||||||||
992 | |||||||||||||
993 | template <typename T> | ||||||||||||
994 | constexpr const T& Maybe<T>::operator*() const& { | ||||||||||||
995 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 995); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 995; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
996 | return ref(); | ||||||||||||
997 | } | ||||||||||||
998 | |||||||||||||
999 | template <typename T> | ||||||||||||
1000 | constexpr T&& Maybe<T>::operator*() && { | ||||||||||||
1001 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 1001); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 1001; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
1002 | return std::move(ref()); | ||||||||||||
1003 | } | ||||||||||||
1004 | |||||||||||||
1005 | template <typename T> | ||||||||||||
1006 | constexpr const T&& Maybe<T>::operator*() const&& { | ||||||||||||
1007 | MOZ_RELEASE_ASSERT(isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 1007); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "isSome()" ")"); do { *((volatile int*)__null) = 1007; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
1008 | return std::move(ref()); | ||||||||||||
1009 | } | ||||||||||||
1010 | |||||||||||||
1011 | template <typename T> | ||||||||||||
1012 | template <typename... Args> | ||||||||||||
1013 | constexpr void Maybe<T>::emplace(Args&&... aArgs) { | ||||||||||||
1014 | MOZ_RELEASE_ASSERT(!isSome())do { static_assert( mozilla::detail::AssertionConditionType< decltype(!isSome())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!isSome()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!isSome()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/Maybe.h" , 1014); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "!isSome()" ")"); do { *((volatile int*)__null) = 1014; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | ||||||||||||
1015 | ::new (KnownNotNull, &mStorage.val) T(std::forward<Args>(aArgs)...); | ||||||||||||
1016 | mIsSome = true; | ||||||||||||
1017 | } | ||||||||||||
1018 | |||||||||||||
1019 | /* | ||||||||||||
1020 | * Some() creates a Maybe<T> value containing the provided T value. If T has a | ||||||||||||
1021 | * move constructor, it's used to make this as efficient as possible. | ||||||||||||
1022 | * | ||||||||||||
1023 | * Some() selects the type of Maybe it returns by removing any const, volatile, | ||||||||||||
1024 | * or reference qualifiers from the type of the value you pass to it. This gives | ||||||||||||
1025 | * it more intuitive behavior when used in expressions, but it also means that | ||||||||||||
1026 | * if you need to construct a Maybe value that holds a const, volatile, or | ||||||||||||
1027 | * reference value, you need to use emplace() instead. | ||||||||||||
1028 | */ | ||||||||||||
1029 | template <typename T, typename U> | ||||||||||||
1030 | constexpr Maybe<U> Some(T&& aValue) { | ||||||||||||
1031 | return {std::forward<T>(aValue), typename Maybe<U>::SomeGuard{}}; | ||||||||||||
1032 | } | ||||||||||||
1033 | |||||||||||||
1034 | template <typename T> | ||||||||||||
1035 | constexpr Maybe<T&> SomeRef(T& aValue) { | ||||||||||||
1036 | Maybe<T&> value; | ||||||||||||
1037 | value.emplace(aValue); | ||||||||||||
1038 | return value; | ||||||||||||
1039 | } | ||||||||||||
1040 | |||||||||||||
1041 | template <typename T> | ||||||||||||
1042 | constexpr Maybe<T&> ToMaybeRef(T* const aPtr) { | ||||||||||||
1043 | return aPtr ? SomeRef(*aPtr) : Nothing{}; | ||||||||||||
1044 | } | ||||||||||||
1045 | |||||||||||||
1046 | template <typename T> | ||||||||||||
1047 | Maybe<std::remove_cv_t<std::remove_reference_t<T>>> ToMaybe(T* aPtr) { | ||||||||||||
1048 | if (aPtr) { | ||||||||||||
1049 | return Some(*aPtr); | ||||||||||||
1050 | } | ||||||||||||
1051 | return Nothing(); | ||||||||||||
1052 | } | ||||||||||||
1053 | |||||||||||||
1054 | /* | ||||||||||||
1055 | * Two Maybe<T> values are equal if | ||||||||||||
1056 | * - both are Nothing, or | ||||||||||||
1057 | * - both are Some, and the values they contain are equal. | ||||||||||||
1058 | */ | ||||||||||||
1059 | template <typename T> | ||||||||||||
1060 | constexpr bool operator==(const Maybe<T>& aLHS, const Maybe<T>& aRHS) { | ||||||||||||
1061 | static_assert(!std::is_reference_v<T>, | ||||||||||||
1062 | "operator== is not defined for Maybe<T&>, compare values or " | ||||||||||||
1063 | "addresses explicitly instead"); | ||||||||||||
1064 | if (aLHS.isNothing() != aRHS.isNothing()) { | ||||||||||||
1065 | return false; | ||||||||||||
1066 | } | ||||||||||||
1067 | return aLHS.isNothing() || *aLHS == *aRHS; | ||||||||||||
1068 | } | ||||||||||||
1069 | |||||||||||||
1070 | template <typename T> | ||||||||||||
1071 | constexpr bool operator!=(const Maybe<T>& aLHS, const Maybe<T>& aRHS) { | ||||||||||||
1072 | return !(aLHS == aRHS); | ||||||||||||
1073 | } | ||||||||||||
1074 | |||||||||||||
1075 | /* | ||||||||||||
1076 | * We support comparison to Nothing to allow reasonable expressions like: | ||||||||||||
1077 | * if (maybeValue == Nothing()) { ... } | ||||||||||||
1078 | */ | ||||||||||||
1079 | template <typename T> | ||||||||||||
1080 | constexpr bool operator==(const Maybe<T>& aLHS, const Nothing& aRHS) { | ||||||||||||
1081 | return aLHS.isNothing(); | ||||||||||||
1082 | } | ||||||||||||
1083 | |||||||||||||
1084 | template <typename T> | ||||||||||||
1085 | constexpr bool operator!=(const Maybe<T>& aLHS, const Nothing& aRHS) { | ||||||||||||
1086 | return !(aLHS == aRHS); | ||||||||||||
1087 | } | ||||||||||||
1088 | |||||||||||||
1089 | template <typename T> | ||||||||||||
1090 | constexpr bool operator==(const Nothing& aLHS, const Maybe<T>& aRHS) { | ||||||||||||
1091 | return aRHS.isNothing(); | ||||||||||||
1092 | } | ||||||||||||
1093 | |||||||||||||
1094 | template <typename T> | ||||||||||||
1095 | constexpr bool operator!=(const Nothing& aLHS, const Maybe<T>& aRHS) { | ||||||||||||
1096 | return !(aLHS == aRHS); | ||||||||||||
1097 | } | ||||||||||||
1098 | |||||||||||||
1099 | /* | ||||||||||||
1100 | * Maybe<T> values are ordered in the same way T values are ordered, except that | ||||||||||||
1101 | * Nothing comes before anything else. | ||||||||||||
1102 | */ | ||||||||||||
1103 | template <typename T> | ||||||||||||
1104 | constexpr bool operator<(const Maybe<T>& aLHS, const Maybe<T>& aRHS) { | ||||||||||||
1105 | if (aLHS.isNothing()) { | ||||||||||||
1106 | return aRHS.isSome(); | ||||||||||||
1107 | } | ||||||||||||
1108 | if (aRHS.isNothing()) { | ||||||||||||
1109 | return false; | ||||||||||||
1110 | } | ||||||||||||
1111 | return *aLHS < *aRHS; | ||||||||||||
1112 | } | ||||||||||||
1113 | |||||||||||||
1114 | template <typename T> | ||||||||||||
1115 | constexpr bool operator>(const Maybe<T>& aLHS, const Maybe<T>& aRHS) { | ||||||||||||
1116 | return !(aLHS < aRHS || aLHS == aRHS); | ||||||||||||
1117 | } | ||||||||||||
1118 | |||||||||||||
1119 | template <typename T> | ||||||||||||
1120 | constexpr bool operator<=(const Maybe<T>& aLHS, const Maybe<T>& aRHS) { | ||||||||||||
1121 | return aLHS < aRHS || aLHS == aRHS; | ||||||||||||
1122 | } | ||||||||||||
1123 | |||||||||||||
1124 | template <typename T> | ||||||||||||
1125 | constexpr bool operator>=(const Maybe<T>& aLHS, const Maybe<T>& aRHS) { | ||||||||||||
1126 | return !(aLHS < aRHS); | ||||||||||||
1127 | } | ||||||||||||
1128 | |||||||||||||
1129 | template <typename T> | ||||||||||||
1130 | inline void ImplCycleCollectionTraverse( | ||||||||||||
1131 | nsCycleCollectionTraversalCallback& aCallback, mozilla::Maybe<T>& aField, | ||||||||||||
1132 | const char* aName, uint32_t aFlags = 0) { | ||||||||||||
1133 | if (aField) { | ||||||||||||
1134 | ImplCycleCollectionTraverse(aCallback, aField.ref(), aName, aFlags); | ||||||||||||
1135 | } | ||||||||||||
1136 | } | ||||||||||||
1137 | |||||||||||||
1138 | template <typename T> | ||||||||||||
1139 | inline void ImplCycleCollectionUnlink(mozilla::Maybe<T>& aField) { | ||||||||||||
1140 | if (aField) { | ||||||||||||
1141 | ImplCycleCollectionUnlink(aField.ref()); | ||||||||||||
1142 | } | ||||||||||||
1143 | } | ||||||||||||
1144 | |||||||||||||
1145 | } // namespace mozilla | ||||||||||||
1146 | |||||||||||||
1147 | #endif /* mozilla_Maybe_h */ |
1 | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ |
3 | /* This Source Code Form is subject to the terms of the Mozilla Public |
4 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
5 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
6 | |
7 | /* Internal storage class used e.g. by Maybe and Result. This file doesn't |
8 | * contain any public declarations. */ |
9 | |
10 | #ifndef mfbt_MaybeStorageBase_h |
11 | #define mfbt_MaybeStorageBase_h |
12 | |
13 | #include <type_traits> |
14 | #include <utility> |
15 | |
16 | namespace mozilla::detail { |
17 | |
18 | template <typename T> |
19 | constexpr bool IsTriviallyDestructibleAndCopyable = |
20 | std::is_trivially_destructible_v<T> && |
21 | (std::is_trivially_copy_constructible_v<T> || |
22 | !std::is_copy_constructible_v<T>); |
23 | |
24 | template <typename T, bool TriviallyDestructibleAndCopyable = |
25 | IsTriviallyDestructibleAndCopyable<T>> |
26 | struct MaybeStorageBase; |
27 | |
28 | template <typename T> |
29 | struct MaybeStorageBase<T, false> { |
30 | protected: |
31 | using NonConstT = std::remove_const_t<T>; |
32 | |
33 | union Union { |
34 | Union() {} |
35 | explicit Union(const T& aVal) : val{aVal} {} |
36 | template <typename U, |
37 | typename = std::enable_if_t<std::is_move_constructible_v<U>>> |
38 | explicit Union(U&& aVal) : val{std::forward<U>(aVal)} {} |
39 | template <typename... Args> |
40 | explicit Union(std::in_place_t, Args&&... aArgs) |
41 | : val{std::forward<Args>(aArgs)...} {} |
42 | |
43 | ~Union() {} |
44 | |
45 | NonConstT val; |
46 | } mStorage; |
47 | |
48 | public: |
49 | MaybeStorageBase() = default; |
50 | explicit MaybeStorageBase(const T& aVal) : mStorage{aVal} {} |
51 | explicit MaybeStorageBase(T&& aVal) : mStorage{std::move(aVal)} {} |
52 | template <typename... Args> |
53 | explicit MaybeStorageBase(std::in_place_t, Args&&... aArgs) |
54 | : mStorage{std::in_place, std::forward<Args>(aArgs)...} {} |
55 | |
56 | const T* addr() const { return &mStorage.val; } |
57 | T* addr() { return &mStorage.val; } |
58 | }; |
59 | |
60 | template <typename T> |
61 | struct MaybeStorageBase<T, true> { |
62 | protected: |
63 | using NonConstT = std::remove_const_t<T>; |
64 | |
65 | union Union { |
66 | constexpr Union() : dummy() {} |
67 | constexpr explicit Union(const T& aVal) : val{aVal} {} |
68 | constexpr explicit Union(T&& aVal) : val{std::move(aVal)} {} |
69 | template <typename... Args> |
70 | constexpr explicit Union(std::in_place_t, Args&&... aArgs) |
71 | : val{std::forward<Args>(aArgs)...} {} |
72 | |
73 | NonConstT val; |
74 | char dummy; |
75 | } mStorage; |
76 | |
77 | public: |
78 | constexpr MaybeStorageBase() = default; |
79 | constexpr explicit MaybeStorageBase(const T& aVal) : mStorage{aVal} {} |
80 | constexpr explicit MaybeStorageBase(T&& aVal) : mStorage{std::move(aVal)} {} |
81 | |
82 | template <typename... Args> |
83 | constexpr explicit MaybeStorageBase(std::in_place_t, Args&&... aArgs) |
84 | : mStorage{std::in_place, std::forward<Args>(aArgs)...} {} |
85 | |
86 | constexpr const T* addr() const { return &mStorage.val; } |
87 | constexpr T* addr() { return &mStorage.val; } |
88 | }; |
89 | |
90 | } // namespace mozilla::detail |
91 | |
92 | #endif |
1 | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ |
3 | /* This Source Code Form is subject to the terms of the Mozilla Public |
4 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
5 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
6 | |
7 | #ifndef nsINode_h___ |
8 | #define nsINode_h___ |
9 | |
10 | #include "mozilla/DoublyLinkedList.h" |
11 | #include "mozilla/Likely.h" |
12 | #include "mozilla/UniquePtr.h" |
13 | #include "nsCOMPtr.h" // for member, local |
14 | #include "nsGkAtoms.h" // for nsGkAtoms::baseURIProperty |
15 | #include "mozilla/dom/NodeInfo.h" // member (in nsCOMPtr) |
16 | #include "nsIWeakReference.h" |
17 | #include "nsIMutationObserver.h" |
18 | #include "nsNodeInfoManager.h" // for use in NodePrincipal() |
19 | #include "nsPropertyTable.h" // for typedefs |
20 | #include "mozilla/ErrorResult.h" |
21 | #include "mozilla/LinkedList.h" |
22 | #include "mozilla/MemoryReporting.h" |
23 | #include "mozilla/dom/EventTarget.h" // for base class |
24 | #include "js/TypeDecls.h" // for Handle, Value, JSObject, JSContext |
25 | #include "mozilla/dom/DOMString.h" |
26 | #include "mozilla/dom/BindingDeclarations.h" |
27 | #include "mozilla/dom/NodeBinding.h" |
28 | #include "nsTHashtable.h" |
29 | #include <iosfwd> |
30 | |
31 | // Including 'windows.h' will #define GetClassInfo to something else. |
32 | #ifdef XP_WIN |
33 | # ifdef GetClassInfo |
34 | # undef GetClassInfo |
35 | # endif |
36 | #endif |
37 | |
38 | class AttrArray; |
39 | class nsAttrChildContentList; |
40 | template <typename T> |
41 | class nsCOMArray; |
42 | class nsDOMAttributeMap; |
43 | class nsGenericHTMLElement; |
44 | class nsIAnimationObserver; |
45 | class nsIContent; |
46 | class nsIContentSecurityPolicy; |
47 | class nsIFrame; |
48 | class nsIFormControl; |
49 | class nsIHTMLCollection; |
50 | class nsMultiMutationObserver; |
51 | class nsINode; |
52 | class nsINodeList; |
53 | class nsIPrincipal; |
54 | class nsIURI; |
55 | class nsNodeSupportsWeakRefTearoff; |
56 | class nsDOMMutationObserver; |
57 | class nsRange; |
58 | class nsWindowSizes; |
59 | |
60 | namespace mozilla { |
61 | class EventListenerManager; |
62 | struct StyleSelectorList; |
63 | template <typename T> |
64 | class Maybe; |
65 | class PresShell; |
66 | class TextEditor; |
67 | namespace dom { |
68 | /** |
69 | * @return true if aChar is what the WHATWG defines as a 'ascii whitespace'. |
70 | * https://infra.spec.whatwg.org/#ascii-whitespace |
71 | */ |
72 | inline bool IsSpaceCharacter(char16_t aChar) { |
73 | return aChar == ' ' || aChar == '\t' || aChar == '\n' || aChar == '\r' || |
74 | aChar == '\f'; |
75 | } |
76 | inline bool IsSpaceCharacter(char aChar) { |
77 | return aChar == ' ' || aChar == '\t' || aChar == '\n' || aChar == '\r' || |
78 | aChar == '\f'; |
79 | } |
80 | class AbstractRange; |
81 | class AccessibleNode; |
82 | template <typename T> |
83 | class AncestorsOfTypeIterator; |
84 | struct BoxQuadOptions; |
85 | struct ConvertCoordinateOptions; |
86 | class DocGroup; |
87 | class Document; |
88 | class DocumentFragment; |
89 | class DocumentOrShadowRoot; |
90 | class DOMPoint; |
91 | class DOMQuad; |
92 | class DOMRectReadOnly; |
93 | class Element; |
94 | class EventHandlerNonNull; |
95 | template <typename T> |
96 | class FlatTreeAncestorsOfTypeIterator; |
97 | template <typename T> |
98 | class InclusiveAncestorsOfTypeIterator; |
99 | template <typename T> |
100 | class InclusiveFlatTreeAncestorsOfTypeIterator; |
101 | class LinkStyle; |
102 | class MutationObservers; |
103 | template <typename T> |
104 | class Optional; |
105 | class OwningNodeOrString; |
106 | class SelectionNodeCache; |
107 | template <typename> |
108 | class Sequence; |
109 | class ShadowRoot; |
110 | class SVGUseElement; |
111 | class Text; |
112 | class TextOrElementOrDocument; |
113 | struct DOMPointInit; |
114 | struct GetRootNodeOptions; |
115 | enum class CallerType : uint32_t; |
116 | } // namespace dom |
117 | } // namespace mozilla |
118 | |
119 | #define NODE_FLAG_BIT(n_)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (n_))) \ |
120 | (nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (n_))) |
121 | |
122 | enum : uint32_t { |
123 | // This bit will be set if the node has a listener manager. |
124 | NODE_HAS_LISTENERMANAGER = NODE_FLAG_BIT(0)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (0))), |
125 | |
126 | // Whether this node has had any properties set on it |
127 | NODE_HAS_PROPERTIES = NODE_FLAG_BIT(1)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (1))), |
128 | |
129 | // Whether the node has some ancestor, possibly itself, that is native |
130 | // anonymous. This includes ancestors crossing XBL scopes, in cases when an |
131 | // XBL binding is attached to an element which has a native anonymous |
132 | // ancestor. This flag is set-once: once a node has it, it must not be |
133 | // removed. |
134 | // NOTE: Should only be used on nsIContent nodes |
135 | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE = NODE_FLAG_BIT(2)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (2))), |
136 | |
137 | // Whether this node is the root of a native anonymous (from the perspective |
138 | // of its parent) subtree. This flag is set-once: once a node has it, it |
139 | // must not be removed. |
140 | // NOTE: Should only be used on nsIContent nodes |
141 | NODE_IS_NATIVE_ANONYMOUS_ROOT = NODE_FLAG_BIT(3)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (3))), |
142 | |
143 | NODE_IS_EDITABLE = NODE_FLAG_BIT(4)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (4))), |
144 | |
145 | // Whether the node participates in a shadow tree. |
146 | NODE_IS_IN_SHADOW_TREE = NODE_FLAG_BIT(5)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (5))), |
147 | |
148 | // This node needs to go through frame construction to get a frame (or |
149 | // undisplayed entry). |
150 | NODE_NEEDS_FRAME = NODE_FLAG_BIT(6)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (6))), |
151 | |
152 | // At least one descendant in the flattened tree has NODE_NEEDS_FRAME set. |
153 | // This should be set on every node on the flattened tree path between the |
154 | // node(s) with NODE_NEEDS_FRAME and the root content. |
155 | NODE_DESCENDANTS_NEED_FRAMES = NODE_FLAG_BIT(7)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (7))), |
156 | |
157 | // Set if the node has the accesskey attribute set. |
158 | NODE_HAS_ACCESSKEY = NODE_FLAG_BIT(8)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (8))), |
159 | |
160 | NODE_HAS_BEEN_IN_UA_WIDGET = NODE_FLAG_BIT(9)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (9))), |
161 | |
162 | // Set if the node has a nonce value and a header delivered CSP. |
163 | NODE_HAS_NONCE_AND_HEADER_CSP = NODE_FLAG_BIT(10)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (10))), |
164 | |
165 | NODE_KEEPS_DOMARENA = NODE_FLAG_BIT(11)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (11))), |
166 | |
167 | NODE_MAY_HAVE_ELEMENT_CHILDREN = NODE_FLAG_BIT(12)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (12))), |
168 | |
169 | NODE_HAS_SCHEDULED_SELECTION_CHANGE_EVENT = NODE_FLAG_BIT(13)(nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (13))), |
170 | |
171 | // Remaining bits are node type specific. |
172 | NODE_TYPE_SPECIFIC_BITS_OFFSET = 14 |
173 | }; |
174 | |
175 | // Flags for selectors that persist to the DOM node. |
176 | enum class NodeSelectorFlags : uint32_t { |
177 | // Node has an :empty or :-moz-only-whitespace selector |
178 | HasEmptySelector = 1 << 0, |
179 | |
180 | /// A child of the node has a selector such that any insertion, |
181 | /// removal, or appending of children requires restyling the parent, if the |
182 | /// parent is an element. If the parent is the shadow root, the child's |
183 | /// siblings are restyled. |
184 | HasSlowSelector = 1 << 1, |
185 | |
186 | /// A child of the node has a :first-child, :-moz-first-node, |
187 | /// :only-child, :last-child or :-moz-last-node selector. |
188 | HasEdgeChildSelector = 1 << 2, |
189 | |
190 | /// A child of the node has a selector such that any insertion or |
191 | /// removal of children requires restyling later siblings of that |
192 | /// element. Additionally (in this manner it is stronger than |
193 | /// NODE_HAS_SLOW_SELECTOR), if a child's style changes due to any |
194 | /// other content tree changes (e.g., the child changes to or from |
195 | /// matching :empty due to a grandchild insertion or removal), the |
196 | /// child's later siblings must also be restyled. |
197 | HasSlowSelectorLaterSiblings = 1 << 3, |
198 | |
199 | /// HasSlowSelector* was set by the presence of :nth (But not of). |
200 | HasSlowSelectorNth = 1 << 4, |
201 | |
202 | /// A child of this node might be matched by :nth-child(.. of <selector>) or |
203 | /// :nth-last-child(.. of <selector>). If a DOM mutation may have caused the |
204 | /// selector to either match or no longer match that child, the child's |
205 | /// siblings are restyled. |
206 | HasSlowSelectorNthOf = 1 << 5, |
207 | |
208 | /// All instances of :nth flags. |
209 | HasSlowSelectorNthAll = HasSlowSelectorNthOf | HasSlowSelectorNth, |
210 | |
211 | /// Set of selector flags that may trigger a restyle on DOM append, with |
212 | /// restyle on siblings or a single parent (And perhaps their subtrees). |
213 | AllSimpleRestyleFlagsForAppend = HasEmptySelector | HasSlowSelector | |
214 | HasEdgeChildSelector | HasSlowSelectorNthAll, |
215 | |
216 | /// Set of selector flags that may trigger a restyle as a result of any |
217 | /// DOM mutation. |
218 | AllSimpleRestyleFlags = |
219 | AllSimpleRestyleFlagsForAppend | HasSlowSelectorLaterSiblings, |
220 | |
221 | // This node was evaluated as an anchor for a relative selector. |
222 | RelativeSelectorAnchor = 1 << 6, |
223 | |
224 | // This node was evaluated as an anchor for a relative selector, and that |
225 | // relative selector was not the subject of the overall selector. |
226 | RelativeSelectorAnchorNonSubject = 1 << 7, |
227 | |
228 | // This node's sibling(s) performed a relative selector search to this node. |
229 | RelativeSelectorSearchDirectionSibling = 1 << 8, |
230 | |
231 | // This node's ancestor(s) performed a relative selector search to this node. |
232 | RelativeSelectorSearchDirectionAncestor = 1 << 9, |
233 | |
234 | // This node's sibling(s) and ancestor(s), and/or this node's ancestor's |
235 | // sibling(s) performed a relative selector search to this node. |
236 | RelativeSelectorSearchDirectionAncestorSibling = |
237 | RelativeSelectorSearchDirectionSibling | |
238 | RelativeSelectorSearchDirectionAncestor, |
239 | }; |
240 | |
241 | MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(NodeSelectorFlags)inline constexpr mozilla::CastableTypedEnumResult<NodeSelectorFlags > operator |( NodeSelectorFlags a, NodeSelectorFlags b) { typedef mozilla::CastableTypedEnumResult<NodeSelectorFlags> Result ; typedef mozilla::detail::UnsignedIntegerTypeForEnum<NodeSelectorFlags >::Type U; return Result(NodeSelectorFlags(U(a) | U(b))); } inline NodeSelectorFlags& operator |=(NodeSelectorFlags & a, NodeSelectorFlags b) { return a = a | b; } inline constexpr mozilla::CastableTypedEnumResult<NodeSelectorFlags> operator &( NodeSelectorFlags a, NodeSelectorFlags b) { typedef mozilla ::CastableTypedEnumResult<NodeSelectorFlags> Result; typedef mozilla::detail::UnsignedIntegerTypeForEnum<NodeSelectorFlags >::Type U; return Result(NodeSelectorFlags(U(a) & U(b) )); } inline NodeSelectorFlags& operator &=(NodeSelectorFlags & a, NodeSelectorFlags b) { return a = a & b; } inline constexpr mozilla::CastableTypedEnumResult<NodeSelectorFlags > operator ^( NodeSelectorFlags a, NodeSelectorFlags b) { typedef mozilla::CastableTypedEnumResult<NodeSelectorFlags> Result ; typedef mozilla::detail::UnsignedIntegerTypeForEnum<NodeSelectorFlags >::Type U; return Result(NodeSelectorFlags(U(a) ^ U(b))); } inline NodeSelectorFlags& operator ^=(NodeSelectorFlags & a, NodeSelectorFlags b) { return a = a ^ b; } inline constexpr mozilla::CastableTypedEnumResult<NodeSelectorFlags> operator ~(NodeSelectorFlags a) { typedef mozilla::CastableTypedEnumResult <NodeSelectorFlags> Result; typedef mozilla::detail::UnsignedIntegerTypeForEnum <NodeSelectorFlags>::Type U; return Result(NodeSelectorFlags (~(U(a)))); }; |
242 | |
243 | // Make sure we have space for our bits |
244 | #define ASSERT_NODE_FLAGS_SPACE(n)static_assert(WRAPPER_CACHE_FLAGS_BITS_USED + (n) <= sizeof (nsWrapperCache::FlagsType) * 8, "Not enough space for our bits" ) \ |
245 | static_assert(WRAPPER_CACHE_FLAGS_BITS_USED + (n) <= \ |
246 | sizeof(nsWrapperCache::FlagsType) * 8, \ |
247 | "Not enough space for our bits") |
248 | ASSERT_NODE_FLAGS_SPACE(NODE_TYPE_SPECIFIC_BITS_OFFSET)static_assert(WRAPPER_CACHE_FLAGS_BITS_USED + (NODE_TYPE_SPECIFIC_BITS_OFFSET ) <= sizeof(nsWrapperCache::FlagsType) * 8, "Not enough space for our bits" ); |
249 | |
250 | /** |
251 | * Class used to detect unexpected mutations. To use the class create an |
252 | * nsMutationGuard on the stack before unexpected mutations could occur. |
253 | * You can then at any time call Mutated to check if any unexpected mutations |
254 | * have occurred. |
255 | */ |
256 | class nsMutationGuard { |
257 | public: |
258 | nsMutationGuard() { mStartingGeneration = sGeneration; } |
259 | |
260 | /** |
261 | * Returns true if any unexpected mutations have occurred. You can pass in |
262 | * an 8-bit ignore count to ignore a number of expected mutations. |
263 | * |
264 | * We don't need to care about overflow because subtraction of uint64_t's is |
265 | * finding the difference between two elements of the group Z < 2^64. Once |
266 | * we know the difference between two elements we only need to check that is |
267 | * less than the given number of mutations to know less than that many |
268 | * mutations occured. Assuming constant 1ns mutations it would take 584 |
269 | * years for sGeneration to fully wrap around so we can ignore a guard living |
270 | * through a full wrap around. |
271 | */ |
272 | bool Mutated(uint8_t aIgnoreCount) { |
273 | return (sGeneration - mStartingGeneration) > aIgnoreCount; |
274 | } |
275 | |
276 | // This function should be called whenever a mutation that we want to keep |
277 | // track of happen. For now this is only done when children are added or |
278 | // removed, but we might do it for attribute changes too in the future. |
279 | static void DidMutate() { sGeneration++; } |
280 | |
281 | private: |
282 | // This is the value sGeneration had when the guard was constructed. |
283 | uint64_t mStartingGeneration; |
284 | |
285 | // This value is incremented on every mutation, for the life of the process. |
286 | static uint64_t sGeneration; |
287 | }; |
288 | |
289 | /** |
290 | * A class that implements nsIWeakReference |
291 | */ |
292 | class nsNodeWeakReference final : public nsIWeakReference { |
293 | public: |
294 | explicit nsNodeWeakReference(nsINode* aNode); |
295 | |
296 | // nsISupports |
297 | NS_DECL_ISUPPORTSpublic: virtual nsresult QueryInterface(const nsIID& aIID , void** aInstancePtr) override; virtual MozExternalRefCountType AddRef(void) override; virtual MozExternalRefCountType Release (void) override; using HasThreadSafeRefCnt = std::false_type; protected: nsAutoRefCnt mRefCnt; nsAutoOwningThread _mOwningThread ; public: |
298 | |
299 | // nsIWeakReference |
300 | NS_DECL_NSIWEAKREFERENCEvirtual nsresult QueryReferentFromScript(const nsIID & uuid , void * * result) override; virtual size_t SizeOfOnlyThis(mozilla ::MallocSizeOf aMallocSizeOf) override; |
301 | |
302 | void NoticeNodeDestruction() { mObject = nullptr; } |
303 | |
304 | private: |
305 | ~nsNodeWeakReference(); |
306 | }; |
307 | |
308 | // This should be used for any nsINode sub-class that has fields of its own |
309 | // that it needs to measure; any sub-class that doesn't use it will inherit |
310 | // AddSizeOfExcludingThis from its super-class. AddSizeOfIncludingThis() need |
311 | // not be defined, it is inherited from nsINode. |
312 | #define NS_DECL_ADDSIZEOFEXCLUDINGTHISvirtual void AddSizeOfExcludingThis(nsWindowSizes& aSizes , size_t* aNodeSize) const override; \ |
313 | virtual void AddSizeOfExcludingThis(nsWindowSizes& aSizes, \ |
314 | size_t* aNodeSize) const override; |
315 | |
316 | // IID for the nsINode interface |
317 | // Must be kept in sync with xpcom/rust/xpcom/src/interfaces/nonidl.rs |
318 | #define NS_INODE_IID{ 0x70ba4547, 0x7699, 0x44fc, { 0xb3, 0x20, 0x52, 0xdb, 0xe3, 0xd1, 0xf9, 0x0a } } \ |
319 | { \ |
320 | 0x70ba4547, 0x7699, 0x44fc, { \ |
321 | 0xb3, 0x20, 0x52, 0xdb, 0xe3, 0xd1, 0xf9, 0x0a \ |
322 | } \ |
323 | } |
324 | |
325 | /** |
326 | * An internal interface that abstracts some DOMNode-related parts that both |
327 | * nsIContent and Document share. An instance of this interface has a list |
328 | * of nsIContent children and provides access to them. |
329 | */ |
330 | class nsINode : public mozilla::dom::EventTarget { |
331 | #ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED1 |
332 | void AssertInvariantsOnNodeInfoChange(); |
333 | #endif |
334 | public: |
335 | using BoxQuadOptions = mozilla::dom::BoxQuadOptions; |
336 | using ConvertCoordinateOptions = mozilla::dom::ConvertCoordinateOptions; |
337 | using DocGroup = mozilla::dom::DocGroup; |
338 | using Document = mozilla::dom::Document; |
339 | using DOMPoint = mozilla::dom::DOMPoint; |
340 | using DOMPointInit = mozilla::dom::DOMPointInit; |
341 | using DOMQuad = mozilla::dom::DOMQuad; |
342 | using DOMRectReadOnly = mozilla::dom::DOMRectReadOnly; |
343 | using OwningNodeOrString = mozilla::dom::OwningNodeOrString; |
344 | using TextOrElementOrDocument = mozilla::dom::TextOrElementOrDocument; |
345 | using CallerType = mozilla::dom::CallerType; |
346 | using ErrorResult = mozilla::ErrorResult; |
347 | |
348 | // XXXbz Maybe we should codegen a class holding these constants and |
349 | // inherit from it... |
350 | static const auto ELEMENT_NODE = mozilla::dom::Node_Binding::ELEMENT_NODE; |
351 | static const auto ATTRIBUTE_NODE = mozilla::dom::Node_Binding::ATTRIBUTE_NODE; |
352 | static const auto TEXT_NODE = mozilla::dom::Node_Binding::TEXT_NODE; |
353 | static const auto CDATA_SECTION_NODE = |
354 | mozilla::dom::Node_Binding::CDATA_SECTION_NODE; |
355 | static const auto ENTITY_REFERENCE_NODE = |
356 | mozilla::dom::Node_Binding::ENTITY_REFERENCE_NODE; |
357 | static const auto ENTITY_NODE = mozilla::dom::Node_Binding::ENTITY_NODE; |
358 | static const auto PROCESSING_INSTRUCTION_NODE = |
359 | mozilla::dom::Node_Binding::PROCESSING_INSTRUCTION_NODE; |
360 | static const auto COMMENT_NODE = mozilla::dom::Node_Binding::COMMENT_NODE; |
361 | static const auto DOCUMENT_NODE = mozilla::dom::Node_Binding::DOCUMENT_NODE; |
362 | static const auto DOCUMENT_TYPE_NODE = |
363 | mozilla::dom::Node_Binding::DOCUMENT_TYPE_NODE; |
364 | static const auto DOCUMENT_FRAGMENT_NODE = |
365 | mozilla::dom::Node_Binding::DOCUMENT_FRAGMENT_NODE; |
366 | static const auto NOTATION_NODE = mozilla::dom::Node_Binding::NOTATION_NODE; |
367 | static const auto MAX_NODE_TYPE = NOTATION_NODE; |
368 | |
369 | void* operator new(size_t aSize, nsNodeInfoManager* aManager); |
370 | void* operator new(size_t aSize) = delete; |
371 | void operator delete(void* aPtr); |
372 | |
373 | template <class T> |
374 | using Sequence = mozilla::dom::Sequence<T>; |
375 | |
376 | NS_DECLARE_STATIC_IID_ACCESSOR(NS_INODE_IID)template <typename T, typename U> struct COMTypeInfo; |
377 | |
378 | // The |aNodeSize| outparam on this function is where the actual node size |
379 | // value is put. It gets added to the appropriate value within |aSizes| by |
380 | // AddSizeOfNodeTree(). |
381 | // |
382 | // Among the sub-classes that inherit (directly or indirectly) from nsINode, |
383 | // measurement of the following members may be added later if DMD finds it is |
384 | // worthwhile: |
385 | // - nsGenericHTMLElement: mForm, mFieldSet |
386 | // - nsGenericHTMLFrameElement: mFrameLoader (bug 672539) |
387 | // - HTMLBodyElement: mContentStyleRule |
388 | // - HTMLDataListElement: mOptions |
389 | // - HTMLFieldSetElement: mElements, mDependentElements, mFirstLegend |
390 | // - HTMLFormElement: many! |
391 | // - HTMLFrameSetElement: mRowSpecs, mColSpecs |
392 | // - HTMLInputElement: mInputData, mFiles, mFileList, mStaticDocfileList |
393 | // - nsHTMLMapElement: mAreas |
394 | // - HTMLMediaElement: many! |
395 | // - nsHTMLOutputElement: mDefaultValue, mTokenList |
396 | // - nsHTMLRowElement: mCells |
397 | // - nsHTMLSelectElement: mOptions, mRestoreState |
398 | // - nsHTMLTableElement: mTBodies, mRows, mTableInheritedAttributes |
399 | // - nsHTMLTableSectionElement: mRows |
400 | // - nsHTMLTextAreaElement: mControllers, mState |
401 | // |
402 | // The following members don't need to be measured: |
403 | // - nsIContent: mPrimaryFrame, because it's non-owning and measured elsewhere |
404 | // |
405 | virtual void AddSizeOfExcludingThis(nsWindowSizes& aSizes, |
406 | size_t* aNodeSize) const; |
407 | |
408 | // SizeOfIncludingThis doesn't need to be overridden by sub-classes because |
409 | // sub-classes of nsINode are guaranteed to be laid out in memory in such a |
410 | // way that |this| points to the start of the allocated object, even in |
411 | // methods of nsINode's sub-classes, so aSizes.mState.mMallocSizeOf(this) is |
412 | // always safe to call no matter which object it was invoked on. |
413 | void AddSizeOfIncludingThis(nsWindowSizes& aSizes, size_t* aNodeSize) const; |
414 | |
415 | friend class nsNodeWeakReference; |
416 | friend class nsNodeSupportsWeakRefTearoff; |
417 | friend class AttrArray; |
418 | |
419 | #ifdef MOZILLA_INTERNAL_API1 |
420 | explicit nsINode(already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo); |
421 | #endif |
422 | |
423 | virtual ~nsINode(); |
424 | |
425 | bool IsContainerNode() const { |
426 | return IsElement() || IsDocument() || IsDocumentFragment(); |
427 | } |
428 | |
429 | /** |
430 | * Returns true if the node is a HTMLTemplate element. |
431 | */ |
432 | bool IsTemplateElement() const { return IsHTMLElement(nsGkAtoms::_template); } |
433 | |
434 | bool IsSlotable() const { return IsElement() || IsText(); } |
435 | |
436 | /** |
437 | * Returns true if this is a document node. |
438 | */ |
439 | bool IsDocument() const { |
440 | // One less pointer-chase than checking NodeType(). |
441 | return !GetParentNode() && IsInUncomposedDoc(); |
442 | } |
443 | |
444 | /** |
445 | * Return this node as a document. Asserts IsDocument(). |
446 | * |
447 | * This is defined inline in Document.h. |
448 | */ |
449 | inline Document* AsDocument(); |
450 | inline const Document* AsDocument() const; |
451 | |
452 | /** |
453 | * Returns true if this is a document fragment node. |
454 | */ |
455 | bool IsDocumentFragment() const { |
456 | return NodeType() == DOCUMENT_FRAGMENT_NODE; |
457 | } |
458 | |
459 | virtual bool IsHTMLFormControlElement() const { return false; } |
460 | |
461 | /** |
462 | * https://dom.spec.whatwg.org/#concept-tree-inclusive-descendant |
463 | * |
464 | * @param aNode must not be nullptr. |
465 | */ |
466 | bool IsInclusiveDescendantOf(const nsINode* aNode) const; |
467 | |
468 | /** |
469 | * https://dom.spec.whatwg.org/#concept-shadow-including-inclusive-descendant |
470 | * |
471 | * @param aNode must not be nullptr. |
472 | */ |
473 | bool IsShadowIncludingInclusiveDescendantOf(const nsINode* aNode) const; |
474 | |
475 | /** |
476 | * Returns true if the given node is this node or one of its descendants |
477 | * in the "flat tree." |
478 | * |
479 | * @param aNode must not be nullptr. |
480 | */ |
481 | bool IsInclusiveFlatTreeDescendantOf(const nsINode* aNode) const; |
482 | |
483 | /** |
484 | * Return this node as a document fragment. Asserts IsDocumentFragment(). |
485 | * |
486 | * This is defined inline in DocumentFragment.h. |
487 | */ |
488 | inline mozilla::dom::DocumentFragment* AsDocumentFragment(); |
489 | inline const mozilla::dom::DocumentFragment* AsDocumentFragment() const; |
490 | |
491 | JSObject* WrapObject(JSContext*, JS::Handle<JSObject*> aGivenProto) final; |
492 | |
493 | /** |
494 | * Hook for constructing JS::ubi::Concrete specializations for memory |
495 | * reporting. Specializations are defined in NodeUbiReporting.h. |
496 | */ |
497 | virtual void ConstructUbiNode(void* storage) = 0; |
498 | |
499 | /** |
500 | * returns true if we are in priviliged code or |
501 | * layout.css.getBoxQuads.enabled == true. |
502 | */ |
503 | static bool HasBoxQuadsSupport(JSContext* aCx, JSObject* /* unused */); |
504 | |
505 | protected: |
506 | /** |
507 | * WrapNode is called from WrapObject to actually wrap this node, WrapObject |
508 | * does some additional checks and fix-up that's common to all nodes. WrapNode |
509 | * should just call the DOM binding's Wrap function. |
510 | * |
511 | * aGivenProto is the prototype to use (or null if the default one should be |
512 | * used) and should just be passed directly on to the DOM binding's Wrap |
513 | * function. |
514 | */ |
515 | virtual JSObject* WrapNode(JSContext* aCx, |
516 | JS::Handle<JSObject*> aGivenProto) = 0; |
517 | |
518 | public: |
519 | mozilla::dom::ParentObject GetParentObject() |
520 | const; // Implemented in Document.h |
521 | |
522 | /** |
523 | * Returns the first child of a node or the first child of |
524 | * a template element's content if the provided node is a |
525 | * template element. |
526 | */ |
527 | nsIContent* GetFirstChildOfTemplateOrNode(); |
528 | |
529 | /** |
530 | * Return the scope chain parent for this node, for use in things |
531 | * like event handler compilation. Returning null means to use the |
532 | * global object as the scope chain parent. |
533 | */ |
534 | virtual nsINode* GetScopeChainParent() const; |
535 | |
536 | MOZ_CAN_RUN_SCRIPT mozilla::dom::Element* GetParentFlexElement(); |
537 | |
538 | /** |
539 | * Returns the nearest inclusive open popover for a given node, see |
540 | * https://html.spec.whatwg.org/multipage/popover.html#nearest-inclusive-open-popover |
541 | */ |
542 | mozilla::dom::Element* GetNearestInclusiveOpenPopover() const; |
543 | |
544 | /** |
545 | * https://html.spec.whatwg.org/multipage/popover.html#nearest-inclusive-target-popover-for-invoker |
546 | */ |
547 | mozilla::dom::Element* GetNearestInclusiveTargetPopoverForInvoker() const; |
548 | |
549 | nsGenericHTMLElement* GetEffectiveInvokeTargetElement() const; |
550 | |
551 | /** |
552 | * https://html.spec.whatwg.org/multipage/popover.html#popover-target-element |
553 | */ |
554 | nsGenericHTMLElement* GetEffectivePopoverTargetElement() const; |
555 | |
556 | /** |
557 | * https://html.spec.whatwg.org/multipage/popover.html#topmost-clicked-popover |
558 | */ |
559 | mozilla::dom::Element* GetTopmostClickedPopover() const; |
560 | |
561 | bool IsNode() const final { return true; } |
562 | |
563 | NS_IMPL_FROMEVENTTARGET_HELPER(nsINode, IsNode())template <typename T> static auto FromEventTarget( T& aEventTarget) -> decltype(static_cast< nsINode*>(& aEventTarget)) { return aEventTarget.IsNode() ? static_cast< nsINode*>(&aEventTarget) : nullptr; } template <typename T> static nsINode* FromEventTarget( T* aEventTarget) { do { static_assert( mozilla::detail::AssertionConditionType< decltype(aEventTarget)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aEventTarget))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("aEventTarget", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 563); AnnotateMozCrashReason("MOZ_DIAGNOSTIC_ASSERT" "(" "aEventTarget" ")"); do { *((volatile int*)__null) = 563; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); return FromEventTarget (*aEventTarget); } template <typename T> static nsINode * FromEventTargetOrNull( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr; } template <typename T> static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast<const nsINode*>(&aEventTarget )) { return aEventTarget.IsNode() ? static_cast<const nsINode *>(&aEventTarget) : nullptr; } template <typename T > static const nsINode* FromEventTarget(const T* aEventTarget ) { do { static_assert( mozilla::detail::AssertionConditionType <decltype(aEventTarget)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aEventTarget))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("aEventTarget", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 563); AnnotateMozCrashReason("MOZ_DIAGNOSTIC_ASSERT" "(" "aEventTarget" ")"); do { *((volatile int*)__null) = 563; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); return FromEventTarget (*aEventTarget); } template <typename T> static const nsINode * FromEventTargetOrNull(const T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr; } template <typename T> static nsINode* FromEventTarget(T&& aEventTarget ) { do { static_assert( mozilla::detail::AssertionConditionType <decltype(!!aEventTarget)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!!aEventTarget))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!!aEventTarget" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 563); AnnotateMozCrashReason("MOZ_DIAGNOSTIC_ASSERT" "(" "!!aEventTarget" ")"); do { *((volatile int*)__null) = 563; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); return aEventTarget ->IsNode() ? static_cast<nsINode*>(static_cast<EventTarget *>(aEventTarget)) : nullptr; } template <typename T> static nsINode* FromEventTargetOrNull(T&& aEventTarget ) { return aEventTarget ? FromEventTarget(aEventTarget) : nullptr ; } |
564 | |
565 | /** |
566 | * Return whether the node is an Element node. Faster than using `NodeType()`. |
567 | */ |
568 | bool IsElement() const { return GetBoolFlag(NodeIsElement); } |
569 | |
570 | virtual bool IsTextControlElement() const { return false; } |
571 | virtual bool IsGenericHTMLFormControlElementWithState() const { |
572 | return false; |
573 | } |
574 | |
575 | // Returns non-null if this element subclasses `LinkStyle`. |
576 | virtual const mozilla::dom::LinkStyle* AsLinkStyle() const { return nullptr; } |
577 | mozilla::dom::LinkStyle* AsLinkStyle() { |
578 | return const_cast<mozilla::dom::LinkStyle*>( |
579 | static_cast<const nsINode*>(this)->AsLinkStyle()); |
580 | } |
581 | |
582 | /** |
583 | * Return this node as an Element. Should only be used for nodes |
584 | * for which IsElement() is true. This is defined inline in Element.h. |
585 | */ |
586 | inline mozilla::dom::Element* AsElement(); |
587 | inline const mozilla::dom::Element* AsElement() const; |
588 | |
589 | /** |
590 | * Return whether the node is an nsStyledElement instance or not. |
591 | */ |
592 | virtual bool IsStyledElement() const { return false; } |
593 | |
594 | /** |
595 | * Return this node as nsIContent. Should only be used for nodes for which |
596 | * IsContent() is true. |
597 | * |
598 | * The assertion in nsIContent's constructor makes this safe. |
599 | */ |
600 | nsIContent* AsContent() { |
601 | MOZ_ASSERT(IsContent())do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsContent())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsContent()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("IsContent()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 601); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsContent()" ")"); do { *((volatile int*)__null) = 601; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
602 | return reinterpret_cast<nsIContent*>(this); |
603 | } |
604 | const nsIContent* AsContent() const { |
605 | MOZ_ASSERT(IsContent())do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsContent())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsContent()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("IsContent()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 605); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsContent()" ")"); do { *((volatile int*)__null) = 605; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
606 | return reinterpret_cast<const nsIContent*>(this); |
607 | } |
608 | |
609 | /* |
610 | * Return whether the node is a Text node (which might be an actual |
611 | * textnode, or might be a CDATA section). |
612 | */ |
613 | bool IsText() const { |
614 | uint32_t nodeType = NodeType(); |
615 | return nodeType == TEXT_NODE || nodeType == CDATA_SECTION_NODE; |
616 | } |
617 | |
618 | /** |
619 | * Return this node as Text if it is one, otherwise null. This is defined |
620 | * inline in Text.h. |
621 | */ |
622 | inline mozilla::dom::Text* GetAsText(); |
623 | inline const mozilla::dom::Text* GetAsText() const; |
624 | |
625 | /** |
626 | * Return this node as Text. Asserts IsText(). This is defined inline in |
627 | * Text.h. |
628 | */ |
629 | inline mozilla::dom::Text* AsText(); |
630 | inline const mozilla::dom::Text* AsText() const; |
631 | |
632 | /** |
633 | * Return this node if the instance type inherits nsIFormControl, or an |
634 | * nsIFormControl instance which ia associated with this node. Otherwise, |
635 | * returns nullptr. |
636 | */ |
637 | [[nodiscard]] virtual nsIFormControl* GetAsFormControl() { return nullptr; } |
638 | [[nodiscard]] virtual const nsIFormControl* GetAsFormControl() const { |
639 | return nullptr; |
640 | } |
641 | |
642 | /* |
643 | * Return whether the node is a ProcessingInstruction node. |
644 | */ |
645 | bool IsProcessingInstruction() const { |
646 | return NodeType() == PROCESSING_INSTRUCTION_NODE; |
647 | } |
648 | |
649 | /* |
650 | * Return whether the node is a CharacterData node (text, cdata, |
651 | * comment, processing instruction) |
652 | */ |
653 | bool IsCharacterData() const { |
654 | uint32_t nodeType = NodeType(); |
655 | return nodeType == TEXT_NODE || nodeType == CDATA_SECTION_NODE || |
656 | nodeType == PROCESSING_INSTRUCTION_NODE || nodeType == COMMENT_NODE; |
657 | } |
658 | |
659 | /** |
660 | * Return whether the node is a Comment node. |
661 | */ |
662 | bool IsComment() const { return NodeType() == COMMENT_NODE; } |
663 | |
664 | /** |
665 | * Return whether the node is an Attr node. |
666 | */ |
667 | bool IsAttr() const { return NodeType() == ATTRIBUTE_NODE; } |
668 | |
669 | /** |
670 | * Return if this node has any children. |
671 | */ |
672 | bool HasChildren() const { return !!mFirstChild; } |
673 | |
674 | /** |
675 | * Get the number of children |
676 | * @return the number of children |
677 | */ |
678 | uint32_t GetChildCount() const { return mChildCount; } |
679 | |
680 | /** |
681 | * NOTE: this function is going to be removed soon (hopefully!) Don't use it |
682 | * in new code. |
683 | * |
684 | * Get a child by index |
685 | * @param aIndex the index of the child to get |
686 | * @return the child, or null if index out of bounds |
687 | */ |
688 | nsIContent* GetChildAt_Deprecated(uint32_t aIndex) const; |
689 | |
690 | /** |
691 | * Get the index of a child within this content. |
692 | * |
693 | * @param aPossibleChild the child to get the index of. |
694 | * @return the index of the child, or Nothing if not a child. Be aware that |
695 | * anonymous children (e.g. a <div> child of an <input> element) will |
696 | * result in Nothing. |
697 | * |
698 | * If the return value is Some, then calling GetChildAt_Deprecated() with |
699 | * that value will return aPossibleChild. |
700 | */ |
701 | mozilla::Maybe<uint32_t> ComputeIndexOf(const nsINode* aPossibleChild) const; |
702 | |
703 | /** |
704 | * Get the index of a child within this content's flat tree children. |
705 | * |
706 | * @param aPossibleChild the child to get the index of. |
707 | * @return the index of the child, or Nothing if not a child. Be aware that |
708 | * anonymous children (e.g. a <div> child of an <input> element) will |
709 | * result in Nothing. |
710 | */ |
711 | mozilla::Maybe<uint32_t> ComputeFlatTreeIndexOf( |
712 | const nsINode* aPossibleChild) const; |
713 | |
714 | /** |
715 | * Get the index of this within parent node (ComputeIndexInParentNode) or |
716 | * parent content (nsIContent) node (ComputeIndexInParentContent). |
717 | * |
718 | * @return the index of this node in the parent, or Nothing there is no |
719 | * parent (content) node or the parent does not have this node anymore |
720 | * (e.g., being removed from the parent). Be aware that anonymous |
721 | * children (e.g. a <div> child of an <input> element) will result in |
722 | * Nothing. |
723 | * |
724 | * If the return value is Some, then calling GetChildAt_Deprecated() with |
725 | * that value will return this. |
726 | */ |
727 | mozilla::Maybe<uint32_t> ComputeIndexInParentNode() const; |
728 | mozilla::Maybe<uint32_t> ComputeIndexInParentContent() const; |
729 | |
730 | /** |
731 | * Get the index of a child within this content. |
732 | * |
733 | * @param aPossibleChild the child to get the index of. |
734 | * @return the index of the child, or -1 if not a child. Be aware that |
735 | * anonymous children (e.g. a <div> child of an <input> element) will |
736 | * result in -1. |
737 | * |
738 | * If the return value is not -1, then calling GetChildAt_Deprecated() with |
739 | * that value will return aPossibleChild. |
740 | */ |
741 | int32_t ComputeIndexOf_Deprecated(const nsINode* aPossibleChild) const; |
742 | |
743 | /** |
744 | * Returns the "node document" of this node. |
745 | * |
746 | * https://dom.spec.whatwg.org/#concept-node-document |
747 | * |
748 | * Note that in the case that this node is a document node this method |
749 | * will return |this|. That is different to the Node.ownerDocument DOM |
750 | * attribute (implemented by nsINode::GetOwnerDocument) which is specified to |
751 | * be null in that case: |
752 | * |
753 | * https://dom.spec.whatwg.org/#dom-node-ownerdocument |
754 | * |
755 | * For all other cases OwnerDoc and GetOwnerDocument behave identically. |
756 | */ |
757 | Document* OwnerDoc() const MOZ_NONNULL_RETURN__attribute__((returns_nonnull)) { |
758 | return mNodeInfo->GetDocument(); |
759 | } |
760 | |
761 | /** |
762 | * Return the "owner document" of this node as an nsINode*. Implemented |
763 | * in Document.h. |
764 | */ |
765 | inline nsINode* OwnerDocAsNode() const MOZ_NONNULL_RETURN__attribute__((returns_nonnull)); |
766 | |
767 | /** |
768 | * Returns true if the content has an ancestor that is a document. |
769 | * |
770 | * @return whether this content is in a document tree |
771 | */ |
772 | bool IsInUncomposedDoc() const { return GetBoolFlag(IsInDocument); } |
773 | |
774 | /** |
775 | * Get the document that this content is currently in, if any. This will be |
776 | * null if the content has no ancestor that is a document. |
777 | * |
778 | * @return the current document |
779 | */ |
780 | |
781 | Document* GetUncomposedDoc() const { |
782 | return IsInUncomposedDoc() ? OwnerDoc() : nullptr; |
783 | } |
784 | |
785 | /** |
786 | * Returns true if we're connected, and thus GetComposedDoc() would return a |
787 | * non-null value. |
788 | */ |
789 | bool IsInComposedDoc() const { return GetBoolFlag(IsConnected); } |
790 | |
791 | /** |
792 | * This method returns the owner document if the node is connected to it |
793 | * (as defined in the DOM spec), otherwise it returns null. |
794 | * In other words, returns non-null even in the case the node is in |
795 | * Shadow DOM, if there is a possibly shadow boundary crossing path from |
796 | * the node to its owner document. |
797 | */ |
798 | Document* GetComposedDoc() const { |
799 | return IsInComposedDoc() ? OwnerDoc() : nullptr; |
800 | } |
801 | |
802 | /** |
803 | * Returns OwnerDoc() if the node is in uncomposed document and ShadowRoot if |
804 | * the node is in Shadow DOM. |
805 | */ |
806 | mozilla::dom::DocumentOrShadowRoot* GetContainingDocumentOrShadowRoot() const; |
807 | |
808 | /** |
809 | * Returns OwnerDoc() if the node is in uncomposed document and ShadowRoot if |
810 | * the node is in Shadow DOM and is in composed document. |
811 | */ |
812 | mozilla::dom::DocumentOrShadowRoot* GetUncomposedDocOrConnectedShadowRoot() |
813 | const; |
814 | |
815 | /** |
816 | * To be called when reference count of the node drops to zero. |
817 | */ |
818 | void LastRelease(); |
819 | |
820 | /** |
821 | * The values returned by this function are the ones defined for |
822 | * Node.nodeType |
823 | */ |
824 | uint16_t NodeType() const { return mNodeInfo->NodeType(); } |
825 | const nsString& NodeName() const { return mNodeInfo->NodeName(); } |
826 | const nsString& LocalName() const { return mNodeInfo->LocalName(); } |
827 | |
828 | /** |
829 | * Get the NodeInfo for this element |
830 | * @return the nodes node info |
831 | */ |
832 | inline mozilla::dom::NodeInfo* NodeInfo() const { return mNodeInfo; } |
833 | |
834 | /** |
835 | * Called when we have been adopted, and the information of the |
836 | * node has been changed. |
837 | * |
838 | * The new document can be reached via OwnerDoc(). |
839 | * |
840 | * If you override this method, |
841 | * please call up to the parent NodeInfoChanged. |
842 | * |
843 | * If you change this, change also the similar method in Link. |
844 | */ |
845 | virtual void NodeInfoChanged(Document* aOldDoc) { |
846 | #ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED1 |
847 | AssertInvariantsOnNodeInfoChange(); |
848 | #endif |
849 | } |
850 | |
851 | inline bool IsInNamespace(int32_t aNamespace) const { |
852 | return mNodeInfo->NamespaceID() == aNamespace; |
853 | } |
854 | |
855 | /** |
856 | * Returns the DocGroup of the "node document" of this node. |
857 | */ |
858 | DocGroup* GetDocGroup() const; |
859 | |
860 | /** |
861 | * Print a debugger friendly descriptor of this element. This will describe |
862 | * the position of this element in the document. |
863 | */ |
864 | friend std::ostream& operator<<(std::ostream& aStream, const nsINode& aNode); |
865 | |
866 | protected: |
867 | // These 2 methods are useful for the recursive templates IsHTMLElement, |
868 | // IsSVGElement, etc. |
869 | inline bool IsNodeInternal() const { return false; } |
870 | |
871 | template <typename First, typename... Args> |
872 | inline bool IsNodeInternal(First aFirst, Args... aArgs) const { |
873 | return mNodeInfo->Equals(aFirst) || IsNodeInternal(aArgs...); |
874 | } |
875 | |
876 | public: |
877 | inline bool IsHTMLElement() const { |
878 | return IsElement() && IsInNamespace(kNameSpaceID_XHTML3); |
879 | } |
880 | |
881 | inline bool IsHTMLElement(const nsAtom* aTag) const { |
882 | return IsElement() && mNodeInfo->Equals(aTag, kNameSpaceID_XHTML3); |
883 | } |
884 | |
885 | template <typename First, typename... Args> |
886 | inline bool IsAnyOfHTMLElements(First aFirst, Args... aArgs) const { |
887 | return IsHTMLElement() && IsNodeInternal(aFirst, aArgs...); |
888 | } |
889 | |
890 | inline bool IsSVGElement() const { |
891 | return IsElement() && IsInNamespace(kNameSpaceID_SVG9); |
892 | } |
893 | |
894 | inline bool IsSVGElement(const nsAtom* aTag) const { |
895 | return IsElement() && mNodeInfo->Equals(aTag, kNameSpaceID_SVG9); |
896 | } |
897 | |
898 | template <typename First, typename... Args> |
899 | inline bool IsAnyOfSVGElements(First aFirst, Args... aArgs) const { |
900 | return IsSVGElement() && IsNodeInternal(aFirst, aArgs...); |
901 | } |
902 | |
903 | virtual bool IsSVGAnimationElement() const { return false; } |
904 | virtual bool IsSVGComponentTransferFunctionElement() const { return false; } |
905 | virtual bool IsSVGFilterPrimitiveElement() const { return false; } |
906 | virtual bool IsSVGFilterPrimitiveChildElement() const { return false; } |
907 | virtual bool IsSVGGeometryElement() const { return false; } |
908 | virtual bool IsSVGGraphicsElement() const { return false; } |
909 | |
910 | inline bool IsXULElement() const { |
911 | return IsElement() && IsInNamespace(kNameSpaceID_XUL8); |
912 | } |
913 | |
914 | inline bool IsXULElement(const nsAtom* aTag) const { |
915 | return IsElement() && mNodeInfo->Equals(aTag, kNameSpaceID_XUL8); |
916 | } |
917 | |
918 | template <typename First, typename... Args> |
919 | inline bool IsAnyOfXULElements(First aFirst, Args... aArgs) const { |
920 | return IsXULElement() && IsNodeInternal(aFirst, aArgs...); |
921 | } |
922 | |
923 | inline bool IsMathMLElement() const { |
924 | return IsElement() && IsInNamespace(kNameSpaceID_MathML6); |
925 | } |
926 | |
927 | inline bool IsMathMLElement(const nsAtom* aTag) const { |
928 | return IsElement() && mNodeInfo->Equals(aTag, kNameSpaceID_MathML6); |
929 | } |
930 | |
931 | template <typename First, typename... Args> |
932 | inline bool IsAnyOfMathMLElements(First aFirst, Args... aArgs) const { |
933 | return IsMathMLElement() && IsNodeInternal(aFirst, aArgs...); |
934 | } |
935 | |
936 | bool IsShadowRoot() const { |
937 | const bool isShadowRoot = IsInShadowTree() && !GetParentNode(); |
938 | MOZ_ASSERT_IF(isShadowRoot, IsDocumentFragment())do { if (isShadowRoot) { do { static_assert( mozilla::detail:: AssertionConditionType<decltype(IsDocumentFragment())>:: isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(IsDocumentFragment()))), 0))) { do { } while (false) ; MOZ_ReportAssertionFailure("IsDocumentFragment()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 938); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsDocumentFragment()" ")"); do { *((volatile int*)__null) = 938; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); } } while ( false); |
939 | return isShadowRoot; |
940 | } |
941 | |
942 | bool IsHTMLHeadingElement() const { |
943 | return IsAnyOfHTMLElements(nsGkAtoms::h1, nsGkAtoms::h2, nsGkAtoms::h3, |
944 | nsGkAtoms::h4, nsGkAtoms::h5, nsGkAtoms::h6); |
945 | } |
946 | |
947 | /** |
948 | * Check whether the conditional processing attributes other than |
949 | * systemLanguage "return true" if they apply to and are specified |
950 | * on the given SVG element. Returns true if this element should be |
951 | * rendered, false if it should not. |
952 | */ |
953 | virtual bool PassesConditionalProcessingTests() const { return true; } |
954 | |
955 | /** |
956 | * Insert a content node before another or at the end. |
957 | * This method handles calling BindToTree on the child appropriately. |
958 | * |
959 | * @param aKid the content to insert |
960 | * @param aBeforeThis an existing node. Use nullptr if you want to |
961 | * add aKid at the end. |
962 | * @param aNotify whether to notify the document (current document for |
963 | * nsIContent, and |this| for Document) that the insert has occurred |
964 | * @param aRv The error, if any. |
965 | * Throw NS_ERROR_DOM_HIERARCHY_REQUEST_ERR if one attempts to have |
966 | * more than one element node as a child of a document. Doing this |
967 | * will also assert -- you shouldn't be doing it! Check with |
968 | * Document::GetRootElement() first if you're not sure. Apart from |
969 | * this one constraint, this doesn't do any checking on whether aKid is |
970 | * a valid child of |this|. |
971 | * Throw NS_ERROR_OUT_OF_MEMORY in some cases (from BindToTree). |
972 | */ |
973 | virtual void InsertChildBefore(nsIContent* aKid, nsIContent* aBeforeThis, |
974 | bool aNotify, mozilla::ErrorResult& aRv); |
975 | |
976 | /** |
977 | * Append a content node to the end of the child list. This method handles |
978 | * calling BindToTree on the child appropriately. |
979 | * |
980 | * @param aKid the content to append |
981 | * @param aNotify whether to notify the document (current document for |
982 | * nsIContent, and |this| for Document) that the append has occurred |
983 | * @param aRv The error, if any. |
984 | * Throw NS_ERROR_DOM_HIERARCHY_REQUEST_ERR if one attempts to have |
985 | * more than one element node as a child of a document. Doing this |
986 | * will also assert -- you shouldn't be doing it! Check with |
987 | * Document::GetRootElement() first if you're not sure. Apart from |
988 | * this one constraint, this doesn't do any checking on whether aKid is |
989 | * a valid child of |this|. |
990 | * Throw NS_ERROR_OUT_OF_MEMORY in some cases (from BindToTree). |
991 | */ |
992 | void AppendChildTo(nsIContent* aKid, bool aNotify, |
993 | mozilla::ErrorResult& aRv) { |
994 | InsertChildBefore(aKid, nullptr, aNotify, aRv); |
995 | } |
996 | |
997 | /** |
998 | * Remove a child from this node. This method handles calling UnbindFromTree |
999 | * on the child appropriately. |
1000 | * |
1001 | * @param aKid the content to remove |
1002 | * @param aNotify whether to notify the document (current document for |
1003 | * nsIContent, and |this| for Document) that the remove has occurred |
1004 | */ |
1005 | virtual void RemoveChildNode(nsIContent* aKid, bool aNotify); |
1006 | |
1007 | /** |
1008 | * Get a property associated with this node. |
1009 | * |
1010 | * @param aPropertyName name of property to get. |
1011 | * @param aStatus out parameter for storing resulting status. |
1012 | * Set to NS_PROPTABLE_PROP_NOT_THERE if the property |
1013 | * is not set. |
1014 | * @return the property. Null if the property is not set |
1015 | * (though a null return value does not imply the |
1016 | * property was not set, i.e. it can be set to null). |
1017 | */ |
1018 | void* GetProperty(const nsAtom* aPropertyName, |
1019 | nsresult* aStatus = nullptr) const; |
1020 | |
1021 | /** |
1022 | * Set a property to be associated with this node. This will overwrite an |
1023 | * existing value if one exists. The existing value is destroyed using the |
1024 | * destructor function given when that value was set. |
1025 | * |
1026 | * @param aPropertyName name of property to set. |
1027 | * @param aValue new value of property. |
1028 | * @param aDtor destructor function to be used when this property |
1029 | * is destroyed. |
1030 | * @param aTransfer if true the property will not be deleted when the |
1031 | * ownerDocument of the node changes, if false it |
1032 | * will be deleted. |
1033 | * |
1034 | * @return NS_PROPTABLE_PROP_OVERWRITTEN (success value) if the property |
1035 | * was already set |
1036 | * @throws NS_ERROR_OUT_OF_MEMORY if that occurs |
1037 | */ |
1038 | nsresult SetProperty(nsAtom* aPropertyName, void* aValue, |
1039 | NSPropertyDtorFunc aDtor = nullptr, |
1040 | bool aTransfer = false); |
1041 | |
1042 | /** |
1043 | * A generic destructor for property values allocated with new. |
1044 | */ |
1045 | template <class T> |
1046 | static void DeleteProperty(void*, nsAtom*, void* aPropertyValue, void*) { |
1047 | delete static_cast<T*>(aPropertyValue); |
1048 | } |
1049 | |
1050 | /** |
1051 | * Removes a property associated with this node. The value is destroyed using |
1052 | * the destruction function given when that value was set. |
1053 | * |
1054 | * @param aPropertyName name of property to destroy. |
1055 | */ |
1056 | void RemoveProperty(const nsAtom* aPropertyName); |
1057 | |
1058 | /** |
1059 | * Take a property associated with this node. The value will not be destroyed |
1060 | * but rather returned. It is the caller's responsibility to destroy the value |
1061 | * after that point. |
1062 | * |
1063 | * @param aPropertyName name of property to unset. |
1064 | * @param aStatus out parameter for storing resulting status. |
1065 | * Set to NS_PROPTABLE_PROP_NOT_THERE if the property |
1066 | * is not set. |
1067 | * @return the property. Null if the property is not set |
1068 | * (though a null return value does not imply the |
1069 | * property was not set, i.e. it can be set to null). |
1070 | */ |
1071 | void* TakeProperty(const nsAtom* aPropertyName, nsresult* aStatus = nullptr); |
1072 | |
1073 | bool HasProperties() const { return HasFlag(NODE_HAS_PROPERTIES); } |
1074 | |
1075 | /** |
1076 | * Return the principal of this node. This is guaranteed to never be a null |
1077 | * pointer. |
1078 | */ |
1079 | nsIPrincipal* NodePrincipal() const { |
1080 | return mNodeInfo->NodeInfoManager()->DocumentPrincipal(); |
1081 | } |
1082 | |
1083 | /** |
1084 | * Return the CSP of this node's document, if any. |
1085 | */ |
1086 | nsIContentSecurityPolicy* GetCsp() const; |
1087 | |
1088 | /** |
1089 | * Get the parent nsIContent for this node. |
1090 | * @return the parent, or null if no parent or the parent is not an nsIContent |
1091 | */ |
1092 | nsIContent* GetParent() const { |
1093 | return MOZ_LIKELY(GetBoolFlag(ParentIsContent))(__builtin_expect(!!(GetBoolFlag(ParentIsContent)), 1)) ? mParent->AsContent() |
1094 | : nullptr; |
1095 | } |
1096 | |
1097 | /** |
1098 | * Get the parent nsINode for this node. This can be either an nsIContent, a |
1099 | * Document or an Attr. |
1100 | * @return the parent node |
1101 | */ |
1102 | nsINode* GetParentNode() const { return mParent; } |
1103 | |
1104 | private: |
1105 | nsIContent* DoGetShadowHost() const; |
1106 | |
1107 | public: |
1108 | nsINode* GetParentOrShadowHostNode() const { |
1109 | if (MOZ_LIKELY(mParent)(__builtin_expect(!!(mParent), 1))) { |
1110 | return mParent; |
1111 | } |
1112 | // We could put this in nsIContentInlines.h or such to avoid this |
1113 | // reinterpret_cast, but it doesn't seem worth it. |
1114 | return IsInShadowTree() ? reinterpret_cast<nsINode*>(DoGetShadowHost()) |
1115 | : nullptr; |
1116 | } |
1117 | |
1118 | enum FlattenedParentType { eNormal, eForStyle, eForSelection }; |
1119 | |
1120 | /** |
1121 | * Returns the node that is the parent of this node in the flattened |
1122 | * tree. This differs from the normal parent if the node is filtered |
1123 | * into an insertion point, or if the node is a direct child of a |
1124 | * shadow root. |
1125 | * |
1126 | * @return the flattened tree parent |
1127 | */ |
1128 | inline nsINode* GetFlattenedTreeParentNode() const; |
1129 | |
1130 | nsINode* GetFlattenedTreeParentNodeNonInline() const; |
1131 | |
1132 | /** |
1133 | * Like GetFlattenedTreeParentNode, but returns the document for any native |
1134 | * anonymous content that was generated for ancestor frames of the document |
1135 | * element's primary frame, such as scrollbar elements created by the root |
1136 | * scroll frame. |
1137 | */ |
1138 | inline nsINode* GetFlattenedTreeParentNodeForStyle() const; |
1139 | |
1140 | /** |
1141 | * Similar to GetFlattenedTreeParentNode, it does two things differently |
1142 | * 1. For contents that are not in the flattened tree, use its |
1143 | * parent rather than nullptr. |
1144 | * 2. For contents that are slotted into a UA shadow tree, use its |
1145 | * parent rather than the slot element. |
1146 | */ |
1147 | inline nsIContent* GetFlattenedTreeParentNodeForSelection() const; |
1148 | |
1149 | inline mozilla::dom::Element* GetFlattenedTreeParentElement() const; |
1150 | inline mozilla::dom::Element* GetFlattenedTreeParentElementForStyle() const; |
1151 | |
1152 | /** |
1153 | * Get the parent nsINode for this node if it is an Element. |
1154 | * |
1155 | * Defined inline in Element.h |
1156 | * |
1157 | * @return the parent node |
1158 | */ |
1159 | inline mozilla::dom::Element* GetParentElement() const; |
1160 | |
1161 | /** |
1162 | * Get the parent Element of this node, traversing over a ShadowRoot |
1163 | * to its host if necessary. |
1164 | */ |
1165 | mozilla::dom::Element* GetParentElementCrossingShadowRoot() const; |
1166 | |
1167 | /** |
1168 | * Get closest element node for the node. Meaning that if the node is an |
1169 | * element node, returns itself. Otherwise, returns parent element or null. |
1170 | */ |
1171 | inline mozilla::dom::Element* GetAsElementOrParentElement() const; |
1172 | |
1173 | /** |
1174 | * Get inclusive ancestor element in the flattened tree. |
1175 | */ |
1176 | inline mozilla::dom::Element* GetInclusiveFlattenedTreeAncestorElement() |
1177 | const; |
1178 | |
1179 | /** |
1180 | * Get the root of the subtree this node belongs to. This never returns |
1181 | * null. It may return 'this' (e.g. for document nodes, and nodes that |
1182 | * are the roots of disconnected subtrees). |
1183 | */ |
1184 | nsINode* SubtreeRoot() const; |
1185 | |
1186 | /* |
1187 | * Get context object's shadow-including root if options's composed is true, |
1188 | * and context object's root otherwise. |
1189 | */ |
1190 | nsINode* GetRootNode(const mozilla::dom::GetRootNodeOptions& aOptions); |
1191 | |
1192 | virtual mozilla::EventListenerManager* GetExistingListenerManager() |
1193 | const override; |
1194 | virtual mozilla::EventListenerManager* GetOrCreateListenerManager() override; |
1195 | |
1196 | mozilla::Maybe<mozilla::dom::EventCallbackDebuggerNotificationType> |
1197 | GetDebuggerNotificationType() const override; |
1198 | |
1199 | bool ComputeDefaultWantsUntrusted(mozilla::ErrorResult& aRv) final; |
1200 | |
1201 | virtual bool IsApzAware() const override; |
1202 | |
1203 | virtual nsPIDOMWindowOuter* GetOwnerGlobalForBindingsInternal() override; |
1204 | virtual nsIGlobalObject* GetOwnerGlobal() const override; |
1205 | |
1206 | using mozilla::dom::EventTarget::DispatchEvent; |
1207 | // TODO: Convert this to MOZ_CAN_RUN_SCRIPT (bug 1415230) |
1208 | MOZ_CAN_RUN_SCRIPT_BOUNDARY bool DispatchEvent( |
1209 | mozilla::dom::Event& aEvent, mozilla::dom::CallerType aCallerType, |
1210 | mozilla::ErrorResult& aRv) override; |
1211 | |
1212 | MOZ_CAN_RUN_SCRIPT |
1213 | nsresult PostHandleEvent(mozilla::EventChainPostVisitor& aVisitor) override; |
1214 | |
1215 | /** |
1216 | * Adds a mutation observer to be notified when this node, or any of its |
1217 | * descendants, are modified. The node will hold a weak reference to the |
1218 | * observer, which means that it is the responsibility of the observer to |
1219 | * remove itself in case it dies before the node. If an observer is added |
1220 | * while observers are being notified, it may also be notified. In general, |
1221 | * adding observers while inside a notification is not a good idea. An |
1222 | * observer that is already observing the node must not be added without |
1223 | * being removed first. |
1224 | * |
1225 | * For mutation observers that implement nsIAnimationObserver, use |
1226 | * AddAnimationObserver instead. |
1227 | */ |
1228 | void AddMutationObserver(nsIMutationObserver* aMutationObserver) { |
1229 | nsSlots* s = Slots(); |
1230 | if (aMutationObserver) { |
1231 | NS_ASSERTION(!s->mMutationObservers.contains(aMutationObserver),do { if (!(!s->mMutationObservers.contains(aMutationObserver ))) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Observer already in the list" , "!s->mMutationObservers.contains(aMutationObserver)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1232); MOZ_PretendNoReturn(); } } while (0) |
1232 | "Observer already in the list")do { if (!(!s->mMutationObservers.contains(aMutationObserver ))) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Observer already in the list" , "!s->mMutationObservers.contains(aMutationObserver)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1232); MOZ_PretendNoReturn(); } } while (0); |
1233 | |
1234 | s->mMutationObservers.pushBack(aMutationObserver); |
1235 | } |
1236 | } |
1237 | |
1238 | void AddMutationObserver(nsMultiMutationObserver* aMultiMutationObserver); |
1239 | |
1240 | /** |
1241 | * Same as above, but only adds the observer if its not observing |
1242 | * the node already. |
1243 | * |
1244 | * For mutation observers that implement nsIAnimationObserver, use |
1245 | * AddAnimationObserverUnlessExists instead. |
1246 | */ |
1247 | void AddMutationObserverUnlessExists(nsIMutationObserver* aMutationObserver) { |
1248 | nsSlots* s = Slots(); |
1249 | if (aMutationObserver && |
1250 | !s->mMutationObservers.contains(aMutationObserver)) { |
1251 | s->mMutationObservers.pushBack(aMutationObserver); |
1252 | } |
1253 | } |
1254 | |
1255 | void AddMutationObserverUnlessExists( |
1256 | nsMultiMutationObserver* aMultiMutationObserver); |
1257 | /** |
1258 | * Same as AddMutationObserver, but for nsIAnimationObservers. This |
1259 | * additionally records on the document that animation observers have |
1260 | * been registered, which is used to determine whether notifications |
1261 | * must be fired when animations are added, removed or changed. |
1262 | */ |
1263 | void AddAnimationObserver(nsIAnimationObserver* aAnimationObserver); |
1264 | |
1265 | /** |
1266 | * Same as above, but only adds the observer if its not observing |
1267 | * the node already. |
1268 | */ |
1269 | void AddAnimationObserverUnlessExists( |
1270 | nsIAnimationObserver* aAnimationObserver); |
1271 | |
1272 | /** |
1273 | * Removes a mutation observer. |
1274 | */ |
1275 | void RemoveMutationObserver(nsIMutationObserver* aMutationObserver) { |
1276 | nsSlots* s = GetExistingSlots(); |
1277 | if (s) { |
1278 | s->mMutationObservers.remove(aMutationObserver); |
1279 | } |
1280 | } |
1281 | |
1282 | void RemoveMutationObserver(nsMultiMutationObserver* aMultiMutationObserver); |
1283 | |
1284 | mozilla::SafeDoublyLinkedList<nsIMutationObserver>* GetMutationObservers(); |
1285 | |
1286 | /** |
1287 | * Helper methods to access ancestor node(s) of type T. |
1288 | * The implementations of the methods are in mozilla/dom/AncestorIterator.h. |
1289 | */ |
1290 | template <typename T> |
1291 | inline mozilla::dom::AncestorsOfTypeIterator<T> AncestorsOfType() const; |
1292 | |
1293 | template <typename T> |
1294 | inline mozilla::dom::InclusiveAncestorsOfTypeIterator<T> |
1295 | InclusiveAncestorsOfType() const; |
1296 | |
1297 | template <typename T> |
1298 | inline mozilla::dom::FlatTreeAncestorsOfTypeIterator<T> |
1299 | FlatTreeAncestorsOfType() const; |
1300 | |
1301 | template <typename T> |
1302 | inline mozilla::dom::InclusiveFlatTreeAncestorsOfTypeIterator<T> |
1303 | InclusiveFlatTreeAncestorsOfType() const; |
1304 | |
1305 | template <typename T> |
1306 | T* FirstAncestorOfType() const; |
1307 | |
1308 | private: |
1309 | /** |
1310 | * Walks aNode, its attributes and, if aDeep is true, its descendant nodes. |
1311 | * If aClone is true the nodes will be cloned. If aNewNodeInfoManager is |
1312 | * not null, it is used to create new nodeinfos for the nodes. Also reparents |
1313 | * the XPConnect wrappers for the nodes into aReparentScope if non-null. |
1314 | * |
1315 | * @param aNode Node to adopt/clone. |
1316 | * @param aClone If true the node will be cloned and the cloned node will |
1317 | * be returned. |
1318 | * @param aDeep If true the function will be called recursively on |
1319 | * descendants of the node |
1320 | * @param aNewNodeInfoManager The nodeinfo manager to use to create new |
1321 | * nodeinfos for aNode and its attributes and |
1322 | * descendants. May be null if the nodeinfos |
1323 | * shouldn't be changed. |
1324 | * @param aReparentScope Scope into which wrappers should be reparented, or |
1325 | * null if no reparenting should be done. |
1326 | * @param aParent If aClone is true the cloned node will be appended to |
1327 | * aParent's children. May be null. If not null then aNode |
1328 | * must be an nsIContent. |
1329 | * @param aError The error, if any. |
1330 | * |
1331 | * @return If aClone is true then the cloned node will be returned, |
1332 | * unless an error occurred. In error conditions, null |
1333 | * will be returned. |
1334 | */ |
1335 | static already_AddRefed<nsINode> CloneAndAdopt( |
1336 | nsINode* aNode, bool aClone, bool aDeep, |
1337 | nsNodeInfoManager* aNewNodeInfoManager, |
1338 | JS::Handle<JSObject*> aReparentScope, nsINode* aParent, |
1339 | mozilla::ErrorResult& aError); |
1340 | |
1341 | public: |
1342 | /** |
1343 | * Walks the node, its attributes and descendant nodes. If aNewNodeInfoManager |
1344 | * is not null, it is used to create new nodeinfos for the nodes. Also |
1345 | * reparents the XPConnect wrappers for the nodes into aReparentScope if |
1346 | * non-null. |
1347 | * |
1348 | * @param aNewNodeInfoManager The nodeinfo manager to use to create new |
1349 | * nodeinfos for the node and its attributes and |
1350 | * descendants. May be null if the nodeinfos |
1351 | * shouldn't be changed. |
1352 | * @param aReparentScope New scope for the wrappers, or null if no reparenting |
1353 | * should be done. |
1354 | * @param aError The error, if any. |
1355 | */ |
1356 | void Adopt(nsNodeInfoManager* aNewNodeInfoManager, |
1357 | JS::Handle<JSObject*> aReparentScope, |
1358 | mozilla::ErrorResult& aError); |
1359 | |
1360 | /** |
1361 | * Clones the node, its attributes and, if aDeep is true, its descendant nodes |
1362 | * If aNewNodeInfoManager is not null, it is used to create new nodeinfos for |
1363 | * the clones. |
1364 | * |
1365 | * @param aDeep If true the function will be called recursively on |
1366 | * descendants of the node |
1367 | * @param aNewNodeInfoManager The nodeinfo manager to use to create new |
1368 | * nodeinfos for the node and its attributes and |
1369 | * descendants. May be null if the nodeinfos |
1370 | * shouldn't be changed. |
1371 | * @param aError The error, if any. |
1372 | * |
1373 | * @return The newly created node. Null in error conditions. |
1374 | */ |
1375 | already_AddRefed<nsINode> Clone(bool aDeep, |
1376 | nsNodeInfoManager* aNewNodeInfoManager, |
1377 | mozilla::ErrorResult& aError); |
1378 | |
1379 | /** |
1380 | * Clones this node. This needs to be overriden by all node classes. aNodeInfo |
1381 | * should be identical to this node's nodeInfo, except for the document which |
1382 | * may be different. When cloning an element, all attributes of the element |
1383 | * will be cloned. The children of the node will not be cloned. |
1384 | * |
1385 | * @param aNodeInfo the nodeinfo to use for the clone |
1386 | * @param aResult the clone |
1387 | */ |
1388 | virtual nsresult Clone(mozilla::dom::NodeInfo*, nsINode** aResult) const = 0; |
1389 | |
1390 | // A callback that gets called when we are forcefully unbound from a node (due |
1391 | // to the node going away). You shouldn't take a strong ref to the node from |
1392 | // the callback. |
1393 | using UnbindCallback = void (*)(nsISupports*, nsINode*); |
1394 | // We should keep alive these objects. |
1395 | struct BoundObject { |
1396 | nsCOMPtr<nsISupports> mObject; |
1397 | UnbindCallback mDtor = nullptr; |
1398 | |
1399 | BoundObject(nsISupports* aObject, UnbindCallback aDtor) |
1400 | : mObject(aObject), mDtor(aDtor) {} |
1401 | |
1402 | bool operator==(nsISupports* aOther) const { |
1403 | return mObject.get() == aOther; |
1404 | } |
1405 | }; |
1406 | |
1407 | // This class can be extended by subclasses that wish to store more |
1408 | // information in the slots. |
1409 | class nsSlots { |
1410 | public: |
1411 | nsSlots(); |
1412 | |
1413 | // If needed we could remove the vtable pointer this dtor causes by |
1414 | // putting a DestroySlots function on nsINode |
1415 | virtual ~nsSlots(); |
1416 | |
1417 | virtual void Traverse(nsCycleCollectionTraversalCallback&); |
1418 | virtual void Unlink(nsINode&); |
1419 | |
1420 | /** |
1421 | * A list of mutation observers |
1422 | */ |
1423 | mozilla::SafeDoublyLinkedList<nsIMutationObserver> mMutationObservers; |
1424 | |
1425 | /** |
1426 | * An object implementing NodeList for this content (childNodes) |
1427 | * @see NodeList |
1428 | * @see nsGenericHTMLElement::GetChildNodes |
1429 | */ |
1430 | RefPtr<nsAttrChildContentList> mChildNodes; |
1431 | |
1432 | /** |
1433 | * Weak reference to this node. This is cleared by the destructor of |
1434 | * nsNodeWeakReference. |
1435 | */ |
1436 | nsNodeWeakReference* MOZ_NON_OWNING_REF mWeakReference; |
1437 | |
1438 | /** A list of objects that we should keep alive. See Bind/UnbindObject. */ |
1439 | nsTArray<BoundObject> mBoundObjects; |
1440 | |
1441 | /** |
1442 | * A set of ranges which are in the selection and which have this node as |
1443 | * their endpoints' closest common inclusive ancestor |
1444 | * (https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor). This is |
1445 | * a UniquePtr instead of just a LinkedList, because that prevents us from |
1446 | * pushing DOMSlots up to the next allocation bucket size, at the cost of |
1447 | * some complexity. |
1448 | */ |
1449 | mozilla::UniquePtr<mozilla::LinkedList<mozilla::dom::AbstractRange>> |
1450 | mClosestCommonInclusiveAncestorRanges; |
1451 | }; |
1452 | |
1453 | /** |
1454 | * Functions for managing flags and slots |
1455 | */ |
1456 | #ifdef DEBUG1 |
1457 | nsSlots* DebugGetSlots() { return Slots(); } |
1458 | #endif |
1459 | |
1460 | void SetFlags(FlagsType aFlagsToSet) { |
1461 | NS_ASSERTION(do { if (!(!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Flag only permitted on nsIContent nodes" , "!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1467); MOZ_PretendNoReturn(); } } while (0) |
1462 | !(aFlagsToSet &do { if (!(!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Flag only permitted on nsIContent nodes" , "!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1467); MOZ_PretendNoReturn(); } } while (0) |
1463 | (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE |do { if (!(!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Flag only permitted on nsIContent nodes" , "!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1467); MOZ_PretendNoReturn(); } } while (0) |
1464 | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME |do { if (!(!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Flag only permitted on nsIContent nodes" , "!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1467); MOZ_PretendNoReturn(); } } while (0) |
1465 | NODE_HAS_BEEN_IN_UA_WIDGET)) ||do { if (!(!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Flag only permitted on nsIContent nodes" , "!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1467); MOZ_PretendNoReturn(); } } while (0) |
1466 | IsContent(),do { if (!(!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Flag only permitted on nsIContent nodes" , "!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1467); MOZ_PretendNoReturn(); } } while (0) |
1467 | "Flag only permitted on nsIContent nodes")do { if (!(!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Flag only permitted on nsIContent nodes" , "!(aFlagsToSet & (NODE_IS_NATIVE_ANONYMOUS_ROOT | NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE | NODE_DESCENDANTS_NEED_FRAMES | NODE_NEEDS_FRAME | NODE_HAS_BEEN_IN_UA_WIDGET)) || IsContent()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1467); MOZ_PretendNoReturn(); } } while (0); |
1468 | nsWrapperCache::SetFlags(aFlagsToSet); |
1469 | } |
1470 | |
1471 | void UnsetFlags(FlagsType aFlagsToUnset) { |
1472 | NS_ASSERTION(!(aFlagsToUnset & (NODE_HAS_BEEN_IN_UA_WIDGET |do { if (!(!(aFlagsToUnset & (NODE_HAS_BEEN_IN_UA_WIDGET | NODE_IS_NATIVE_ANONYMOUS_ROOT)))) { NS_DebugBreak(NS_DEBUG_ASSERTION , "Trying to unset write-only flags", "!(aFlagsToUnset & (NODE_HAS_BEEN_IN_UA_WIDGET | NODE_IS_NATIVE_ANONYMOUS_ROOT))" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1474); MOZ_PretendNoReturn(); } } while (0) |
1473 | NODE_IS_NATIVE_ANONYMOUS_ROOT)),do { if (!(!(aFlagsToUnset & (NODE_HAS_BEEN_IN_UA_WIDGET | NODE_IS_NATIVE_ANONYMOUS_ROOT)))) { NS_DebugBreak(NS_DEBUG_ASSERTION , "Trying to unset write-only flags", "!(aFlagsToUnset & (NODE_HAS_BEEN_IN_UA_WIDGET | NODE_IS_NATIVE_ANONYMOUS_ROOT))" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1474); MOZ_PretendNoReturn(); } } while (0) |
1474 | "Trying to unset write-only flags")do { if (!(!(aFlagsToUnset & (NODE_HAS_BEEN_IN_UA_WIDGET | NODE_IS_NATIVE_ANONYMOUS_ROOT)))) { NS_DebugBreak(NS_DEBUG_ASSERTION , "Trying to unset write-only flags", "!(aFlagsToUnset & (NODE_HAS_BEEN_IN_UA_WIDGET | NODE_IS_NATIVE_ANONYMOUS_ROOT))" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1474); MOZ_PretendNoReturn(); } } while (0); |
1475 | nsWrapperCache::UnsetFlags(aFlagsToUnset); |
1476 | } |
1477 | |
1478 | void SetEditableFlag(bool aEditable) { |
1479 | if (aEditable) { |
1480 | SetFlags(NODE_IS_EDITABLE); |
1481 | } else { |
1482 | UnsetFlags(NODE_IS_EDITABLE); |
1483 | } |
1484 | } |
1485 | |
1486 | inline bool IsEditable() const; |
1487 | |
1488 | /** |
1489 | * Check if this node is an editing host. For avoiding confusion, this always |
1490 | * returns false if the node is in the design mode document. |
1491 | */ |
1492 | inline bool IsEditingHost() const; |
1493 | |
1494 | /** |
1495 | * Check if this node is in design mode or not. When this returns true and: |
1496 | * - if this is a Document node, it's the design mode root. |
1497 | * - if this is a content node, it's connected, it's not in a shadow tree |
1498 | * (except shadow tree for UI widget and native anonymous subtree) and its |
1499 | * uncomposed document is in design mode. |
1500 | * Note that returning true does NOT mean the node or its children is |
1501 | * editable. E.g., when this node is in a shadow tree of a UA widget and its |
1502 | * host is in design mode. |
1503 | */ |
1504 | inline bool IsInDesignMode() const; |
1505 | |
1506 | /** |
1507 | * Returns true if |this| or any of its ancestors is native anonymous. |
1508 | */ |
1509 | bool IsInNativeAnonymousSubtree() const { |
1510 | return HasFlag(NODE_IS_IN_NATIVE_ANONYMOUS_SUBTREE); |
1511 | } |
1512 | |
1513 | /** |
1514 | * If |this| or any ancestor is native anonymous, return the root of the |
1515 | * native anonymous subtree. Note that in case of nested native anonymous |
1516 | * content, this returns the innermost root, not the outermost. |
1517 | */ |
1518 | nsIContent* GetClosestNativeAnonymousSubtreeRoot() const { |
1519 | if (!IsInNativeAnonymousSubtree()) { |
1520 | MOZ_ASSERT(!HasBeenInUAWidget(), "UA widget implies anonymous")do { static_assert( mozilla::detail::AssertionConditionType< decltype(!HasBeenInUAWidget())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!HasBeenInUAWidget()))), 0)) ) { do { } while (false); MOZ_ReportAssertionFailure("!HasBeenInUAWidget()" " (" "UA widget implies anonymous" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1520); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!HasBeenInUAWidget()" ") (" "UA widget implies anonymous" ")"); do { *((volatile int *)__null) = 1520; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); |
1521 | return nullptr; |
1522 | } |
1523 | MOZ_ASSERT(IsContent(), "How did non-content end up in NAC?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsContent())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsContent()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("IsContent()" " (" "How did non-content end up in NAC?" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1523); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsContent()" ") (" "How did non-content end up in NAC?" ")"); do { *((volatile int*)__null) = 1523; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); |
1524 | if (HasBeenInUAWidget()) { |
1525 | // reinterpret_cast because in this header we don't know ShadowRoot is an |
1526 | // nsIContent. ShadowRoot constructor asserts this is correct. |
1527 | return reinterpret_cast<nsIContent*>(GetContainingShadow()); |
1528 | } |
1529 | for (const nsINode* node = this; node; node = node->GetParentNode()) { |
1530 | if (node->IsRootOfNativeAnonymousSubtree()) { |
1531 | return const_cast<nsINode*>(node)->AsContent(); |
1532 | } |
1533 | } |
1534 | // FIXME(emilio): This should not happen, usually, but editor removes nodes |
1535 | // in native anonymous subtrees, and we don't clean nodes from the current |
1536 | // event content stack from ContentRemoved, so it can actually happen, see |
1537 | // bug 1510208. |
1538 | NS_WARNING("GetClosestNativeAnonymousSubtreeRoot on disconnected NAC!")NS_DebugBreak(NS_DEBUG_WARNING, "GetClosestNativeAnonymousSubtreeRoot on disconnected NAC!" , nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1538); |
1539 | return nullptr; |
1540 | } |
1541 | |
1542 | /** |
1543 | * If |this| or any ancestor is native anonymous, return the parent of the |
1544 | * native anonymous subtree. Note that in case of nested native anonymous |
1545 | * content, this returns the parent or host of the innermost root, not the |
1546 | * outermost. |
1547 | */ |
1548 | nsIContent* GetClosestNativeAnonymousSubtreeRootParentOrHost() const { |
1549 | // We could put this in nsIContentInlines.h or such to avoid this |
1550 | // reinterpret_cast, but it doesn't seem worth it. |
1551 | const auto* root = reinterpret_cast<const nsINode*>( |
1552 | GetClosestNativeAnonymousSubtreeRoot()); |
1553 | if (!root) { |
1554 | return nullptr; |
1555 | } |
1556 | if (nsIContent* parent = root->GetParent()) { |
1557 | return parent; |
1558 | } |
1559 | if (MOZ_UNLIKELY(root->IsInShadowTree())(__builtin_expect(!!(root->IsInShadowTree()), 0))) { |
1560 | return root->DoGetShadowHost(); |
1561 | } |
1562 | return nullptr; |
1563 | } |
1564 | |
1565 | /** |
1566 | * Gets the root of the node tree for this content if it is in a shadow tree. |
1567 | */ |
1568 | mozilla::dom::ShadowRoot* GetContainingShadow() const; |
1569 | /** |
1570 | * Gets the shadow host if this content is in a shadow tree. That is, the host |
1571 | * of |GetContainingShadow|, if its not null. |
1572 | * |
1573 | * @return The shadow host, if this is in shadow tree, or null. |
1574 | */ |
1575 | mozilla::dom::Element* GetContainingShadowHost() const; |
1576 | |
1577 | bool IsInSVGUseShadowTree() const { |
1578 | return !!GetContainingSVGUseShadowHost(); |
1579 | } |
1580 | |
1581 | mozilla::dom::SVGUseElement* GetContainingSVGUseShadowHost() const { |
1582 | if (!IsInShadowTree()) { |
1583 | return nullptr; |
1584 | } |
1585 | return DoGetContainingSVGUseShadowHost(); |
1586 | } |
1587 | |
1588 | // Whether this node has ever been part of a UA widget shadow tree. |
1589 | bool HasBeenInUAWidget() const { return HasFlag(NODE_HAS_BEEN_IN_UA_WIDGET); } |
1590 | |
1591 | // True for native anonymous content and for content in UA widgets. |
1592 | // Only nsIContent can fulfill this condition. |
1593 | bool ChromeOnlyAccess() const { return IsInNativeAnonymousSubtree(); } |
1594 | |
1595 | const nsIContent* GetChromeOnlyAccessSubtreeRootParent() const { |
1596 | return GetClosestNativeAnonymousSubtreeRootParentOrHost(); |
1597 | } |
1598 | |
1599 | bool IsInShadowTree() const { return HasFlag(NODE_IS_IN_SHADOW_TREE); } |
1600 | |
1601 | /** |
1602 | * Get whether this node is C++-generated anonymous content |
1603 | * @see nsIAnonymousContentCreator |
1604 | * @return whether this content is anonymous |
1605 | */ |
1606 | bool IsRootOfNativeAnonymousSubtree() const { |
1607 | NS_ASSERTION(do { if (!(!HasFlag(NODE_IS_NATIVE_ANONYMOUS_ROOT) || IsInNativeAnonymousSubtree ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Some flags seem to be missing!" , "!HasFlag(NODE_IS_NATIVE_ANONYMOUS_ROOT) || IsInNativeAnonymousSubtree()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1609); MOZ_PretendNoReturn(); } } while (0) |
1608 | !HasFlag(NODE_IS_NATIVE_ANONYMOUS_ROOT) || IsInNativeAnonymousSubtree(),do { if (!(!HasFlag(NODE_IS_NATIVE_ANONYMOUS_ROOT) || IsInNativeAnonymousSubtree ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Some flags seem to be missing!" , "!HasFlag(NODE_IS_NATIVE_ANONYMOUS_ROOT) || IsInNativeAnonymousSubtree()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1609); MOZ_PretendNoReturn(); } } while (0) |
1609 | "Some flags seem to be missing!")do { if (!(!HasFlag(NODE_IS_NATIVE_ANONYMOUS_ROOT) || IsInNativeAnonymousSubtree ())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Some flags seem to be missing!" , "!HasFlag(NODE_IS_NATIVE_ANONYMOUS_ROOT) || IsInNativeAnonymousSubtree()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1609); MOZ_PretendNoReturn(); } } while (0); |
1610 | return HasFlag(NODE_IS_NATIVE_ANONYMOUS_ROOT); |
1611 | } |
1612 | |
1613 | // Whether this node is the root of a ChromeOnlyAccess DOM subtree. |
1614 | bool IsRootOfChromeAccessOnlySubtree() const { |
1615 | return IsRootOfNativeAnonymousSubtree(); |
1616 | } |
1617 | |
1618 | /** Whether this is the container of a ::before pseudo-element. */ |
1619 | bool IsGeneratedContentContainerForBefore() const { |
1620 | return IsRootOfNativeAnonymousSubtree() && |
1621 | mNodeInfo->NameAtom() == nsGkAtoms::mozgeneratedcontentbefore; |
1622 | } |
1623 | |
1624 | /** Whether this is the container of an ::after pseudo-element. */ |
1625 | bool IsGeneratedContentContainerForAfter() const { |
1626 | return IsRootOfNativeAnonymousSubtree() && |
1627 | mNodeInfo->NameAtom() == nsGkAtoms::mozgeneratedcontentafter; |
1628 | } |
1629 | |
1630 | /** Whether this is the container of a ::marker pseudo-element. */ |
1631 | bool IsGeneratedContentContainerForMarker() const { |
1632 | return IsRootOfNativeAnonymousSubtree() && |
1633 | mNodeInfo->NameAtom() == nsGkAtoms::mozgeneratedcontentmarker; |
1634 | } |
1635 | |
1636 | /** |
1637 | * Returns true if |this| node is the closest common inclusive ancestor |
1638 | * (https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor) of the |
1639 | * start/end nodes of a Range in a Selection or a descendant of such a common |
1640 | * ancestor. This node is definitely not selected when |false| is returned, |
1641 | * but it may or may not be selected when |true| is returned. |
1642 | */ |
1643 | bool IsMaybeSelected() const { |
1644 | return IsDescendantOfClosestCommonInclusiveAncestorForRangeInSelection() || |
1645 | IsClosestCommonInclusiveAncestorForRangeInSelection(); |
1646 | } |
1647 | |
1648 | /** |
1649 | * Return true if any part of (this, aStartOffset) .. (this, aEndOffset) |
1650 | * overlaps any nsRange in |
1651 | * GetClosestCommonInclusiveAncestorForRangeInSelection ranges (i.e. |
1652 | * where this is a descendant of a range's common inclusive ancestor node). |
1653 | * If a nsRange starts in (this, aEndOffset) or if it ends in |
1654 | * (this, aStartOffset) then it is non-overlapping and the result is false |
1655 | * for that nsRange. Collapsed ranges always counts as non-overlapping. |
1656 | * |
1657 | * @param aStartOffset has to be less or equal to aEndOffset. |
1658 | * @param aCache A cache which contains all fully selected nodes for each |
1659 | * selection. If present, this provides a fast path to check if |
1660 | * a node is fully selected. |
1661 | */ |
1662 | bool IsSelected(uint32_t aStartOffset, uint32_t aEndOffset, |
1663 | mozilla::dom::SelectionNodeCache* aCache = nullptr) const; |
1664 | |
1665 | /** |
1666 | * Get the root element of the text editor associated with this node or the |
1667 | * root element of the text editor of the ancestor 'TextControlElement' if |
1668 | * this is in its native anonymous subtree. I.e., this returns anonymous |
1669 | * `<div>` element of a `TextEditor`. Note that this can be used only for |
1670 | * getting root content of `<input>` or `<textarea>`. I.e., this method |
1671 | * doesn't support HTML editors. Note that this may create a `TextEditor` |
1672 | * instance, and it means that the `TextEditor` may modify its native |
1673 | * anonymous subtree and may run selection listeners. |
1674 | */ |
1675 | MOZ_CAN_RUN_SCRIPT mozilla::dom::Element* GetAnonymousRootElementOfTextEditor( |
1676 | mozilla::TextEditor** aTextEditor = nullptr); |
1677 | |
1678 | /** |
1679 | * Get the nearest selection root, ie. the node that will be selected if the |
1680 | * user does "Select All" while the focus is in this node. Note that if this |
1681 | * node is not in an editor, the result comes from the nsFrameSelection that |
1682 | * is related to aPresShell, so the result might not be the ancestor of this |
1683 | * node. Be aware that if this node and the computed selection limiter are |
1684 | * not in same subtree, this returns the root content of the closeset subtree. |
1685 | */ |
1686 | MOZ_CAN_RUN_SCRIPT nsIContent* GetSelectionRootContent( |
1687 | mozilla::PresShell* aPresShell, bool aAllowCrossShadowBoundary = false); |
1688 | |
1689 | bool HasScheduledSelectionChangeEvent() { |
1690 | return HasFlag(NODE_HAS_SCHEDULED_SELECTION_CHANGE_EVENT); |
1691 | } |
1692 | |
1693 | void SetHasScheduledSelectionChangeEvent() { |
1694 | SetFlags(NODE_HAS_SCHEDULED_SELECTION_CHANGE_EVENT); |
1695 | } |
1696 | |
1697 | void ClearHasScheduledSelectionChangeEvent() { |
1698 | UnsetFlags(NODE_HAS_SCHEDULED_SELECTION_CHANGE_EVENT); |
1699 | } |
1700 | |
1701 | nsINodeList* ChildNodes(); |
1702 | |
1703 | nsIContent* GetFirstChild() const { return mFirstChild; } |
1704 | |
1705 | nsIContent* GetLastChild() const; |
1706 | |
1707 | /** |
1708 | * Implementation is in Document.h, because it needs to cast from |
1709 | * Document* to nsINode*. |
1710 | */ |
1711 | Document* GetOwnerDocument() const; |
1712 | |
1713 | // TODO: Convert this to MOZ_CAN_RUN_SCRIPT (bug 1415230) |
1714 | MOZ_CAN_RUN_SCRIPT_BOUNDARY void Normalize(); |
1715 | |
1716 | /** |
1717 | * Get the base URI for any relative URIs within this piece of |
1718 | * content. Generally, this is the document's base URI, but certain |
1719 | * content carries a local base for backward compatibility. |
1720 | * |
1721 | * @return the base URI. May return null. |
1722 | */ |
1723 | virtual nsIURI* GetBaseURI(bool aTryUseXHRDocBaseURI = false) const = 0; |
1724 | nsIURI* GetBaseURIObject() const; |
1725 | |
1726 | /** |
1727 | * Return true if the node may be apz aware. There are two cases. One is that |
1728 | * the node is apz aware (such as HTMLInputElement with number type). The |
1729 | * other is that the node has apz aware listeners. This is a non-virtual |
1730 | * function which calls IsNodeApzAwareInternal only when the MayBeApzAware is |
1731 | * set. We check the details in IsNodeApzAwareInternal which may be overriden |
1732 | * by child classes |
1733 | */ |
1734 | bool IsNodeApzAware() const { |
1735 | return NodeMayBeApzAware() ? IsNodeApzAwareInternal() : false; |
1736 | } |
1737 | |
1738 | /** |
1739 | * Override this function and set the flag MayBeApzAware in case the node has |
1740 | * to let APZC be aware of it. It's used when the node may handle the apz |
1741 | * aware events and may do preventDefault to stop APZC to do default actions. |
1742 | * |
1743 | * For example, instead of scrolling page by APZ, we handle mouse wheel event |
1744 | * in HTMLInputElement with number type as increasing / decreasing its value. |
1745 | */ |
1746 | virtual bool IsNodeApzAwareInternal() const; |
1747 | |
1748 | void GetTextContent(nsAString& aTextContent, mozilla::OOMReporter& aError) { |
1749 | GetTextContentInternal(aTextContent, aError); |
1750 | } |
1751 | void SetTextContent(const nsAString& aTextContent, |
1752 | nsIPrincipal* aSubjectPrincipal, |
1753 | mozilla::ErrorResult& aError) { |
1754 | SetTextContentInternal(aTextContent, aSubjectPrincipal, aError); |
1755 | } |
1756 | void SetTextContent(const nsAString& aTextContent, |
1757 | mozilla::ErrorResult& aError) { |
1758 | SetTextContentInternal(aTextContent, nullptr, aError); |
1759 | } |
1760 | |
1761 | mozilla::dom::Element* QuerySelector(const nsACString& aSelector, |
1762 | mozilla::ErrorResult& aResult); |
1763 | already_AddRefed<nsINodeList> QuerySelectorAll(const nsACString& aSelector, |
1764 | mozilla::ErrorResult& aResult); |
1765 | |
1766 | protected: |
1767 | // Document and ShadowRoot override this with its own (faster) version. |
1768 | // This should really only be called for elements and document fragments. |
1769 | mozilla::dom::Element* GetElementById(const nsAString& aId); |
1770 | |
1771 | void AppendChildToChildList(nsIContent* aKid); |
1772 | void InsertChildToChildList(nsIContent* aKid, nsIContent* aNextSibling); |
1773 | void DisconnectChild(nsIContent* aKid); |
1774 | |
1775 | public: |
1776 | void LookupPrefix(const nsAString& aNamespace, nsAString& aResult); |
1777 | bool IsDefaultNamespace(const nsAString& aNamespaceURI) { |
1778 | nsAutoString defaultNamespace; |
1779 | LookupNamespaceURI(u""_ns, defaultNamespace); |
1780 | return aNamespaceURI.Equals(defaultNamespace); |
1781 | } |
1782 | void LookupNamespaceURI(const nsAString& aNamespacePrefix, |
1783 | nsAString& aNamespaceURI); |
1784 | |
1785 | nsIContent* GetNextSibling() const { return mNextSibling; } |
1786 | nsIContent* GetPreviousSibling() const; |
1787 | |
1788 | /** |
1789 | * Return true if the node is being removed from the parent, it means that |
1790 | * the node still knows the container which it's disconnected from, but the |
1791 | * node has already been removed from the child node chain of the container. |
1792 | * I.e., Return true between a call of DisconnectChild of the parent and |
1793 | * a call of UnbindFromTree of the node. |
1794 | */ |
1795 | bool IsBeingRemoved() const { |
1796 | return mParent && !mNextSibling && !mPreviousOrLastSibling; |
1797 | } |
1798 | |
1799 | /** |
1800 | * Get the next node in the pre-order tree traversal of the DOM. If |
1801 | * aRoot is non-null, then it must be an ancestor of |this| |
1802 | * (possibly equal to |this|) and only nodes that are descendants of |
1803 | * aRoot, not including aRoot itself, will be returned. Returns |
1804 | * null if there are no more nodes to traverse. |
1805 | */ |
1806 | nsIContent* GetNextNode(const nsINode* aRoot = nullptr) const { |
1807 | return GetNextNodeImpl(aRoot, false); |
1808 | } |
1809 | |
1810 | /** |
1811 | * Get the next node in the pre-order tree traversal of the DOM but ignoring |
1812 | * the children of this node. If aRoot is non-null, then it must be an |
1813 | * ancestor of |this| (possibly equal to |this|) and only nodes that are |
1814 | * descendants of aRoot, not including aRoot itself, will be returned. |
1815 | * Returns null if there are no more nodes to traverse. |
1816 | */ |
1817 | nsIContent* GetNextNonChildNode(const nsINode* aRoot = nullptr) const { |
1818 | return GetNextNodeImpl(aRoot, true); |
1819 | } |
1820 | |
1821 | /** |
1822 | * Returns true if 'this' is either document or element or |
1823 | * document fragment and aOther is a descendant in the same |
1824 | * anonymous tree. |
1825 | */ |
1826 | bool Contains(const nsINode* aOther) const; |
1827 | |
1828 | bool UnoptimizableCCNode() const; |
1829 | |
1830 | /** |
1831 | * Fire a DOMNodeRemoved mutation event for all children of this node |
1832 | * TODO: Convert this to MOZ_CAN_RUN_SCRIPT (bug 1415230) |
1833 | */ |
1834 | MOZ_CAN_RUN_SCRIPT_BOUNDARY void FireNodeRemovedForChildren(); |
1835 | |
1836 | void QueueDevtoolsAnonymousEvent(bool aIsRemove); |
1837 | |
1838 | private: |
1839 | mozilla::dom::SVGUseElement* DoGetContainingSVGUseShadowHost() const; |
1840 | |
1841 | nsIContent* GetNextNodeImpl(const nsINode* aRoot, |
1842 | const bool aSkipChildren) const { |
1843 | #ifdef DEBUG1 |
1844 | if (aRoot) { |
1845 | // TODO: perhaps nsINode::IsInclusiveDescendantOf could be used instead. |
1846 | const nsINode* cur = this; |
1847 | for (; cur; cur = cur->GetParentNode()) |
1848 | if (cur == aRoot) break; |
1849 | NS_ASSERTION(cur, "aRoot not an ancestor of |this|?")do { if (!(cur)) { NS_DebugBreak(NS_DEBUG_ASSERTION, "aRoot not an ancestor of |this|?" , "cur", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1849); MOZ_PretendNoReturn(); } } while (0); |
1850 | } |
1851 | #endif |
1852 | if (!aSkipChildren) { |
1853 | nsIContent* kid = GetFirstChild(); |
1854 | if (kid) { |
1855 | return kid; |
1856 | } |
1857 | } |
1858 | if (this == aRoot) { |
1859 | return nullptr; |
1860 | } |
1861 | const nsINode* cur = this; |
1862 | while (1) { |
1863 | nsIContent* next = cur->GetNextSibling(); |
1864 | if (next) { |
1865 | return next; |
1866 | } |
1867 | nsINode* parent = cur->GetParentNode(); |
1868 | if (parent == aRoot) { |
1869 | return nullptr; |
1870 | } |
1871 | cur = parent; |
1872 | } |
1873 | MOZ_ASSERT_UNREACHABLE("How did we get here?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(false)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("false" " (" "MOZ_ASSERT_UNREACHABLE: " "How did we get here?" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1873); AnnotateMozCrashReason("MOZ_ASSERT" "(" "false" ") (" "MOZ_ASSERT_UNREACHABLE: " "How did we get here?" ")"); do { *((volatile int*)__null) = 1873; __attribute__((nomerge)) :: abort(); } while (false); } } while (false); |
1874 | } |
1875 | |
1876 | public: |
1877 | /** |
1878 | * Get the previous nsIContent in the pre-order tree traversal of the DOM. If |
1879 | * aRoot is non-null, then it must be an ancestor of |this| |
1880 | * (possibly equal to |this|) and only nsIContents that are descendants of |
1881 | * aRoot, including aRoot itself, will be returned. Returns |
1882 | * null if there are no more nsIContents to traverse. |
1883 | */ |
1884 | nsIContent* GetPrevNode(const nsINode* aRoot = nullptr) const { |
1885 | #ifdef DEBUG1 |
1886 | if (aRoot) { |
1887 | // TODO: perhaps nsINode::IsInclusiveDescendantOf could be used instead. |
1888 | const nsINode* cur = this; |
1889 | for (; cur; cur = cur->GetParentNode()) |
1890 | if (cur == aRoot) break; |
1891 | NS_ASSERTION(cur, "aRoot not an ancestor of |this|?")do { if (!(cur)) { NS_DebugBreak(NS_DEBUG_ASSERTION, "aRoot not an ancestor of |this|?" , "cur", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 1891); MOZ_PretendNoReturn(); } } while (0); |
1892 | } |
1893 | #endif |
1894 | |
1895 | if (this == aRoot) { |
1896 | return nullptr; |
1897 | } |
1898 | nsIContent* cur = this->GetParent(); |
1899 | nsIContent* iter = this->GetPreviousSibling(); |
1900 | while (iter) { |
1901 | cur = iter; |
1902 | iter = reinterpret_cast<nsINode*>(iter)->GetLastChild(); |
1903 | } |
1904 | return cur; |
1905 | } |
1906 | |
1907 | /** |
1908 | * Boolean flags |
1909 | */ |
1910 | private: |
1911 | enum BooleanFlag { |
1912 | // Set if we're being used from -moz-element or observed via a mask, |
1913 | // clipPath, filter or use element. |
1914 | NodeHasDirectRenderingObservers, |
1915 | // Set if our parent chain (including this node itself) terminates |
1916 | // in a document |
1917 | IsInDocument, |
1918 | // Set if we're part of the composed doc. |
1919 | // https://dom.spec.whatwg.org/#connected |
1920 | IsConnected, |
1921 | // Set if mParent is an nsIContent |
1922 | ParentIsContent, |
1923 | // Set if this node is an Element |
1924 | NodeIsElement, |
1925 | // Set if the element has a non-empty id attribute. This can in rare |
1926 | // cases lie for nsXMLElement, such as when the node has been moved between |
1927 | // documents with different id mappings. |
1928 | ElementHasID, |
1929 | // Set if the element might have a class. |
1930 | ElementMayHaveClass, |
1931 | // Set if the element might have inline style. |
1932 | ElementMayHaveStyle, |
1933 | // Set if the element has a name attribute set. |
1934 | ElementHasName, |
1935 | // Set if the element has a part attribute set. |
1936 | ElementHasPart, |
1937 | // Set if the element might have a contenteditable attribute set. |
1938 | ElementMayHaveContentEditableAttr, |
1939 | // Set if the node is the closest common inclusive ancestor of the start/end |
1940 | // nodes of a Range that is in a Selection. |
1941 | NodeIsClosestCommonInclusiveAncestorForRangeInSelection, |
1942 | // Set if the node is a descendant of a node with the above bit set. |
1943 | NodeIsDescendantOfClosestCommonInclusiveAncestorForRangeInSelection, |
1944 | // Set if CanSkipInCC check has been done for this subtree root. |
1945 | NodeIsCCMarkedRoot, |
1946 | // Maybe set if this node is in black subtree. |
1947 | NodeIsCCBlackTree, |
1948 | // Maybe set if the node is a root of a subtree |
1949 | // which needs to be kept in the purple buffer. |
1950 | NodeIsPurpleRoot, |
1951 | // Set if the element has some style states locked |
1952 | ElementHasLockedStyleStates, |
1953 | // Set if element has pointer locked |
1954 | ElementHasPointerLock, |
1955 | // Set if the node may have DOMMutationObserver attached to it. |
1956 | NodeMayHaveDOMMutationObserver, |
1957 | // Set if node is Content |
1958 | NodeIsContent, |
1959 | // Set if the node has animations or transitions |
1960 | ElementHasAnimations, |
1961 | // Set if node has a dir attribute with a valid value (ltr, rtl, or auto). |
1962 | // Note that we cannot compute this from the dir attribute event state |
1963 | // flags, because we can't use those to distinguish |
1964 | // <bdi dir="some-invalid-value"> and <bdi dir="auto">. |
1965 | NodeHasValidDirAttribute, |
1966 | // Set if a node in the node's parent chain has dir=auto and nothing |
1967 | // inbetween nor the node itself establishes its own direction. |
1968 | NodeAncestorHasDirAuto, |
1969 | // Set if the node or an ancestor is assigned to a dir=auto slot and |
1970 | // nothing between nor the node itself establishes its own direction. |
1971 | // Except for when the node assigned to the dir=auto slot establishes |
1972 | // its own direction, then the flag is still set. |
1973 | NodeAffectsDirAutoSlot, |
1974 | // Set if the node is handling a click. |
1975 | NodeHandlingClick, |
1976 | // Set if the element has a parser insertion mode other than "in body", |
1977 | // per the HTML5 "Parse state" section. |
1978 | ElementHasWeirdParserInsertionMode, |
1979 | // Parser sets this flag if it has notified about the node. |
1980 | ParserHasNotified, |
1981 | // Sets if the node is apz aware or we have apz aware listeners. |
1982 | MayBeApzAware, |
1983 | // Set if the element might have any kind of anonymous content children, |
1984 | // which would not be found through the element's children list. |
1985 | ElementMayHaveAnonymousChildren, |
1986 | // Set if element has CustomElementData. |
1987 | ElementHasCustomElementData, |
1988 | // Set if the element was created from prototype cache and |
1989 | // its l10n attributes haven't been changed. |
1990 | ElementCreatedFromPrototypeAndHasUnmodifiedL10n, |
1991 | // Guard value |
1992 | BooleanFlagCount |
1993 | }; |
1994 | |
1995 | void SetBoolFlag(BooleanFlag name, bool value) { |
1996 | static_assert(BooleanFlagCount <= 8 * sizeof(mBoolFlags), |
1997 | "Too many boolean flags"); |
1998 | mBoolFlags = (mBoolFlags & ~(1 << name)) | (value << name); |
1999 | } |
2000 | |
2001 | void SetBoolFlag(BooleanFlag name) { |
2002 | static_assert(BooleanFlagCount <= 8 * sizeof(mBoolFlags), |
2003 | "Too many boolean flags"); |
2004 | mBoolFlags |= (1 << name); |
2005 | } |
2006 | |
2007 | void ClearBoolFlag(BooleanFlag name) { |
2008 | static_assert(BooleanFlagCount <= 8 * sizeof(mBoolFlags), |
2009 | "Too many boolean flags"); |
2010 | mBoolFlags &= ~(1 << name); |
2011 | } |
2012 | |
2013 | bool GetBoolFlag(BooleanFlag name) const { |
2014 | static_assert(BooleanFlagCount <= 8 * sizeof(mBoolFlags), |
2015 | "Too many boolean flags"); |
2016 | return mBoolFlags & (1 << name); |
2017 | } |
2018 | |
2019 | public: |
2020 | bool HasDirectRenderingObservers() const { |
2021 | return GetBoolFlag(NodeHasDirectRenderingObservers); |
2022 | } |
2023 | void SetHasDirectRenderingObservers(bool aValue) { |
2024 | SetBoolFlag(NodeHasDirectRenderingObservers, aValue); |
2025 | } |
2026 | bool IsContent() const { return GetBoolFlag(NodeIsContent); } |
2027 | bool HasID() const { return GetBoolFlag(ElementHasID); } |
2028 | bool MayHaveClass() const { return GetBoolFlag(ElementMayHaveClass); } |
2029 | void SetMayHaveClass() { SetBoolFlag(ElementMayHaveClass); } |
2030 | bool MayHaveStyle() const { return GetBoolFlag(ElementMayHaveStyle); } |
2031 | bool HasName() const { return GetBoolFlag(ElementHasName); } |
2032 | bool HasPartAttribute() const { return GetBoolFlag(ElementHasPart); } |
2033 | bool MayHaveContentEditableAttr() const { |
2034 | return GetBoolFlag(ElementMayHaveContentEditableAttr); |
2035 | } |
2036 | /** |
2037 | * https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor |
2038 | */ |
2039 | bool IsClosestCommonInclusiveAncestorForRangeInSelection() const { |
2040 | return GetBoolFlag(NodeIsClosestCommonInclusiveAncestorForRangeInSelection); |
2041 | } |
2042 | /** |
2043 | * https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor |
2044 | */ |
2045 | void SetClosestCommonInclusiveAncestorForRangeInSelection() { |
2046 | SetBoolFlag(NodeIsClosestCommonInclusiveAncestorForRangeInSelection); |
2047 | } |
2048 | /** |
2049 | * https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor |
2050 | */ |
2051 | void ClearClosestCommonInclusiveAncestorForRangeInSelection() { |
2052 | ClearBoolFlag(NodeIsClosestCommonInclusiveAncestorForRangeInSelection); |
2053 | } |
2054 | /** |
2055 | * https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor |
2056 | */ |
2057 | bool IsDescendantOfClosestCommonInclusiveAncestorForRangeInSelection() const { |
2058 | return GetBoolFlag( |
2059 | NodeIsDescendantOfClosestCommonInclusiveAncestorForRangeInSelection); |
2060 | } |
2061 | /** |
2062 | * https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor |
2063 | */ |
2064 | void SetDescendantOfClosestCommonInclusiveAncestorForRangeInSelection() { |
2065 | SetBoolFlag( |
2066 | NodeIsDescendantOfClosestCommonInclusiveAncestorForRangeInSelection); |
2067 | } |
2068 | /** |
2069 | * https://dom.spec.whatwg.org/#concept-tree-inclusive-ancestor |
2070 | */ |
2071 | void ClearDescendantOfClosestCommonInclusiveAncestorForRangeInSelection() { |
2072 | ClearBoolFlag( |
2073 | NodeIsDescendantOfClosestCommonInclusiveAncestorForRangeInSelection); |
2074 | } |
2075 | |
2076 | void SetCCMarkedRoot(bool aValue) { SetBoolFlag(NodeIsCCMarkedRoot, aValue); } |
2077 | bool CCMarkedRoot() const { return GetBoolFlag(NodeIsCCMarkedRoot); } |
2078 | void SetInCCBlackTree(bool aValue) { SetBoolFlag(NodeIsCCBlackTree, aValue); } |
2079 | bool InCCBlackTree() const { return GetBoolFlag(NodeIsCCBlackTree); } |
2080 | void SetIsPurpleRoot(bool aValue) { SetBoolFlag(NodeIsPurpleRoot, aValue); } |
2081 | bool IsPurpleRoot() const { return GetBoolFlag(NodeIsPurpleRoot); } |
2082 | bool MayHaveDOMMutationObserver() { |
2083 | return GetBoolFlag(NodeMayHaveDOMMutationObserver); |
2084 | } |
2085 | void SetMayHaveDOMMutationObserver() { |
2086 | SetBoolFlag(NodeMayHaveDOMMutationObserver, true); |
2087 | } |
2088 | bool HasListenerManager() { return HasFlag(NODE_HAS_LISTENERMANAGER); } |
2089 | bool HasPointerLock() const { return GetBoolFlag(ElementHasPointerLock); } |
2090 | void SetPointerLock() { SetBoolFlag(ElementHasPointerLock); } |
2091 | void ClearPointerLock() { ClearBoolFlag(ElementHasPointerLock); } |
2092 | bool MayHaveAnimations() const { return GetBoolFlag(ElementHasAnimations); } |
2093 | void SetMayHaveAnimations() { SetBoolFlag(ElementHasAnimations); } |
2094 | void ClearMayHaveAnimations() { ClearBoolFlag(ElementHasAnimations); } |
2095 | void SetHasValidDir() { SetBoolFlag(NodeHasValidDirAttribute); } |
2096 | void ClearHasValidDir() { ClearBoolFlag(NodeHasValidDirAttribute); } |
2097 | bool HasValidDir() const { return GetBoolFlag(NodeHasValidDirAttribute); } |
2098 | void SetAncestorHasDirAuto() { SetBoolFlag(NodeAncestorHasDirAuto); } |
2099 | void ClearAncestorHasDirAuto() { ClearBoolFlag(NodeAncestorHasDirAuto); } |
2100 | bool AncestorHasDirAuto() const { |
2101 | return GetBoolFlag(NodeAncestorHasDirAuto); |
2102 | } |
2103 | void SetAffectsDirAutoSlot() { SetBoolFlag(NodeAffectsDirAutoSlot); } |
2104 | void ClearAffectsDirAutoSlot() { ClearBoolFlag(NodeAffectsDirAutoSlot); } |
2105 | |
2106 | // Set if the node or an ancestor is assigned to a dir=auto slot. |
2107 | bool AffectsDirAutoSlot() const { |
2108 | return GetBoolFlag(NodeAffectsDirAutoSlot); |
2109 | } |
2110 | |
2111 | // Implemented in nsIContentInlines.h. |
2112 | inline bool NodeOrAncestorHasDirAuto() const; |
2113 | |
2114 | void SetParserHasNotified() { SetBoolFlag(ParserHasNotified); }; |
2115 | bool HasParserNotified() { return GetBoolFlag(ParserHasNotified); } |
2116 | |
2117 | void SetMayBeApzAware() { SetBoolFlag(MayBeApzAware); } |
2118 | bool NodeMayBeApzAware() const { return GetBoolFlag(MayBeApzAware); } |
2119 | |
2120 | void SetMayHaveAnonymousChildren() { |
2121 | SetBoolFlag(ElementMayHaveAnonymousChildren); |
2122 | } |
2123 | bool MayHaveAnonymousChildren() const { |
2124 | return GetBoolFlag(ElementMayHaveAnonymousChildren); |
2125 | } |
2126 | |
2127 | void SetHasCustomElementData() { SetBoolFlag(ElementHasCustomElementData); } |
2128 | bool HasCustomElementData() const { |
2129 | return GetBoolFlag(ElementHasCustomElementData); |
2130 | } |
2131 | |
2132 | void SetElementCreatedFromPrototypeAndHasUnmodifiedL10n() { |
2133 | SetBoolFlag(ElementCreatedFromPrototypeAndHasUnmodifiedL10n); |
2134 | } |
2135 | bool HasElementCreatedFromPrototypeAndHasUnmodifiedL10n() { |
2136 | return GetBoolFlag(ElementCreatedFromPrototypeAndHasUnmodifiedL10n); |
2137 | } |
2138 | void ClearElementCreatedFromPrototypeAndHasUnmodifiedL10n() { |
2139 | ClearBoolFlag(ElementCreatedFromPrototypeAndHasUnmodifiedL10n); |
2140 | } |
2141 | |
2142 | mozilla::dom::ShadowRoot* GetShadowRoot() const; |
2143 | |
2144 | // Return the shadow root of the node if it is a shadow host and |
2145 | // it meets the requirements for being a shadow host of a selection. |
2146 | // For example, <details>, <video> and <use> elements are not valid |
2147 | // shadow host for selection. |
2148 | mozilla::dom::ShadowRoot* GetShadowRootForSelection() const; |
2149 | |
2150 | protected: |
2151 | void SetParentIsContent(bool aValue) { SetBoolFlag(ParentIsContent, aValue); } |
2152 | void SetIsInDocument() { SetBoolFlag(IsInDocument); } |
2153 | void ClearInDocument() { ClearBoolFlag(IsInDocument); } |
2154 | void SetIsConnected(bool aConnected) { SetBoolFlag(IsConnected, aConnected); } |
2155 | void SetNodeIsContent() { SetBoolFlag(NodeIsContent); } |
2156 | void SetIsElement() { SetBoolFlag(NodeIsElement); } |
2157 | void SetHasID() { SetBoolFlag(ElementHasID); } |
2158 | void ClearHasID() { ClearBoolFlag(ElementHasID); } |
2159 | void SetMayHaveStyle() { SetBoolFlag(ElementMayHaveStyle); } |
2160 | void SetHasName() { SetBoolFlag(ElementHasName); } |
2161 | void ClearHasName() { ClearBoolFlag(ElementHasName); } |
2162 | void SetHasPartAttribute(bool aPart) { SetBoolFlag(ElementHasPart, aPart); } |
2163 | void SetMayHaveContentEditableAttr() { |
2164 | SetBoolFlag(ElementMayHaveContentEditableAttr); |
2165 | } |
2166 | void SetHasLockedStyleStates() { SetBoolFlag(ElementHasLockedStyleStates); } |
2167 | void ClearHasLockedStyleStates() { |
2168 | ClearBoolFlag(ElementHasLockedStyleStates); |
2169 | } |
2170 | bool HasLockedStyleStates() const { |
2171 | return GetBoolFlag(ElementHasLockedStyleStates); |
2172 | } |
2173 | void SetHasWeirdParserInsertionMode() { |
2174 | SetBoolFlag(ElementHasWeirdParserInsertionMode); |
2175 | } |
2176 | bool HasWeirdParserInsertionMode() const { |
2177 | return GetBoolFlag(ElementHasWeirdParserInsertionMode); |
2178 | } |
2179 | bool HandlingClick() const { return GetBoolFlag(NodeHandlingClick); } |
2180 | void SetHandlingClick() { SetBoolFlag(NodeHandlingClick); } |
2181 | void ClearHandlingClick() { ClearBoolFlag(NodeHandlingClick); } |
2182 | |
2183 | void SetSubtreeRootPointer(nsINode* aSubtreeRoot) { |
2184 | NS_ASSERTION(aSubtreeRoot, "aSubtreeRoot can never be null!")do { if (!(aSubtreeRoot)) { NS_DebugBreak(NS_DEBUG_ASSERTION, "aSubtreeRoot can never be null!", "aSubtreeRoot", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 2184); MOZ_PretendNoReturn(); } } while (0); |
2185 | NS_ASSERTION(!(IsContent() && IsInUncomposedDoc()) && !IsInShadowTree(),do { if (!(!(IsContent() && IsInUncomposedDoc()) && !IsInShadowTree())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Shouldn't be here!" , "!(IsContent() && IsInUncomposedDoc()) && !IsInShadowTree()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 2186); MOZ_PretendNoReturn(); } } while (0) |
2186 | "Shouldn't be here!")do { if (!(!(IsContent() && IsInUncomposedDoc()) && !IsInShadowTree())) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Shouldn't be here!" , "!(IsContent() && IsInUncomposedDoc()) && !IsInShadowTree()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 2186); MOZ_PretendNoReturn(); } } while (0); |
2187 | mSubtreeRoot = aSubtreeRoot; |
2188 | } |
2189 | |
2190 | void ClearSubtreeRootPointer() { mSubtreeRoot = nullptr; } |
2191 | |
2192 | public: |
2193 | // Makes nsINode object keep aObject alive. If a callback is provided, it's |
2194 | // called before deleting the node. |
2195 | void BindObject(nsISupports* aObject, UnbindCallback = nullptr); |
2196 | // After calling UnbindObject nsINode, object doesn't keep aObject alive |
2197 | // anymore. |
2198 | void UnbindObject(nsISupports* aObject); |
2199 | |
2200 | void GenerateXPath(nsAString& aResult); |
2201 | |
2202 | already_AddRefed<mozilla::dom::AccessibleNode> GetAccessibleNode(); |
2203 | |
2204 | /** |
2205 | * Returns the length of this node, as specified at |
2206 | * <http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#concept-node-length> |
2207 | */ |
2208 | uint32_t Length() const; |
2209 | |
2210 | void GetNodeName(mozilla::dom::DOMString& aNodeName) { |
2211 | const nsString& nodeName = NodeName(); |
2212 | aNodeName.SetKnownLiveString(nodeName); |
2213 | } |
2214 | [[nodiscard]] nsresult GetBaseURI(nsAString& aBaseURI) const; |
2215 | // Return the base URI for the document. |
2216 | // The returned value may differ if the document is loaded via XHR, and |
2217 | // when accessed from chrome privileged script and |
2218 | // from content privileged script for compatibility. |
2219 | void GetBaseURIFromJS(nsAString& aBaseURI, CallerType aCallerType, |
2220 | ErrorResult& aRv) const; |
2221 | bool HasChildNodes() const { return HasChildren(); } |
2222 | |
2223 | // See nsContentUtils::PositionIsBefore for aThisIndex and aOtherIndex usage. |
2224 | uint16_t CompareDocumentPosition( |
2225 | nsINode& aOther, mozilla::Maybe<uint32_t>* aThisIndex = nullptr, |
2226 | mozilla::Maybe<uint32_t>* aOtherIndex = nullptr) const; |
2227 | void GetNodeValue(nsAString& aNodeValue) { GetNodeValueInternal(aNodeValue); } |
2228 | void SetNodeValue(const nsAString& aNodeValue, mozilla::ErrorResult& aError) { |
2229 | SetNodeValueInternal(aNodeValue, aError); |
2230 | } |
2231 | virtual void GetNodeValueInternal(nsAString& aNodeValue); |
2232 | virtual void SetNodeValueInternal(const nsAString& aNodeValue, |
2233 | mozilla::ErrorResult& aError) { |
2234 | // The DOM spec says that when nodeValue is defined to be null "setting it |
2235 | // has no effect", so we don't throw an exception. |
2236 | } |
2237 | void EnsurePreInsertionValidity(nsINode& aNewChild, nsINode* aRefChild, |
2238 | mozilla::ErrorResult& aError); |
2239 | nsINode* InsertBefore(nsINode& aNode, nsINode* aChild, |
2240 | mozilla::ErrorResult& aError) { |
2241 | return ReplaceOrInsertBefore(false, &aNode, aChild, aError); |
2242 | } |
2243 | |
2244 | /** |
2245 | * See <https://dom.spec.whatwg.org/#dom-node-appendchild>. |
2246 | */ |
2247 | nsINode* AppendChild(nsINode& aNode, mozilla::ErrorResult& aError) { |
2248 | return InsertBefore(aNode, nullptr, aError); |
2249 | } |
2250 | |
2251 | nsINode* ReplaceChild(nsINode& aNode, nsINode& aChild, |
2252 | mozilla::ErrorResult& aError) { |
2253 | return ReplaceOrInsertBefore(true, &aNode, &aChild, aError); |
2254 | } |
2255 | // TODO: Convert this to MOZ_CAN_RUN_SCRIPT (bug 1415230) |
2256 | MOZ_CAN_RUN_SCRIPT_BOUNDARY nsINode* RemoveChild( |
2257 | nsINode& aChild, mozilla::ErrorResult& aError); |
2258 | already_AddRefed<nsINode> CloneNode(bool aDeep, mozilla::ErrorResult& aError); |
2259 | bool IsSameNode(nsINode* aNode); |
2260 | bool IsEqualNode(nsINode* aNode); |
2261 | void GetNamespaceURI(nsAString& aNamespaceURI) const { |
2262 | mNodeInfo->GetNamespaceURI(aNamespaceURI); |
2263 | } |
2264 | #ifdef MOZILLA_INTERNAL_API1 |
2265 | void GetPrefix(nsAString& aPrefix) { mNodeInfo->GetPrefix(aPrefix); } |
2266 | #endif |
2267 | void GetLocalName(mozilla::dom::DOMString& aLocalName) const { |
2268 | const nsString& localName = LocalName(); |
2269 | aLocalName.SetKnownLiveString(localName); |
2270 | } |
2271 | |
2272 | nsDOMAttributeMap* GetAttributes(); |
2273 | |
2274 | // Helper method to remove this node from its parent. This is not exposed |
2275 | // through WebIDL. |
2276 | // Only call this if the node has a parent node. |
2277 | nsresult RemoveFromParent() { |
2278 | nsINode* parent = GetParentNode(); |
2279 | mozilla::ErrorResult rv; |
2280 | parent->RemoveChild(*this, rv); |
2281 | return rv.StealNSResult(); |
2282 | } |
2283 | |
2284 | // ChildNode methods |
2285 | inline mozilla::dom::Element* GetPreviousElementSibling() const; |
2286 | inline mozilla::dom::Element* GetNextElementSibling() const; |
2287 | |
2288 | MOZ_CAN_RUN_SCRIPT void Before(const Sequence<OwningNodeOrString>& aNodes, |
2289 | ErrorResult& aRv); |
2290 | MOZ_CAN_RUN_SCRIPT void After(const Sequence<OwningNodeOrString>& aNodes, |
2291 | ErrorResult& aRv); |
2292 | MOZ_CAN_RUN_SCRIPT void ReplaceWith( |
2293 | const Sequence<OwningNodeOrString>& aNodes, ErrorResult& aRv); |
2294 | /** |
2295 | * Remove this node from its parent, if any. |
2296 | */ |
2297 | void Remove(); |
2298 | |
2299 | // ParentNode methods |
2300 | mozilla::dom::Element* GetFirstElementChild() const; |
2301 | mozilla::dom::Element* GetLastElementChild() const; |
2302 | |
2303 | already_AddRefed<nsIHTMLCollection> GetElementsByAttribute( |
2304 | const nsAString& aAttribute, const nsAString& aValue); |
2305 | already_AddRefed<nsIHTMLCollection> GetElementsByAttributeNS( |
2306 | const nsAString& aNamespaceURI, const nsAString& aAttribute, |
2307 | const nsAString& aValue, ErrorResult& aRv); |
2308 | |
2309 | MOZ_CAN_RUN_SCRIPT void Prepend(const Sequence<OwningNodeOrString>& aNodes, |
2310 | ErrorResult& aRv); |
2311 | MOZ_CAN_RUN_SCRIPT void Append(const Sequence<OwningNodeOrString>& aNodes, |
2312 | ErrorResult& aRv); |
2313 | MOZ_CAN_RUN_SCRIPT void ReplaceChildren( |
2314 | const Sequence<OwningNodeOrString>& aNodes, ErrorResult& aRv); |
2315 | MOZ_CAN_RUN_SCRIPT void ReplaceChildren(nsINode* aNode, ErrorResult& aRv); |
2316 | |
2317 | void GetBoxQuads(const BoxQuadOptions& aOptions, |
2318 | nsTArray<RefPtr<DOMQuad>>& aResult, CallerType aCallerType, |
2319 | ErrorResult& aRv); |
2320 | |
2321 | void GetBoxQuadsFromWindowOrigin(const BoxQuadOptions& aOptions, |
2322 | nsTArray<RefPtr<DOMQuad>>& aResult, |
2323 | ErrorResult& aRv); |
2324 | |
2325 | already_AddRefed<DOMQuad> ConvertQuadFromNode( |
2326 | DOMQuad& aQuad, const TextOrElementOrDocument& aFrom, |
2327 | const ConvertCoordinateOptions& aOptions, CallerType aCallerType, |
2328 | ErrorResult& aRv); |
2329 | already_AddRefed<DOMQuad> ConvertRectFromNode( |
2330 | DOMRectReadOnly& aRect, const TextOrElementOrDocument& aFrom, |
2331 | const ConvertCoordinateOptions& aOptions, CallerType aCallerType, |
2332 | ErrorResult& aRv); |
2333 | already_AddRefed<DOMPoint> ConvertPointFromNode( |
2334 | const DOMPointInit& aPoint, const TextOrElementOrDocument& aFrom, |
2335 | const ConvertCoordinateOptions& aOptions, CallerType aCallerType, |
2336 | ErrorResult& aRv); |
2337 | |
2338 | /** |
2339 | * See nsSlots::mClosestCommonInclusiveAncestorRanges. |
2340 | */ |
2341 | const mozilla::LinkedList<mozilla::dom::AbstractRange>* |
2342 | GetExistingClosestCommonInclusiveAncestorRanges() const { |
2343 | if (!HasSlots()) { |
2344 | return nullptr; |
2345 | } |
2346 | return GetExistingSlots()->mClosestCommonInclusiveAncestorRanges.get(); |
2347 | } |
2348 | |
2349 | /** |
2350 | * See nsSlots::mClosestCommonInclusiveAncestorRanges. |
2351 | */ |
2352 | mozilla::LinkedList<mozilla::dom::AbstractRange>* |
2353 | GetExistingClosestCommonInclusiveAncestorRanges() { |
2354 | if (!HasSlots()) { |
2355 | return nullptr; |
2356 | } |
2357 | return GetExistingSlots()->mClosestCommonInclusiveAncestorRanges.get(); |
2358 | } |
2359 | |
2360 | /** |
2361 | * See nsSlots::mClosestCommonInclusiveAncestorRanges. |
2362 | */ |
2363 | mozilla::UniquePtr<mozilla::LinkedList<mozilla::dom::AbstractRange>>& |
2364 | GetClosestCommonInclusiveAncestorRangesPtr() { |
2365 | return Slots()->mClosestCommonInclusiveAncestorRanges; |
2366 | } |
2367 | |
2368 | nsIWeakReference* GetExistingWeakReference() { |
2369 | return HasSlots() ? GetExistingSlots()->mWeakReference : nullptr; |
2370 | } |
2371 | |
2372 | protected: |
2373 | // Override this function to create a custom slots class. |
2374 | // Must not return null. |
2375 | virtual nsINode::nsSlots* CreateSlots(); |
2376 | |
2377 | bool HasSlots() const { return mSlots != nullptr; } |
2378 | |
2379 | nsSlots* GetExistingSlots() const { return mSlots; } |
2380 | |
2381 | nsSlots* Slots() { |
2382 | if (!HasSlots()) { |
2383 | mSlots = CreateSlots(); |
2384 | MOZ_ASSERT(mSlots)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mSlots)>::isValid, "invalid assertion condition") ; if ((__builtin_expect(!!(!(!!(mSlots))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("mSlots", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 2384); AnnotateMozCrashReason("MOZ_ASSERT" "(" "mSlots" ")" ); do { *((volatile int*)__null) = 2384; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2385 | } |
2386 | return GetExistingSlots(); |
2387 | } |
2388 | |
2389 | /** |
2390 | * Invalidate cached child array inside mChildNodes |
2391 | * of type nsParentNodeChildContentList. |
2392 | */ |
2393 | void InvalidateChildNodes(); |
2394 | |
2395 | virtual void GetTextContentInternal(nsAString& aTextContent, |
2396 | mozilla::OOMReporter& aError); |
2397 | virtual void SetTextContentInternal(const nsAString& aTextContent, |
2398 | nsIPrincipal* aSubjectPrincipal, |
2399 | mozilla::ErrorResult& aError) {} |
2400 | |
2401 | void EnsurePreInsertionValidity1(mozilla::ErrorResult& aError); |
2402 | void EnsurePreInsertionValidity2(bool aReplace, nsINode& aNewChild, |
2403 | nsINode* aRefChild, |
2404 | mozilla::ErrorResult& aError); |
2405 | // TODO: Convert this to MOZ_CAN_RUN_SCRIPT (bug 1415230) |
2406 | MOZ_CAN_RUN_SCRIPT_BOUNDARY nsINode* ReplaceOrInsertBefore( |
2407 | bool aReplace, nsINode* aNewChild, nsINode* aRefChild, |
2408 | mozilla::ErrorResult& aError); |
2409 | |
2410 | /** |
2411 | * Returns the Element that should be used for resolving namespaces |
2412 | * on this node (ie the ownerElement for attributes, the documentElement for |
2413 | * documents, the node itself for elements and for other nodes the parentNode |
2414 | * if it is an element). |
2415 | */ |
2416 | virtual mozilla::dom::Element* GetNameSpaceElement() = 0; |
2417 | |
2418 | /** |
2419 | * Parse the given selector string into a servo SelectorList. |
2420 | * |
2421 | * Never returns null if aRv is not failing. |
2422 | * |
2423 | * Note that the selector list returned here is owned by the owner doc's |
2424 | * selector cache. |
2425 | */ |
2426 | const mozilla::StyleSelectorList* ParseSelectorList( |
2427 | const nsACString& aSelectorString, mozilla::ErrorResult&); |
2428 | |
2429 | public: |
2430 | /* Event stuff that documents and elements share. |
2431 | |
2432 | Note that we include DOCUMENT_ONLY_EVENT events here so that we |
2433 | can forward all the document stuff to this implementation. |
2434 | */ |
2435 | #define EVENT(name_, id_, type_, struct_) \ |
2436 | mozilla::dom::EventHandlerNonNull* GetOn##name_() { \ |
2437 | return GetEventHandler(nsGkAtoms::on##name_); \ |
2438 | } \ |
2439 | void SetOn##name_(mozilla::dom::EventHandlerNonNull* handler) { \ |
2440 | SetEventHandler(nsGkAtoms::on##name_, handler); \ |
2441 | } |
2442 | #define TOUCH_EVENT EVENT |
2443 | #define DOCUMENT_ONLY_EVENT EVENT |
2444 | #include "mozilla/EventNameList.h" |
2445 | #undef DOCUMENT_ONLY_EVENT |
2446 | #undef TOUCH_EVENT |
2447 | #undef EVENT |
2448 | |
2449 | NodeSelectorFlags GetSelectorFlags() const { |
2450 | return static_cast<NodeSelectorFlags>(mSelectorFlags.Get()); |
2451 | } |
2452 | |
2453 | protected: |
2454 | static bool Traverse(nsINode* tmp, nsCycleCollectionTraversalCallback& cb); |
2455 | static void Unlink(nsINode* tmp); |
2456 | |
2457 | RefPtr<mozilla::dom::NodeInfo> mNodeInfo; |
2458 | |
2459 | // mParent is an owning ref most of the time, except for the case of document |
2460 | // nodes, so it cannot be represented by nsCOMPtr, so mark is as |
2461 | // MOZ_OWNING_REF. |
2462 | nsINode* MOZ_OWNING_REF mParent; |
2463 | |
2464 | private: |
2465 | #ifndef BOOL_FLAGS_ON_WRAPPER_CACHE |
2466 | // Boolean flags. |
2467 | uint32_t mBoolFlags; |
2468 | #endif |
2469 | |
2470 | mozilla::RustCell<uint32_t> mSelectorFlags{0}; |
2471 | |
2472 | uint32_t mChildCount; |
2473 | |
2474 | protected: |
2475 | // mNextSibling and mFirstChild are strong references while |
2476 | // mPreviousOrLastSibling is a weak ref. |mFirstChild->mPreviousOrLastSibling| |
2477 | // points to the last child node. |
2478 | nsCOMPtr<nsIContent> mFirstChild; |
2479 | nsCOMPtr<nsIContent> mNextSibling; |
2480 | nsIContent* MOZ_NON_OWNING_REF mPreviousOrLastSibling; |
2481 | |
2482 | union { |
2483 | // Pointer to our primary frame. Might be null. |
2484 | nsIFrame* mPrimaryFrame; |
2485 | |
2486 | // Pointer to the root of our subtree. Might be null. |
2487 | // This reference is non-owning and safe, since it either points to the |
2488 | // object itself, or is reset by ClearSubtreeRootPointer. |
2489 | nsINode* MOZ_NON_OWNING_REF mSubtreeRoot; |
2490 | }; |
2491 | |
2492 | // Storage for more members that are usually not needed; allocated lazily. |
2493 | nsSlots* mSlots; |
2494 | }; |
2495 | |
2496 | NON_VIRTUAL_ADDREF_RELEASE(nsINode) |
2497 | |
2498 | inline nsINode* mozilla::dom::EventTarget::GetAsNode() { |
2499 | return IsNode() ? AsNode() : nullptr; |
2500 | } |
2501 | |
2502 | inline const nsINode* mozilla::dom::EventTarget::GetAsNode() const { |
2503 | return const_cast<mozilla::dom::EventTarget*>(this)->GetAsNode(); |
2504 | } |
2505 | |
2506 | inline nsINode* mozilla::dom::EventTarget::AsNode() { |
2507 | MOZ_DIAGNOSTIC_ASSERT(IsNode())do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsNode())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsNode()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("IsNode()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 2507); AnnotateMozCrashReason("MOZ_DIAGNOSTIC_ASSERT" "(" "IsNode()" ")"); do { *((volatile int*)__null) = 2507; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2508 | return static_cast<nsINode*>(this); |
2509 | } |
2510 | |
2511 | inline const nsINode* mozilla::dom::EventTarget::AsNode() const { |
2512 | MOZ_DIAGNOSTIC_ASSERT(IsNode())do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsNode())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsNode()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("IsNode()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/nsINode.h" , 2512); AnnotateMozCrashReason("MOZ_DIAGNOSTIC_ASSERT" "(" "IsNode()" ")"); do { *((volatile int*)__null) = 2512; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2513 | return static_cast<const nsINode*>(this); |
2514 | } |
2515 | |
2516 | // Useful inline function for getting a node given an nsIContent and a Document. |
2517 | // Returns the first argument cast to nsINode if it is non-null, otherwise |
2518 | // returns the second (which may be null). We use type variables instead of |
2519 | // nsIContent* and Document* because the actual types must be |
2520 | // known for the cast to work. |
2521 | template <class C, class D> |
2522 | inline nsINode* NODE_FROM(C& aContent, D& aDocument) { |
2523 | if (aContent) return static_cast<nsINode*>(aContent); |
2524 | return static_cast<nsINode*>(aDocument); |
2525 | } |
2526 | |
2527 | NS_DEFINE_STATIC_IID_ACCESSOR(nsINode, NS_INODE_IID)template <typename T> struct nsINode::COMTypeInfo<nsINode , T> { static const nsIID kIID __attribute__((visibility("hidden" ))); }; template <typename T> const nsIID nsINode::COMTypeInfo <nsINode, T>::kIID __attribute__((visibility("hidden")) ) = { 0x70ba4547, 0x7699, 0x44fc, { 0xb3, 0x20, 0x52, 0xdb, 0xe3 , 0xd1, 0xf9, 0x0a } }; |
2528 | |
2529 | inline nsISupports* ToSupports(nsINode* aPointer) { return aPointer; } |
2530 | |
2531 | // Some checks are faster to do on nsIContent or Element than on |
2532 | // nsINode, so spit out FromNode versions taking those types too. |
2533 | #define NS_IMPL_FROMNODE_GENERIC(_class, _check, _const)template <typename T> static auto FromNode( _const T& aNode) -> decltype(static_cast<_const _class*>(& aNode)) { return aNode._check ? static_cast<_const _class* >(&aNode) : nullptr; } template <typename T> static _const _class* FromNode(_const T* aNode) { return FromNode(* aNode); } template <typename T> static _const _class* FromNodeOrNull (_const T* aNode) { return aNode ? FromNode(*aNode) : nullptr ; } template <typename T> static auto FromEventTarget(_const T& aEventTarget) -> decltype(static_cast<_const _class *>(&aEventTarget)) { return aEventTarget.IsNode() && aEventTarget.AsNode()->_check ? static_cast<_const _class *>(&aEventTarget) : nullptr; } template <typename T > static _const _class* FromEventTarget(_const T* aEventTarget ) { return FromEventTarget(*aEventTarget); } template <typename T> static _const _class* FromEventTargetOrNull(_const T* aEventTarget ) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr ; } \ |
2534 | template <typename T> \ |
2535 | static auto FromNode( \ |
2536 | _const T& aNode) -> decltype(static_cast<_const _class*>(&aNode)) { \ |
2537 | return aNode._check ? static_cast<_const _class*>(&aNode) : nullptr; \ |
2538 | } \ |
2539 | template <typename T> \ |
2540 | static _const _class* FromNode(_const T* aNode) { \ |
2541 | return FromNode(*aNode); \ |
2542 | } \ |
2543 | template <typename T> \ |
2544 | static _const _class* FromNodeOrNull(_const T* aNode) { \ |
2545 | return aNode ? FromNode(*aNode) : nullptr; \ |
2546 | } \ |
2547 | template <typename T> \ |
2548 | static auto FromEventTarget(_const T& aEventTarget) \ |
2549 | -> decltype(static_cast<_const _class*>(&aEventTarget)) { \ |
2550 | return aEventTarget.IsNode() && aEventTarget.AsNode()->_check \ |
2551 | ? static_cast<_const _class*>(&aEventTarget) \ |
2552 | : nullptr; \ |
2553 | } \ |
2554 | template <typename T> \ |
2555 | static _const _class* FromEventTarget(_const T* aEventTarget) { \ |
2556 | return FromEventTarget(*aEventTarget); \ |
2557 | } \ |
2558 | template <typename T> \ |
2559 | static _const _class* FromEventTargetOrNull(_const T* aEventTarget) { \ |
2560 | return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr; \ |
2561 | } |
2562 | |
2563 | #define NS_IMPL_FROMNODE_HELPER(_class, _check)template <typename T> static auto FromNode( T& aNode ) -> decltype(static_cast< _class*>(&aNode)) { return aNode._check ? static_cast< _class*>(&aNode) : nullptr ; } template <typename T> static _class* FromNode( T* aNode ) { return FromNode(*aNode); } template <typename T> static _class* FromNodeOrNull( T* aNode) { return aNode ? FromNode( *aNode) : nullptr; } template <typename T> static auto FromEventTarget ( T& aEventTarget) -> decltype(static_cast< _class* >(&aEventTarget)) { return aEventTarget.IsNode() && aEventTarget.AsNode()->_check ? static_cast< _class*> (&aEventTarget) : nullptr; } template <typename T> static _class* FromEventTarget( T* aEventTarget) { return FromEventTarget (*aEventTarget); } template <typename T> static _class* FromEventTargetOrNull( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr; } template <typename T> static auto FromNode( const T& aNode) -> decltype (static_cast<const _class*>(&aNode)) { return aNode ._check ? static_cast<const _class*>(&aNode) : nullptr ; } template <typename T> static const _class* FromNode (const T* aNode) { return FromNode(*aNode); } template <typename T> static const _class* FromNodeOrNull(const T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T > static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast<const _class*>(&aEventTarget) ) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->_check ? static_cast<const _class*>(&aEventTarget ) : nullptr; } template <typename T> static const _class * FromEventTarget(const T* aEventTarget) { return FromEventTarget (*aEventTarget); } template <typename T> static const _class * FromEventTargetOrNull(const T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr; } template <typename T> static _class* FromNode(T&& aNode) { return aNode ->_check ? static_cast<_class*>(static_cast<nsINode *>(aNode)) : nullptr; } template <typename T> static _class* FromNodeOrNull(T&& aNode) { return aNode ? FromNode (aNode) : nullptr; } template <typename T> static _class * FromEventTarget(T&& aEventTarget) { return aEventTarget ->IsNode() && aEventTarget->AsNode()->_check ? static_cast<_class*>(static_cast<EventTarget*> (aEventTarget)) : nullptr; } template <typename T> static _class* FromEventTargetOrNull(T&& aEventTarget) { return aEventTarget ? FromEventTarget(aEventTarget) : nullptr; } \ |
2564 | NS_IMPL_FROMNODE_GENERIC(_class, _check, )template <typename T> static auto FromNode( T& aNode ) -> decltype(static_cast< _class*>(&aNode)) { return aNode._check ? static_cast< _class*>(&aNode) : nullptr ; } template <typename T> static _class* FromNode( T* aNode ) { return FromNode(*aNode); } template <typename T> static _class* FromNodeOrNull( T* aNode) { return aNode ? FromNode( *aNode) : nullptr; } template <typename T> static auto FromEventTarget ( T& aEventTarget) -> decltype(static_cast< _class* >(&aEventTarget)) { return aEventTarget.IsNode() && aEventTarget.AsNode()->_check ? static_cast< _class*> (&aEventTarget) : nullptr; } template <typename T> static _class* FromEventTarget( T* aEventTarget) { return FromEventTarget (*aEventTarget); } template <typename T> static _class* FromEventTargetOrNull( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr; } \ |
2565 | NS_IMPL_FROMNODE_GENERIC(_class, _check, const)template <typename T> static auto FromNode( const T& aNode) -> decltype(static_cast<const _class*>(& aNode)) { return aNode._check ? static_cast<const _class*> (&aNode) : nullptr; } template <typename T> static const _class* FromNode(const T* aNode) { return FromNode(*aNode); } template <typename T> static const _class* FromNodeOrNull (const T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T> static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast<const _class *>(&aEventTarget)) { return aEventTarget.IsNode() && aEventTarget.AsNode()->_check ? static_cast<const _class *>(&aEventTarget) : nullptr; } template <typename T > static const _class* FromEventTarget(const T* aEventTarget ) { return FromEventTarget(*aEventTarget); } template <typename T> static const _class* FromEventTargetOrNull(const T* aEventTarget ) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr ; } \ |
2566 | \ |
2567 | template <typename T> \ |
2568 | static _class* FromNode(T&& aNode) { \ |
2569 | /* We need the double-cast in case aNode is a smartptr. Those */ \ |
2570 | /* can cast to superclasses of the type they're templated on, */ \ |
2571 | /* but not directly to subclasses. */ \ |
2572 | return aNode->_check ? static_cast<_class*>(static_cast<nsINode*>(aNode)) \ |
2573 | : nullptr; \ |
2574 | } \ |
2575 | template <typename T> \ |
2576 | static _class* FromNodeOrNull(T&& aNode) { \ |
2577 | return aNode ? FromNode(aNode) : nullptr; \ |
2578 | } \ |
2579 | template <typename T> \ |
2580 | static _class* FromEventTarget(T&& aEventTarget) { \ |
2581 | /* We need the double-cast in case aEventTarget is a smartptr. Those */ \ |
2582 | /* can cast to superclasses of the type they're templated on, */ \ |
2583 | /* but not directly to subclasses. */ \ |
2584 | return aEventTarget->IsNode() && aEventTarget->AsNode()->_check \ |
2585 | ? static_cast<_class*>(static_cast<EventTarget*>(aEventTarget)) \ |
2586 | : nullptr; \ |
2587 | } \ |
2588 | template <typename T> \ |
2589 | static _class* FromEventTargetOrNull(T&& aEventTarget) { \ |
2590 | return aEventTarget ? FromEventTarget(aEventTarget) : nullptr; \ |
2591 | } |
2592 | |
2593 | #define NS_IMPL_FROMNODE(_class, _nsid)template <typename T> static auto FromNode( T& aNode ) -> decltype(static_cast< _class*>(&aNode)) { return aNode.IsInNamespace(_nsid) ? static_cast< _class*>(& aNode) : nullptr; } template <typename T> static _class * FromNode( T* aNode) { return FromNode(*aNode); } template < typename T> static _class* FromNodeOrNull( T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T > static auto FromEventTarget( T& aEventTarget) -> decltype (static_cast< _class*>(&aEventTarget)) { return aEventTarget .IsNode() && aEventTarget.AsNode()->IsInNamespace( _nsid) ? static_cast< _class*>(&aEventTarget) : nullptr ; } template <typename T> static _class* FromEventTarget ( T* aEventTarget) { return FromEventTarget(*aEventTarget); } template <typename T> static _class* FromEventTargetOrNull ( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget ) : nullptr; } template <typename T> static auto FromNode ( const T& aNode) -> decltype(static_cast<const _class *>(&aNode)) { return aNode.IsInNamespace(_nsid) ? static_cast <const _class*>(&aNode) : nullptr; } template <typename T> static const _class* FromNode(const T* aNode) { return FromNode(*aNode); } template <typename T> static const _class* FromNodeOrNull(const T* aNode) { return aNode ? FromNode (*aNode) : nullptr; } template <typename T> static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast <const _class*>(&aEventTarget)) { return aEventTarget .IsNode() && aEventTarget.AsNode()->IsInNamespace( _nsid) ? static_cast<const _class*>(&aEventTarget) : nullptr; } template <typename T> static const _class* FromEventTarget (const T* aEventTarget) { return FromEventTarget(*aEventTarget ); } template <typename T> static const _class* FromEventTargetOrNull (const T* aEventTarget) { return aEventTarget ? FromEventTarget (*aEventTarget) : nullptr; } template <typename T> static _class* FromNode(T&& aNode) { return aNode->IsInNamespace (_nsid) ? static_cast<_class*>(static_cast<nsINode*> (aNode)) : nullptr; } template <typename T> static _class * FromNodeOrNull(T&& aNode) { return aNode ? FromNode (aNode) : nullptr; } template <typename T> static _class * FromEventTarget(T&& aEventTarget) { return aEventTarget ->IsNode() && aEventTarget->AsNode()->IsInNamespace (_nsid) ? static_cast<_class*>(static_cast<EventTarget *>(aEventTarget)) : nullptr; } template <typename T> static _class* FromEventTargetOrNull(T&& aEventTarget ) { return aEventTarget ? FromEventTarget(aEventTarget) : nullptr ; } \ |
2594 | NS_IMPL_FROMNODE_HELPER(_class, IsInNamespace(_nsid))template <typename T> static auto FromNode( T& aNode ) -> decltype(static_cast< _class*>(&aNode)) { return aNode.IsInNamespace(_nsid) ? static_cast< _class*>(& aNode) : nullptr; } template <typename T> static _class * FromNode( T* aNode) { return FromNode(*aNode); } template < typename T> static _class* FromNodeOrNull( T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T > static auto FromEventTarget( T& aEventTarget) -> decltype (static_cast< _class*>(&aEventTarget)) { return aEventTarget .IsNode() && aEventTarget.AsNode()->IsInNamespace( _nsid) ? static_cast< _class*>(&aEventTarget) : nullptr ; } template <typename T> static _class* FromEventTarget ( T* aEventTarget) { return FromEventTarget(*aEventTarget); } template <typename T> static _class* FromEventTargetOrNull ( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget ) : nullptr; } template <typename T> static auto FromNode ( const T& aNode) -> decltype(static_cast<const _class *>(&aNode)) { return aNode.IsInNamespace(_nsid) ? static_cast <const _class*>(&aNode) : nullptr; } template <typename T> static const _class* FromNode(const T* aNode) { return FromNode(*aNode); } template <typename T> static const _class* FromNodeOrNull(const T* aNode) { return aNode ? FromNode (*aNode) : nullptr; } template <typename T> static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast <const _class*>(&aEventTarget)) { return aEventTarget .IsNode() && aEventTarget.AsNode()->IsInNamespace( _nsid) ? static_cast<const _class*>(&aEventTarget) : nullptr; } template <typename T> static const _class* FromEventTarget (const T* aEventTarget) { return FromEventTarget(*aEventTarget ); } template <typename T> static const _class* FromEventTargetOrNull (const T* aEventTarget) { return aEventTarget ? FromEventTarget (*aEventTarget) : nullptr; } template <typename T> static _class* FromNode(T&& aNode) { return aNode->IsInNamespace (_nsid) ? static_cast<_class*>(static_cast<nsINode*> (aNode)) : nullptr; } template <typename T> static _class * FromNodeOrNull(T&& aNode) { return aNode ? FromNode (aNode) : nullptr; } template <typename T> static _class * FromEventTarget(T&& aEventTarget) { return aEventTarget ->IsNode() && aEventTarget->AsNode()->IsInNamespace (_nsid) ? static_cast<_class*>(static_cast<EventTarget *>(aEventTarget)) : nullptr; } template <typename T> static _class* FromEventTargetOrNull(T&& aEventTarget ) { return aEventTarget ? FromEventTarget(aEventTarget) : nullptr ; } |
2595 | |
2596 | #define NS_IMPL_FROMNODE_WITH_TAG(_class, _nsid, _tag)template <typename T> static auto FromNode( T& aNode ) -> decltype(static_cast< _class*>(&aNode)) { return aNode.NodeInfo()->Equals(nsGkAtoms::_tag, _nsid) ? static_cast < _class*>(&aNode) : nullptr; } template <typename T> static _class* FromNode( T* aNode) { return FromNode(* aNode); } template <typename T> static _class* FromNodeOrNull ( T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T> static auto FromEventTarget( T& aEventTarget ) -> decltype(static_cast< _class*>(&aEventTarget )) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->NodeInfo()->Equals(nsGkAtoms::_tag, _nsid) ? static_cast < _class*>(&aEventTarget) : nullptr; } template < typename T> static _class* FromEventTarget( T* aEventTarget ) { return FromEventTarget(*aEventTarget); } template <typename T> static _class* FromEventTargetOrNull( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr ; } template <typename T> static auto FromNode( const T & aNode) -> decltype(static_cast<const _class*>( &aNode)) { return aNode.NodeInfo()->Equals(nsGkAtoms:: _tag, _nsid) ? static_cast<const _class*>(&aNode) : nullptr; } template <typename T> static const _class* FromNode (const T* aNode) { return FromNode(*aNode); } template <typename T> static const _class* FromNodeOrNull(const T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T > static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast<const _class*>(&aEventTarget) ) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->NodeInfo()->Equals(nsGkAtoms::_tag, _nsid) ? static_cast <const _class*>(&aEventTarget) : nullptr; } template <typename T> static const _class* FromEventTarget(const T* aEventTarget) { return FromEventTarget(*aEventTarget); } template <typename T> static const _class* FromEventTargetOrNull (const T* aEventTarget) { return aEventTarget ? FromEventTarget (*aEventTarget) : nullptr; } template <typename T> static _class* FromNode(T&& aNode) { return aNode->NodeInfo ()->Equals(nsGkAtoms::_tag, _nsid) ? static_cast<_class *>(static_cast<nsINode*>(aNode)) : nullptr; } template <typename T> static _class* FromNodeOrNull(T&& aNode) { return aNode ? FromNode(aNode) : nullptr; } template <typename T> static _class* FromEventTarget(T&& aEventTarget) { return aEventTarget->IsNode() && aEventTarget ->AsNode()->NodeInfo()->Equals(nsGkAtoms::_tag, _nsid ) ? static_cast<_class*>(static_cast<EventTarget*> (aEventTarget)) : nullptr; } template <typename T> static _class* FromEventTargetOrNull(T&& aEventTarget) { return aEventTarget ? FromEventTarget(aEventTarget) : nullptr; } \ |
2597 | NS_IMPL_FROMNODE_HELPER(_class, NodeInfo()->Equals(nsGkAtoms::_tag, _nsid))template <typename T> static auto FromNode( T& aNode ) -> decltype(static_cast< _class*>(&aNode)) { return aNode.NodeInfo()->Equals(nsGkAtoms::_tag, _nsid) ? static_cast < _class*>(&aNode) : nullptr; } template <typename T> static _class* FromNode( T* aNode) { return FromNode(* aNode); } template <typename T> static _class* FromNodeOrNull ( T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T> static auto FromEventTarget( T& aEventTarget ) -> decltype(static_cast< _class*>(&aEventTarget )) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->NodeInfo()->Equals(nsGkAtoms::_tag, _nsid) ? static_cast < _class*>(&aEventTarget) : nullptr; } template < typename T> static _class* FromEventTarget( T* aEventTarget ) { return FromEventTarget(*aEventTarget); } template <typename T> static _class* FromEventTargetOrNull( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr ; } template <typename T> static auto FromNode( const T & aNode) -> decltype(static_cast<const _class*>( &aNode)) { return aNode.NodeInfo()->Equals(nsGkAtoms:: _tag, _nsid) ? static_cast<const _class*>(&aNode) : nullptr; } template <typename T> static const _class* FromNode (const T* aNode) { return FromNode(*aNode); } template <typename T> static const _class* FromNodeOrNull(const T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T > static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast<const _class*>(&aEventTarget) ) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->NodeInfo()->Equals(nsGkAtoms::_tag, _nsid) ? static_cast <const _class*>(&aEventTarget) : nullptr; } template <typename T> static const _class* FromEventTarget(const T* aEventTarget) { return FromEventTarget(*aEventTarget); } template <typename T> static const _class* FromEventTargetOrNull (const T* aEventTarget) { return aEventTarget ? FromEventTarget (*aEventTarget) : nullptr; } template <typename T> static _class* FromNode(T&& aNode) { return aNode->NodeInfo ()->Equals(nsGkAtoms::_tag, _nsid) ? static_cast<_class *>(static_cast<nsINode*>(aNode)) : nullptr; } template <typename T> static _class* FromNodeOrNull(T&& aNode) { return aNode ? FromNode(aNode) : nullptr; } template <typename T> static _class* FromEventTarget(T&& aEventTarget) { return aEventTarget->IsNode() && aEventTarget ->AsNode()->NodeInfo()->Equals(nsGkAtoms::_tag, _nsid ) ? static_cast<_class*>(static_cast<EventTarget*> (aEventTarget)) : nullptr; } template <typename T> static _class* FromEventTargetOrNull(T&& aEventTarget) { return aEventTarget ? FromEventTarget(aEventTarget) : nullptr; } |
2598 | |
2599 | #define NS_IMPL_FROMNODE_HTML_WITH_TAG(_class, _tag)template <typename T> static auto FromNode( T& aNode ) -> decltype(static_cast< _class*>(&aNode)) { return aNode.NodeInfo()->Equals(nsGkAtoms::_tag, 3) ? static_cast < _class*>(&aNode) : nullptr; } template <typename T> static _class* FromNode( T* aNode) { return FromNode(* aNode); } template <typename T> static _class* FromNodeOrNull ( T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T> static auto FromEventTarget( T& aEventTarget ) -> decltype(static_cast< _class*>(&aEventTarget )) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->NodeInfo()->Equals(nsGkAtoms::_tag, 3) ? static_cast < _class*>(&aEventTarget) : nullptr; } template < typename T> static _class* FromEventTarget( T* aEventTarget ) { return FromEventTarget(*aEventTarget); } template <typename T> static _class* FromEventTargetOrNull( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr ; } template <typename T> static auto FromNode( const T & aNode) -> decltype(static_cast<const _class*>( &aNode)) { return aNode.NodeInfo()->Equals(nsGkAtoms:: _tag, 3) ? static_cast<const _class*>(&aNode) : nullptr ; } template <typename T> static const _class* FromNode (const T* aNode) { return FromNode(*aNode); } template <typename T> static const _class* FromNodeOrNull(const T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T > static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast<const _class*>(&aEventTarget) ) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->NodeInfo()->Equals(nsGkAtoms::_tag, 3) ? static_cast <const _class*>(&aEventTarget) : nullptr; } template <typename T> static const _class* FromEventTarget(const T* aEventTarget) { return FromEventTarget(*aEventTarget); } template <typename T> static const _class* FromEventTargetOrNull (const T* aEventTarget) { return aEventTarget ? FromEventTarget (*aEventTarget) : nullptr; } template <typename T> static _class* FromNode(T&& aNode) { return aNode->NodeInfo ()->Equals(nsGkAtoms::_tag, 3) ? static_cast<_class*> (static_cast<nsINode*>(aNode)) : nullptr; } template < typename T> static _class* FromNodeOrNull(T&& aNode ) { return aNode ? FromNode(aNode) : nullptr; } template < typename T> static _class* FromEventTarget(T&& aEventTarget ) { return aEventTarget->IsNode() && aEventTarget-> AsNode()->NodeInfo()->Equals(nsGkAtoms::_tag, 3) ? static_cast <_class*>(static_cast<EventTarget*>(aEventTarget) ) : nullptr; } template <typename T> static _class* FromEventTargetOrNull (T&& aEventTarget) { return aEventTarget ? FromEventTarget (aEventTarget) : nullptr; } \ |
2600 | NS_IMPL_FROMNODE_WITH_TAG(_class, kNameSpaceID_XHTML, _tag)template <typename T> static auto FromNode( T& aNode ) -> decltype(static_cast< _class*>(&aNode)) { return aNode.NodeInfo()->Equals(nsGkAtoms::_tag, 3) ? static_cast < _class*>(&aNode) : nullptr; } template <typename T> static _class* FromNode( T* aNode) { return FromNode(* aNode); } template <typename T> static _class* FromNodeOrNull ( T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T> static auto FromEventTarget( T& aEventTarget ) -> decltype(static_cast< _class*>(&aEventTarget )) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->NodeInfo()->Equals(nsGkAtoms::_tag, 3) ? static_cast < _class*>(&aEventTarget) : nullptr; } template < typename T> static _class* FromEventTarget( T* aEventTarget ) { return FromEventTarget(*aEventTarget); } template <typename T> static _class* FromEventTargetOrNull( T* aEventTarget) { return aEventTarget ? FromEventTarget(*aEventTarget) : nullptr ; } template <typename T> static auto FromNode( const T & aNode) -> decltype(static_cast<const _class*>( &aNode)) { return aNode.NodeInfo()->Equals(nsGkAtoms:: _tag, 3) ? static_cast<const _class*>(&aNode) : nullptr ; } template <typename T> static const _class* FromNode (const T* aNode) { return FromNode(*aNode); } template <typename T> static const _class* FromNodeOrNull(const T* aNode) { return aNode ? FromNode(*aNode) : nullptr; } template <typename T > static auto FromEventTarget(const T& aEventTarget) -> decltype(static_cast<const _class*>(&aEventTarget) ) { return aEventTarget.IsNode() && aEventTarget.AsNode ()->NodeInfo()->Equals(nsGkAtoms::_tag, 3) ? static_cast <const _class*>(&aEventTarget) : nullptr; } template <typename T> static const _class* FromEventTarget(const T* aEventTarget) { return FromEventTarget(*aEventTarget); } template <typename T> static const _class* FromEventTargetOrNull (const T* aEventTarget) { return aEventTarget ? FromEventTarget (*aEventTarget) : nullptr; } template <typename T> static _class* FromNode(T&& aNode) { return aNode->NodeInfo ()->Equals(nsGkAtoms::_tag, 3) ? static_cast<_class*> (static_cast<nsINode*>(aNode)) : nullptr; } template < typename T> static _class* FromNodeOrNull(T&& aNode ) { return aNode ? FromNode(aNode) : nullptr; } template < typename T> static _class* FromEventTarget(T&& aEventTarget ) { return aEventTarget->IsNode() && aEventTarget-> AsNode()->NodeInfo()->Equals(nsGkAtoms::_tag, 3) ? static_cast <_class*>(static_cast<EventTarget*>(aEventTarget) ) : nullptr; } template <typename T> static _class* FromEventTargetOrNull (T&& aEventTarget) { return aEventTarget ? FromEventTarget (aEventTarget) : nullptr; } |
2601 | |
2602 | #endif /* nsINode_h___ */ |
1 | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ |
3 | /* This Source Code Form is subject to the terms of the Mozilla Public |
4 | * License, v. 2.0. If a copy of the MPL was not distributed with this file, |
5 | * You can obtain one at http://mozilla.org/MPL/2.0/. */ |
6 | |
7 | #ifndef mozilla_dom_BindingUtils_h__ |
8 | #define mozilla_dom_BindingUtils_h__ |
9 | |
10 | #include <type_traits> |
11 | |
12 | #include "jsfriendapi.h" |
13 | #include "js/CharacterEncoding.h" |
14 | #include "js/Conversions.h" |
15 | #include "js/experimental/JitInfo.h" // JSJitGetterOp, JSJitInfo |
16 | #include "js/friend/WindowProxy.h" // js::IsWindow, js::IsWindowProxy, js::ToWindowProxyIfWindow |
17 | #include "js/MemoryFunctions.h" |
18 | #include "js/Object.h" // JS::GetClass, JS::GetCompartment, JS::GetReservedSlot, JS::SetReservedSlot |
19 | #include "js/RealmOptions.h" |
20 | #include "js/String.h" // JS::GetLatin1LinearStringChars, JS::GetTwoByteLinearStringChars, JS::GetLinearStringLength, JS::LinearStringHasLatin1Chars, JS::StringHasLatin1Chars |
21 | #include "js/Wrapper.h" |
22 | #include "js/Zone.h" |
23 | #include "mozilla/ArrayUtils.h" |
24 | #include "mozilla/Array.h" |
25 | #include "mozilla/Assertions.h" |
26 | #include "mozilla/DeferredFinalize.h" |
27 | #include "mozilla/EnumTypeTraits.h" |
28 | #include "mozilla/EnumeratedRange.h" |
29 | #include "mozilla/UniquePtr.h" |
30 | #include "mozilla/dom/BindingCallContext.h" |
31 | #include "mozilla/dom/BindingDeclarations.h" |
32 | #include "mozilla/dom/DOMJSClass.h" |
33 | #include "mozilla/dom/DOMJSProxyHandler.h" |
34 | #include "mozilla/dom/JSSlots.h" |
35 | #include "mozilla/dom/NonRefcountedDOMObject.h" |
36 | #include "mozilla/dom/Nullable.h" |
37 | #include "mozilla/dom/PrototypeList.h" |
38 | #include "mozilla/dom/RemoteObjectProxy.h" |
39 | #include "mozilla/SegmentedVector.h" |
40 | #include "mozilla/ErrorResult.h" |
41 | #include "mozilla/Likely.h" |
42 | #include "mozilla/MemoryReporting.h" |
43 | #include "nsIGlobalObject.h" |
44 | #include "nsJSUtils.h" |
45 | #include "nsISupportsImpl.h" |
46 | #include "xpcObjectHelper.h" |
47 | #include "xpcpublic.h" |
48 | #include "nsIVariant.h" |
49 | #include "mozilla/dom/FakeString.h" |
50 | #include "mozilla/ProfilerLabels.h" |
51 | |
52 | #include "nsWrapperCacheInlines.h" |
53 | |
54 | class nsGlobalWindowInner; |
55 | class nsGlobalWindowOuter; |
56 | class nsIInterfaceRequestor; |
57 | |
58 | namespace mozilla { |
59 | |
60 | enum UseCounter : int16_t; |
61 | enum class UseCounterWorker : int16_t; |
62 | |
63 | namespace dom { |
64 | class CustomElementReactionsStack; |
65 | class Document; |
66 | class EventTarget; |
67 | class MessageManagerGlobal; |
68 | class ObservableArrayProxyHandler; |
69 | class DedicatedWorkerGlobalScope; |
70 | template <typename KeyType, typename ValueType> |
71 | class Record; |
72 | class WindowProxyHolder; |
73 | |
74 | enum class DeprecatedOperations : uint16_t; |
75 | |
76 | nsresult UnwrapArgImpl(JSContext* cx, JS::Handle<JSObject*> src, |
77 | const nsIID& iid, void** ppArg); |
78 | |
79 | /** Convert a jsval to an XPCOM pointer. Caller must not assume that src will |
80 | keep the XPCOM pointer rooted. */ |
81 | template <class Interface> |
82 | inline nsresult UnwrapArg(JSContext* cx, JS::Handle<JSObject*> src, |
83 | Interface** ppArg) { |
84 | return UnwrapArgImpl(cx, src, NS_GET_TEMPLATE_IID(Interface)(Interface::template COMTypeInfo<Interface, void>::kIID ), |
85 | reinterpret_cast<void**>(ppArg)); |
86 | } |
87 | |
88 | nsresult UnwrapWindowProxyArg(JSContext* cx, JS::Handle<JSObject*> src, |
89 | WindowProxyHolder& ppArg); |
90 | |
91 | // Returns true if the JSClass is used for DOM objects. |
92 | inline bool IsDOMClass(const JSClass* clasp) { |
93 | return clasp->flags & JSCLASS_IS_DOMJSCLASS; |
94 | } |
95 | |
96 | // Return true if the JSClass is used for non-proxy DOM objects. |
97 | inline bool IsNonProxyDOMClass(const JSClass* clasp) { |
98 | return IsDOMClass(clasp) && clasp->isNativeObject(); |
99 | } |
100 | |
101 | // Returns true if the JSClass is used for DOM interface and interface |
102 | // prototype objects. |
103 | inline bool IsDOMIfaceAndProtoClass(const JSClass* clasp) { |
104 | return clasp->flags & JSCLASS_IS_DOMIFACEANDPROTOJSCLASSJSCLASS_USERBIT2; |
105 | } |
106 | |
107 | static_assert(DOM_OBJECT_SLOT0 == 0, |
108 | "DOM_OBJECT_SLOT doesn't match the proxy private slot. " |
109 | "Expect bad things"); |
110 | template <class T> |
111 | inline T* UnwrapDOMObject(JSObject* obj) { |
112 | MOZ_ASSERT(IsDOMClass(JS::GetClass(obj)),do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsDOMClass(JS::GetClass(obj)))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsDOMClass(JS::GetClass(obj) )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsDOMClass(JS::GetClass(obj))" " (" "Don't pass non-DOM objects to this function" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 113); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsDOMClass(JS::GetClass(obj))" ") (" "Don't pass non-DOM objects to this function" ")"); do { *((volatile int*)__null) = 113; __attribute__((nomerge)) :: abort(); } while (false); } } while (false) |
113 | "Don't pass non-DOM objects to this function")do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsDOMClass(JS::GetClass(obj)))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsDOMClass(JS::GetClass(obj) )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsDOMClass(JS::GetClass(obj))" " (" "Don't pass non-DOM objects to this function" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 113); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsDOMClass(JS::GetClass(obj))" ") (" "Don't pass non-DOM objects to this function" ")"); do { *((volatile int*)__null) = 113; __attribute__((nomerge)) :: abort(); } while (false); } } while (false); |
114 | |
115 | JS::Value val = JS::GetReservedSlot(obj, DOM_OBJECT_SLOT0); |
116 | return static_cast<T*>(val.toPrivate()); |
117 | } |
118 | |
119 | template <class T> |
120 | inline T* UnwrapPossiblyNotInitializedDOMObject(JSObject* obj) { |
121 | // This is used by the OjectMoved JSClass hook which can be called before |
122 | // JS_NewObject has returned and so before we have a chance to set |
123 | // DOM_OBJECT_SLOT to anything useful. |
124 | |
125 | MOZ_ASSERT(IsDOMClass(JS::GetClass(obj)),do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsDOMClass(JS::GetClass(obj)))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsDOMClass(JS::GetClass(obj) )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsDOMClass(JS::GetClass(obj))" " (" "Don't pass non-DOM objects to this function" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 126); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsDOMClass(JS::GetClass(obj))" ") (" "Don't pass non-DOM objects to this function" ")"); do { *((volatile int*)__null) = 126; __attribute__((nomerge)) :: abort(); } while (false); } } while (false) |
126 | "Don't pass non-DOM objects to this function")do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsDOMClass(JS::GetClass(obj)))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsDOMClass(JS::GetClass(obj) )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsDOMClass(JS::GetClass(obj))" " (" "Don't pass non-DOM objects to this function" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 126); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsDOMClass(JS::GetClass(obj))" ") (" "Don't pass non-DOM objects to this function" ")"); do { *((volatile int*)__null) = 126; __attribute__((nomerge)) :: abort(); } while (false); } } while (false); |
127 | |
128 | JS::Value val = JS::GetReservedSlot(obj, DOM_OBJECT_SLOT0); |
129 | if (val.isUndefined()) { |
130 | return nullptr; |
131 | } |
132 | return static_cast<T*>(val.toPrivate()); |
133 | } |
134 | |
135 | inline const DOMJSClass* GetDOMClass(const JSClass* clasp) { |
136 | return IsDOMClass(clasp) ? DOMJSClass::FromJSClass(clasp) : nullptr; |
137 | } |
138 | |
139 | inline const DOMJSClass* GetDOMClass(JSObject* obj) { |
140 | return GetDOMClass(JS::GetClass(obj)); |
141 | } |
142 | |
143 | inline nsISupports* UnwrapDOMObjectToISupports(JSObject* aObject) { |
144 | const DOMJSClass* clasp = GetDOMClass(aObject); |
145 | if (!clasp || !clasp->mDOMObjectIsISupports) { |
146 | return nullptr; |
147 | } |
148 | |
149 | return UnwrapPossiblyNotInitializedDOMObject<nsISupports>(aObject); |
150 | } |
151 | |
152 | inline bool IsDOMObject(JSObject* obj) { return IsDOMClass(JS::GetClass(obj)); } |
153 | |
154 | // There are two valid ways to use UNWRAP_OBJECT: Either obj needs to |
155 | // be a MutableHandle<JSObject*>, or value needs to be a strong-reference |
156 | // smart pointer type (OwningNonNull or RefPtr or nsCOMPtr), in which case obj |
157 | // can be anything that converts to JSObject*. |
158 | // |
159 | // This can't be used with Window, EventTarget, or Location as the "Interface" |
160 | // argument (and will fail a static_assert if you try to do that). Use |
161 | // UNWRAP_MAYBE_CROSS_ORIGIN_OBJECT to unwrap to those interfaces. |
162 | #define UNWRAP_OBJECT(Interface, obj, value)mozilla::dom::binding_detail::UnwrapObjectWithCrossOriginAsserts < mozilla::dom::prototypes::id::Interface, mozilla::dom::Interface_Binding ::NativeType>(obj, value) \ |
163 | mozilla::dom::binding_detail::UnwrapObjectWithCrossOriginAsserts< \ |
164 | mozilla::dom::prototypes::id::Interface, \ |
165 | mozilla::dom::Interface##_Binding::NativeType>(obj, value) |
166 | |
167 | // UNWRAP_MAYBE_CROSS_ORIGIN_OBJECT is just like UNWRAP_OBJECT but requires a |
168 | // JSContext in a Realm that represents "who is doing the unwrapping?" to |
169 | // properly unwrap the object. |
170 | #define UNWRAP_MAYBE_CROSS_ORIGIN_OBJECT(Interface, obj, value, cx)mozilla::dom::UnwrapObject<mozilla::dom::prototypes::id::Interface , mozilla::dom::Interface_Binding::NativeType>( obj, value , cx) \ |
171 | mozilla::dom::UnwrapObject<mozilla::dom::prototypes::id::Interface, \ |
172 | mozilla::dom::Interface##_Binding::NativeType>( \ |
173 | obj, value, cx) |
174 | |
175 | // Test whether the given object is an instance of the given interface. |
176 | #define IS_INSTANCE_OF(Interface, obj)mozilla::dom::IsInstanceOf<mozilla::dom::prototypes::id::Interface , mozilla::dom::Interface_Binding::NativeType>( obj) \ |
177 | mozilla::dom::IsInstanceOf<mozilla::dom::prototypes::id::Interface, \ |
178 | mozilla::dom::Interface##_Binding::NativeType>( \ |
179 | obj) |
180 | |
181 | // Unwrap the given non-wrapper object. This can be used with any obj that |
182 | // converts to JSObject*; as long as that JSObject* is live the return value |
183 | // will be valid. |
184 | #define UNWRAP_NON_WRAPPER_OBJECT(Interface, obj, value)mozilla::dom::UnwrapNonWrapperObject< mozilla::dom::prototypes ::id::Interface, mozilla::dom::Interface_Binding::NativeType> (obj, value) \ |
185 | mozilla::dom::UnwrapNonWrapperObject< \ |
186 | mozilla::dom::prototypes::id::Interface, \ |
187 | mozilla::dom::Interface##_Binding::NativeType>(obj, value) |
188 | |
189 | // Some callers don't want to set an exception when unwrapping fails |
190 | // (for example, overload resolution uses unwrapping to tell what sort |
191 | // of thing it's looking at). |
192 | // U must be something that a T* can be assigned to (e.g. T* or an RefPtr<T>). |
193 | // |
194 | // The obj argument will be mutated to point to CheckedUnwrap of itself if the |
195 | // passed-in value is not a DOM object and CheckedUnwrap succeeds. |
196 | // |
197 | // If mayBeWrapper is true, there are three valid ways to invoke |
198 | // UnwrapObjectInternal: Either obj needs to be a class wrapping a |
199 | // MutableHandle<JSObject*>, with an assignment operator that sets the handle to |
200 | // the given object, or U needs to be a strong-reference smart pointer type |
201 | // (OwningNonNull or RefPtr or nsCOMPtr), or the value being stored in "value" |
202 | // must not escape past being tested for falsiness immediately after the |
203 | // UnwrapObjectInternal call. |
204 | // |
205 | // If mayBeWrapper is false, obj can just be a JSObject*, and U anything that a |
206 | // T* can be assigned to. |
207 | // |
208 | // The cx arg is in practice allowed to be either nullptr or JSContext* or a |
209 | // BindingCallContext reference. If it's nullptr we will do a |
210 | // CheckedUnwrapStatic and it's the caller's responsibility to make sure they're |
211 | // not trying to work with Window or Location objects. Otherwise we'll do a |
212 | // CheckedUnwrapDynamic. This all only matters if mayBeWrapper is true; if it's |
213 | // false just pass nullptr for the cx arg. |
214 | namespace binding_detail { |
215 | template <class T, bool mayBeWrapper, typename U, typename V, typename CxType> |
216 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObjectInternal(V& obj, U& value, |
217 | prototypes::ID protoID, |
218 | uint32_t protoDepth, |
219 | const CxType& cx) { |
220 | static_assert(std::is_same_v<CxType, JSContext*> || |
221 | std::is_same_v<CxType, BindingCallContext> || |
222 | std::is_same_v<CxType, decltype(nullptr)>, |
223 | "Unexpected CxType"); |
224 | |
225 | /* First check to see whether we have a DOM object */ |
226 | const DOMJSClass* domClass = GetDOMClass(obj); |
227 | if (domClass) { |
228 | /* This object is a DOM object. Double-check that it is safely |
229 | castable to T by checking whether it claims to inherit from the |
230 | class identified by protoID. */ |
231 | if (domClass->mInterfaceChain[protoDepth] == protoID) { |
232 | value = UnwrapDOMObject<T>(obj); |
233 | return NS_OK; |
234 | } |
235 | } |
236 | |
237 | /* Maybe we have a security wrapper or outer window? */ |
238 | if (!mayBeWrapper || !js::IsWrapper(obj)) { |
239 | // For non-cross-origin-accessible methods and properties, remote object |
240 | // proxies should behave the same as opaque wrappers. |
241 | if (IsRemoteObjectProxy(obj)) { |
242 | return NS_ERROR_XPC_SECURITY_MANAGER_VETO; |
243 | } |
244 | |
245 | /* Not a DOM object, not a wrapper, just bail */ |
246 | return NS_ERROR_XPC_BAD_CONVERT_JS; |
247 | } |
248 | |
249 | JSObject* unwrappedObj; |
250 | if (std::is_same_v<CxType, decltype(nullptr)>) { |
251 | unwrappedObj = js::CheckedUnwrapStatic(obj); |
252 | } else { |
253 | unwrappedObj = |
254 | js::CheckedUnwrapDynamic(obj, cx, /* stopAtWindowProxy = */ false); |
255 | } |
256 | if (!unwrappedObj) { |
257 | return NS_ERROR_XPC_SECURITY_MANAGER_VETO; |
258 | } |
259 | |
260 | if (std::is_same_v<CxType, decltype(nullptr)>) { |
261 | // We might still have a windowproxy here. But it shouldn't matter, because |
262 | // that's not what the caller is looking for, so we're going to fail out |
263 | // anyway below once we do the recursive call to ourselves with wrapper |
264 | // unwrapping disabled. |
265 | MOZ_ASSERT(!js::IsWrapper(unwrappedObj) || js::IsWindowProxy(unwrappedObj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!js::IsWrapper(unwrappedObj) || js::IsWindowProxy(unwrappedObj ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(!js::IsWrapper(unwrappedObj) || js::IsWindowProxy(unwrappedObj )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("!js::IsWrapper(unwrappedObj) || js::IsWindowProxy(unwrappedObj)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 265); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!js::IsWrapper(unwrappedObj) || js::IsWindowProxy(unwrappedObj)" ")"); do { *((volatile int*)__null) = 265; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
266 | } else { |
267 | // We shouldn't have a wrapper by now. |
268 | MOZ_ASSERT(!js::IsWrapper(unwrappedObj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!js::IsWrapper(unwrappedObj))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!js::IsWrapper(unwrappedObj) ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "!js::IsWrapper(unwrappedObj)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 268); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!js::IsWrapper(unwrappedObj)" ")"); do { *((volatile int*)__null) = 268; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
269 | } |
270 | |
271 | // Recursive call is OK, because now we're using false for mayBeWrapper and |
272 | // we never reach this code if that boolean is false, so can't keep calling |
273 | // ourselves. |
274 | // |
275 | // Unwrap into a temporary pointer, because in general unwrapping into |
276 | // something of type U might trigger GC (e.g. release the value currently |
277 | // stored in there, with arbitrary consequences) and invalidate the |
278 | // "unwrappedObj" pointer. |
279 | T* tempValue = nullptr; |
280 | nsresult rv = UnwrapObjectInternal<T, false>(unwrappedObj, tempValue, protoID, |
281 | protoDepth, nullptr); |
282 | if (NS_SUCCEEDED(rv)((bool)(__builtin_expect(!!(!NS_FAILED_impl(rv)), 1)))) { |
283 | // Suppress a hazard related to keeping tempValue alive across |
284 | // UnwrapObjectInternal, because the analysis can't tell that this function |
285 | // will not GC if maybeWrapped=False and we've already gone through a level |
286 | // of unwrapping so unwrappedObj will be !IsWrapper. |
287 | JS::AutoSuppressGCAnalysis suppress; |
288 | |
289 | // It's very important to not update "obj" with the "unwrappedObj" value |
290 | // until we know the unwrap has succeeded. Otherwise, in a situation in |
291 | // which we have an overload of object and primitive we could end up |
292 | // converting to the primitive from the unwrappedObj, whereas we want to do |
293 | // it from the original object. |
294 | obj = unwrappedObj; |
295 | // And now assign to "value"; at this point we don't care if a GC happens |
296 | // and invalidates unwrappedObj. |
297 | value = tempValue; |
298 | return NS_OK; |
299 | } |
300 | |
301 | /* It's the wrong sort of DOM object */ |
302 | return NS_ERROR_XPC_BAD_CONVERT_JS; |
303 | } |
304 | |
305 | struct MutableObjectHandleWrapper { |
306 | explicit MutableObjectHandleWrapper(JS::MutableHandle<JSObject*> aHandle) |
307 | : mHandle(aHandle) {} |
308 | |
309 | void operator=(JSObject* aObject) { |
310 | MOZ_ASSERT(aObject)do { static_assert( mozilla::detail::AssertionConditionType< decltype(aObject)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aObject))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("aObject", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 310); AnnotateMozCrashReason("MOZ_ASSERT" "(" "aObject" ")" ); do { *((volatile int*)__null) = 310; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
311 | mHandle.set(aObject); |
312 | } |
313 | |
314 | operator JSObject*() const { return mHandle; } |
315 | |
316 | private: |
317 | JS::MutableHandle<JSObject*> mHandle; |
318 | }; |
319 | |
320 | struct MutableValueHandleWrapper { |
321 | explicit MutableValueHandleWrapper(JS::MutableHandle<JS::Value> aHandle) |
322 | : mHandle(aHandle) {} |
323 | |
324 | void operator=(JSObject* aObject) { |
325 | MOZ_ASSERT(aObject)do { static_assert( mozilla::detail::AssertionConditionType< decltype(aObject)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aObject))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("aObject", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 325); AnnotateMozCrashReason("MOZ_ASSERT" "(" "aObject" ")" ); do { *((volatile int*)__null) = 325; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
326 | #ifdef ENABLE_RECORD_TUPLE |
327 | MOZ_ASSERT(!js::gc::MaybeForwardedIsExtendedPrimitive(*aObject))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!js::gc::MaybeForwardedIsExtendedPrimitive(*aObject) )>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(!js::gc::MaybeForwardedIsExtendedPrimitive(*aObject) ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "!js::gc::MaybeForwardedIsExtendedPrimitive(*aObject)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 327); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!js::gc::MaybeForwardedIsExtendedPrimitive(*aObject)" ")"); do { *((volatile int*)__null) = 327; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
328 | #endif |
329 | mHandle.setObject(*aObject); |
330 | } |
331 | |
332 | operator JSObject*() const { return &mHandle.toObject(); } |
333 | |
334 | private: |
335 | JS::MutableHandle<JS::Value> mHandle; |
336 | }; |
337 | |
338 | } // namespace binding_detail |
339 | |
340 | // UnwrapObject overloads that ensure we have a MutableHandle to keep it alive. |
341 | template <prototypes::ID PrototypeID, class T, typename U, typename CxType> |
342 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObject(JS::MutableHandle<JSObject*> obj, |
343 | U& value, const CxType& cx) { |
344 | binding_detail::MutableObjectHandleWrapper wrapper(obj); |
345 | return binding_detail::UnwrapObjectInternal<T, true>( |
346 | wrapper, value, PrototypeID, PrototypeTraits<PrototypeID>::Depth, cx); |
347 | } |
348 | |
349 | template <prototypes::ID PrototypeID, class T, typename U, typename CxType> |
350 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObject(JS::MutableHandle<JS::Value> obj, |
351 | U& value, const CxType& cx) { |
352 | MOZ_ASSERT(obj.isObject())do { static_assert( mozilla::detail::AssertionConditionType< decltype(obj.isObject())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(obj.isObject()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("obj.isObject()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 352); AnnotateMozCrashReason("MOZ_ASSERT" "(" "obj.isObject()" ")"); do { *((volatile int*)__null) = 352; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
353 | binding_detail::MutableValueHandleWrapper wrapper(obj); |
354 | return binding_detail::UnwrapObjectInternal<T, true>( |
355 | wrapper, value, PrototypeID, PrototypeTraits<PrototypeID>::Depth, cx); |
356 | } |
357 | |
358 | // UnwrapObject overloads that ensure we have a strong ref to keep it alive. |
359 | template <prototypes::ID PrototypeID, class T, typename U, typename CxType> |
360 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObject(JSObject* obj, RefPtr<U>& value, |
361 | const CxType& cx) { |
362 | return binding_detail::UnwrapObjectInternal<T, true>( |
363 | obj, value, PrototypeID, PrototypeTraits<PrototypeID>::Depth, cx); |
364 | } |
365 | |
366 | template <prototypes::ID PrototypeID, class T, typename U, typename CxType> |
367 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObject(JSObject* obj, nsCOMPtr<U>& value, |
368 | const CxType& cx) { |
369 | return binding_detail::UnwrapObjectInternal<T, true>( |
370 | obj, value, PrototypeID, PrototypeTraits<PrototypeID>::Depth, cx); |
371 | } |
372 | |
373 | template <prototypes::ID PrototypeID, class T, typename U, typename CxType> |
374 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObject(JSObject* obj, OwningNonNull<U>& value, |
375 | const CxType& cx) { |
376 | return binding_detail::UnwrapObjectInternal<T, true>( |
377 | obj, value, PrototypeID, PrototypeTraits<PrototypeID>::Depth, cx); |
378 | } |
379 | |
380 | template <prototypes::ID PrototypeID, class T, typename U, typename CxType> |
381 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObject(JSObject* obj, NonNull<U>& value, |
382 | const CxType& cx) { |
383 | return binding_detail::UnwrapObjectInternal<T, true>( |
384 | obj, value, PrototypeID, PrototypeTraits<PrototypeID>::Depth, cx); |
385 | } |
386 | |
387 | // An UnwrapObject overload that just calls one of the JSObject* ones. |
388 | template <prototypes::ID PrototypeID, class T, typename U, typename CxType> |
389 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObject(JS::Handle<JS::Value> obj, U& value, |
390 | const CxType& cx) { |
391 | MOZ_ASSERT(obj.isObject())do { static_assert( mozilla::detail::AssertionConditionType< decltype(obj.isObject())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(obj.isObject()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("obj.isObject()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 391); AnnotateMozCrashReason("MOZ_ASSERT" "(" "obj.isObject()" ")"); do { *((volatile int*)__null) = 391; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
392 | return UnwrapObject<PrototypeID, T>(&obj.toObject(), value, cx); |
393 | } |
394 | |
395 | template <prototypes::ID PrototypeID, class T, typename U, typename CxType> |
396 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObject(JS::Handle<JS::Value> obj, |
397 | NonNull<U>& value, const CxType& cx) { |
398 | MOZ_ASSERT(obj.isObject())do { static_assert( mozilla::detail::AssertionConditionType< decltype(obj.isObject())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(obj.isObject()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("obj.isObject()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 398); AnnotateMozCrashReason("MOZ_ASSERT" "(" "obj.isObject()" ")"); do { *((volatile int*)__null) = 398; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
399 | return UnwrapObject<PrototypeID, T>(&obj.toObject(), value, cx); |
400 | } |
401 | |
402 | template <prototypes::ID PrototypeID> |
403 | MOZ_ALWAYS_INLINEinline void AssertStaticUnwrapOK() { |
404 | static_assert(PrototypeID != prototypes::id::Window, |
405 | "Can't do static unwrap of WindowProxy; use " |
406 | "UNWRAP_MAYBE_CROSS_ORIGIN_OBJECT or a cross-origin-object " |
407 | "aware version of IS_INSTANCE_OF"); |
408 | static_assert(PrototypeID != prototypes::id::EventTarget, |
409 | "Can't do static unwrap of WindowProxy (which an EventTarget " |
410 | "might be); use UNWRAP_MAYBE_CROSS_ORIGIN_OBJECT or a " |
411 | "cross-origin-object aware version of IS_INSTANCE_OF"); |
412 | static_assert(PrototypeID != prototypes::id::Location, |
413 | "Can't do static unwrap of Location; use " |
414 | "UNWRAP_MAYBE_CROSS_ORIGIN_OBJECT or a cross-origin-object " |
415 | "aware version of IS_INSTANCE_OF"); |
416 | } |
417 | |
418 | namespace binding_detail { |
419 | // This function is just here so we can do some static asserts in a centralized |
420 | // place instead of putting them in every single UnwrapObject overload. |
421 | template <prototypes::ID PrototypeID, class T, typename U, typename V> |
422 | MOZ_ALWAYS_INLINEinline nsresult UnwrapObjectWithCrossOriginAsserts(V&& obj, |
423 | U& value) { |
424 | AssertStaticUnwrapOK<PrototypeID>(); |
425 | return UnwrapObject<PrototypeID, T>(obj, value, nullptr); |
426 | } |
427 | } // namespace binding_detail |
428 | |
429 | template <prototypes::ID PrototypeID, class T> |
430 | MOZ_ALWAYS_INLINEinline bool IsInstanceOf(JSObject* obj) { |
431 | AssertStaticUnwrapOK<PrototypeID>(); |
432 | void* ignored; |
433 | nsresult unwrapped = binding_detail::UnwrapObjectInternal<T, true>( |
434 | obj, ignored, PrototypeID, PrototypeTraits<PrototypeID>::Depth, nullptr); |
435 | return NS_SUCCEEDED(unwrapped)((bool)(__builtin_expect(!!(!NS_FAILED_impl(unwrapped)), 1))); |
436 | } |
437 | |
438 | template <prototypes::ID PrototypeID, class T, typename U> |
439 | MOZ_ALWAYS_INLINEinline nsresult UnwrapNonWrapperObject(JSObject* obj, U& value) { |
440 | MOZ_ASSERT(!js::IsWrapper(obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!js::IsWrapper(obj))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!js::IsWrapper(obj)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!js::IsWrapper(obj)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 440); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!js::IsWrapper(obj)" ")"); do { *((volatile int*)__null) = 440; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
441 | return binding_detail::UnwrapObjectInternal<T, false>( |
442 | obj, value, PrototypeID, PrototypeTraits<PrototypeID>::Depth, nullptr); |
443 | } |
444 | |
445 | MOZ_ALWAYS_INLINEinline bool IsConvertibleToDictionary(JS::Handle<JS::Value> val) { |
446 | return val.isNullOrUndefined() || val.isObject(); |
447 | } |
448 | |
449 | // The items in the protoAndIfaceCache are indexed by the prototypes::id::ID, |
450 | // constructors::id::ID and namedpropertiesobjects::id::ID enums, in that order. |
451 | // The end of the prototype objects should be the start of the interface |
452 | // objects, and the end of the interface objects should be the start of the |
453 | // named properties objects. |
454 | static_assert((size_t)constructors::id::_ID_Start == |
455 | (size_t)prototypes::id::_ID_Count && |
456 | (size_t)namedpropertiesobjects::id::_ID_Start == |
457 | (size_t)constructors::id::_ID_Count, |
458 | "Overlapping or discontiguous indexes."); |
459 | const size_t kProtoAndIfaceCacheCount = namedpropertiesobjects::id::_ID_Count; |
460 | |
461 | class ProtoAndIfaceCache { |
462 | // The caching strategy we use depends on what sort of global we're dealing |
463 | // with. For a window-like global, we want everything to be as fast as |
464 | // possible, so we use a flat array, indexed by prototype/constructor ID. |
465 | // For everything else (e.g. globals for JSMs), space is more important than |
466 | // speed, so we use a two-level lookup table. |
467 | |
468 | class ArrayCache |
469 | : public Array<JS::Heap<JSObject*>, kProtoAndIfaceCacheCount> { |
470 | public: |
471 | bool HasEntryInSlot(size_t i) { |
472 | // Do an explicit call to the Heap<…> bool conversion operator. Because |
473 | // that operator is marked explicit we'd otherwise end up doing an |
474 | // implicit cast to JSObject* first, causing an unnecessary call to |
475 | // exposeToActiveJS(). |
476 | return bool((*this)[i]); |
477 | } |
478 | |
479 | JS::Heap<JSObject*>& EntrySlotOrCreate(size_t i) { return (*this)[i]; } |
480 | |
481 | JS::Heap<JSObject*>& EntrySlotMustExist(size_t i) { return (*this)[i]; } |
482 | |
483 | void Trace(JSTracer* aTracer) { |
484 | for (size_t i = 0; i < ArrayLength(*this); ++i) { |
485 | JS::TraceEdge(aTracer, &(*this)[i], "protoAndIfaceCache[i]"); |
486 | } |
487 | } |
488 | |
489 | size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) { |
490 | return aMallocSizeOf(this); |
491 | } |
492 | }; |
493 | |
494 | class PageTableCache { |
495 | public: |
496 | PageTableCache() { memset(mPages.begin(), 0, sizeof(mPages)); } |
497 | |
498 | ~PageTableCache() { |
499 | for (size_t i = 0; i < ArrayLength(mPages); ++i) { |
500 | delete mPages[i]; |
501 | } |
502 | } |
503 | |
504 | bool HasEntryInSlot(size_t i) { |
505 | MOZ_ASSERT(i < kProtoAndIfaceCacheCount)do { static_assert( mozilla::detail::AssertionConditionType< decltype(i < kProtoAndIfaceCacheCount)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(i < kProtoAndIfaceCacheCount ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "i < kProtoAndIfaceCacheCount", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 505); AnnotateMozCrashReason("MOZ_ASSERT" "(" "i < kProtoAndIfaceCacheCount" ")"); do { *((volatile int*)__null) = 505; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
506 | size_t pageIndex = i / kPageSize; |
507 | size_t leafIndex = i % kPageSize; |
508 | Page* p = mPages[pageIndex]; |
509 | if (!p) { |
510 | return false; |
511 | } |
512 | // Do an explicit call to the Heap<…> bool conversion operator. Because |
513 | // that operator is marked explicit we'd otherwise end up doing an |
514 | // implicit cast to JSObject* first, causing an unnecessary call to |
515 | // exposeToActiveJS(). |
516 | return bool((*p)[leafIndex]); |
517 | } |
518 | |
519 | JS::Heap<JSObject*>& EntrySlotOrCreate(size_t i) { |
520 | MOZ_ASSERT(i < kProtoAndIfaceCacheCount)do { static_assert( mozilla::detail::AssertionConditionType< decltype(i < kProtoAndIfaceCacheCount)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(i < kProtoAndIfaceCacheCount ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "i < kProtoAndIfaceCacheCount", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 520); AnnotateMozCrashReason("MOZ_ASSERT" "(" "i < kProtoAndIfaceCacheCount" ")"); do { *((volatile int*)__null) = 520; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
521 | size_t pageIndex = i / kPageSize; |
522 | size_t leafIndex = i % kPageSize; |
523 | Page* p = mPages[pageIndex]; |
524 | if (!p) { |
525 | p = new Page; |
526 | mPages[pageIndex] = p; |
527 | } |
528 | return (*p)[leafIndex]; |
529 | } |
530 | |
531 | JS::Heap<JSObject*>& EntrySlotMustExist(size_t i) { |
532 | MOZ_ASSERT(i < kProtoAndIfaceCacheCount)do { static_assert( mozilla::detail::AssertionConditionType< decltype(i < kProtoAndIfaceCacheCount)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(i < kProtoAndIfaceCacheCount ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "i < kProtoAndIfaceCacheCount", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 532); AnnotateMozCrashReason("MOZ_ASSERT" "(" "i < kProtoAndIfaceCacheCount" ")"); do { *((volatile int*)__null) = 532; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
533 | size_t pageIndex = i / kPageSize; |
534 | size_t leafIndex = i % kPageSize; |
535 | Page* p = mPages[pageIndex]; |
536 | MOZ_ASSERT(p)do { static_assert( mozilla::detail::AssertionConditionType< decltype(p)>::isValid, "invalid assertion condition"); if ( (__builtin_expect(!!(!(!!(p))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("p", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 536); AnnotateMozCrashReason("MOZ_ASSERT" "(" "p" ")"); do { *((volatile int*)__null) = 536; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); |
537 | return (*p)[leafIndex]; |
538 | } |
539 | |
540 | void Trace(JSTracer* trc) { |
541 | for (size_t i = 0; i < ArrayLength(mPages); ++i) { |
542 | Page* p = mPages[i]; |
543 | if (p) { |
544 | for (size_t j = 0; j < ArrayLength(*p); ++j) { |
545 | JS::TraceEdge(trc, &(*p)[j], "protoAndIfaceCache[i]"); |
546 | } |
547 | } |
548 | } |
549 | } |
550 | |
551 | size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) { |
552 | size_t n = aMallocSizeOf(this); |
553 | for (size_t i = 0; i < ArrayLength(mPages); ++i) { |
554 | n += aMallocSizeOf(mPages[i]); |
555 | } |
556 | return n; |
557 | } |
558 | |
559 | private: |
560 | static const size_t kPageSize = 16; |
561 | typedef Array<JS::Heap<JSObject*>, kPageSize> Page; |
562 | static const size_t kNPages = |
563 | kProtoAndIfaceCacheCount / kPageSize + |
564 | size_t(bool(kProtoAndIfaceCacheCount % kPageSize)); |
565 | Array<Page*, kNPages> mPages; |
566 | }; |
567 | |
568 | public: |
569 | enum Kind { WindowLike, NonWindowLike }; |
570 | |
571 | explicit ProtoAndIfaceCache(Kind aKind) : mKind(aKind) { |
572 | MOZ_COUNT_CTOR(ProtoAndIfaceCache)do { static_assert(std::is_class_v<ProtoAndIfaceCache>, "Token '" "ProtoAndIfaceCache" "' is not a class type."); static_assert (!std::is_base_of<nsISupports, ProtoAndIfaceCache>::value , "nsISupports classes don't need to call MOZ_COUNT_CTOR or " "MOZ_COUNT_DTOR");; NS_LogCtor((void*)this, "ProtoAndIfaceCache" , sizeof(*this)); } while (0); |
573 | if (aKind == WindowLike) { |
574 | mArrayCache = new ArrayCache(); |
575 | } else { |
576 | mPageTableCache = new PageTableCache(); |
577 | } |
578 | } |
579 | |
580 | ~ProtoAndIfaceCache() { |
581 | if (mKind == WindowLike) { |
582 | delete mArrayCache; |
583 | } else { |
584 | delete mPageTableCache; |
585 | } |
586 | MOZ_COUNT_DTOR(ProtoAndIfaceCache)do { static_assert(std::is_class_v<ProtoAndIfaceCache>, "Token '" "ProtoAndIfaceCache" "' is not a class type."); static_assert (!std::is_base_of<nsISupports, ProtoAndIfaceCache>::value , "nsISupports classes don't need to call MOZ_COUNT_CTOR or " "MOZ_COUNT_DTOR");; NS_LogDtor((void*)this, "ProtoAndIfaceCache" , sizeof(*this)); } while (0); |
587 | } |
588 | |
589 | #define FORWARD_OPERATION(opName, args) \ |
590 | do { \ |
591 | if (mKind == WindowLike) { \ |
592 | return mArrayCache->opName args; \ |
593 | } else { \ |
594 | return mPageTableCache->opName args; \ |
595 | } \ |
596 | } while (0) |
597 | |
598 | // Return whether slot i contains an object. This doesn't return the object |
599 | // itself because in practice consumers just want to know whether it's there |
600 | // or not, and that doesn't require barriering, which returning the object |
601 | // pointer does. |
602 | bool HasEntryInSlot(size_t i) { FORWARD_OPERATION(HasEntryInSlot, (i)); } |
603 | |
604 | // Return a reference to slot i, creating it if necessary. There |
605 | // may not be an object in the returned slot. |
606 | JS::Heap<JSObject*>& EntrySlotOrCreate(size_t i) { |
607 | FORWARD_OPERATION(EntrySlotOrCreate, (i)); |
608 | } |
609 | |
610 | // Return a reference to slot i, which is guaranteed to already |
611 | // exist. There may not be an object in the slot, if prototype and |
612 | // constructor initialization for one of our bindings failed. |
613 | JS::Heap<JSObject*>& EntrySlotMustExist(size_t i) { |
614 | FORWARD_OPERATION(EntrySlotMustExist, (i)); |
615 | } |
616 | |
617 | void Trace(JSTracer* aTracer) { FORWARD_OPERATION(Trace, (aTracer)); } |
618 | |
619 | size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) { |
620 | size_t n = aMallocSizeOf(this); |
621 | n += (mKind == WindowLike |
622 | ? mArrayCache->SizeOfIncludingThis(aMallocSizeOf) |
623 | : mPageTableCache->SizeOfIncludingThis(aMallocSizeOf)); |
624 | return n; |
625 | } |
626 | #undef FORWARD_OPERATION |
627 | |
628 | private: |
629 | union { |
630 | ArrayCache* mArrayCache; |
631 | PageTableCache* mPageTableCache; |
632 | }; |
633 | Kind mKind; |
634 | }; |
635 | |
636 | inline void AllocateProtoAndIfaceCache(JSObject* obj, |
637 | ProtoAndIfaceCache::Kind aKind) { |
638 | MOZ_ASSERT(JS::GetClass(obj)->flags & JSCLASS_DOM_GLOBAL)do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS::GetClass(obj)->flags & JSCLASS_USERBIT1)> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(JS::GetClass(obj)->flags & JSCLASS_USERBIT1)) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS::GetClass(obj)->flags & JSCLASS_USERBIT1" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 638); AnnotateMozCrashReason("MOZ_ASSERT" "(" "JS::GetClass(obj)->flags & JSCLASS_USERBIT1" ")"); do { *((volatile int*)__null) = 638; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
639 | MOZ_ASSERT(JS::GetReservedSlot(obj, DOM_PROTOTYPE_SLOT).isUndefined())do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS::GetReservedSlot(obj, JSCLASS_GLOBAL_SLOT_COUNT). isUndefined())>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(JS::GetReservedSlot(obj, JSCLASS_GLOBAL_SLOT_COUNT ).isUndefined()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("JS::GetReservedSlot(obj, JSCLASS_GLOBAL_SLOT_COUNT).isUndefined()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 639); AnnotateMozCrashReason("MOZ_ASSERT" "(" "JS::GetReservedSlot(obj, JSCLASS_GLOBAL_SLOT_COUNT).isUndefined()" ")"); do { *((volatile int*)__null) = 639; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
640 | |
641 | ProtoAndIfaceCache* protoAndIfaceCache = new ProtoAndIfaceCache(aKind); |
642 | |
643 | JS::SetReservedSlot(obj, DOM_PROTOTYPE_SLOTJSCLASS_GLOBAL_SLOT_COUNT, |
644 | JS::PrivateValue(protoAndIfaceCache)); |
645 | } |
646 | |
647 | #ifdef DEBUG1 |
648 | struct VerifyTraceProtoAndIfaceCacheCalledTracer : public JS::CallbackTracer { |
649 | bool ok; |
650 | |
651 | explicit VerifyTraceProtoAndIfaceCacheCalledTracer(JSContext* cx) |
652 | : JS::CallbackTracer(cx, JS::TracerKind::VerifyTraceProtoAndIface), |
653 | ok(false) {} |
654 | |
655 | void onChild(JS::GCCellPtr, const char* name) override { |
656 | // We don't do anything here, we only want to verify that |
657 | // TraceProtoAndIfaceCache was called. |
658 | } |
659 | }; |
660 | #endif |
661 | |
662 | inline void TraceProtoAndIfaceCache(JSTracer* trc, JSObject* obj) { |
663 | MOZ_ASSERT(JS::GetClass(obj)->flags & JSCLASS_DOM_GLOBAL)do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS::GetClass(obj)->flags & JSCLASS_USERBIT1)> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(JS::GetClass(obj)->flags & JSCLASS_USERBIT1)) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS::GetClass(obj)->flags & JSCLASS_USERBIT1" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 663); AnnotateMozCrashReason("MOZ_ASSERT" "(" "JS::GetClass(obj)->flags & JSCLASS_USERBIT1" ")"); do { *((volatile int*)__null) = 663; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
664 | |
665 | #ifdef DEBUG1 |
666 | if (trc->kind() == JS::TracerKind::VerifyTraceProtoAndIface) { |
667 | // We don't do anything here, we only want to verify that |
668 | // TraceProtoAndIfaceCache was called. |
669 | static_cast<VerifyTraceProtoAndIfaceCacheCalledTracer*>(trc)->ok = true; |
670 | return; |
671 | } |
672 | #endif |
673 | |
674 | if (!DOMGlobalHasProtoAndIFaceCache(obj)) return; |
675 | ProtoAndIfaceCache* protoAndIfaceCache = GetProtoAndIfaceCache(obj); |
676 | protoAndIfaceCache->Trace(trc); |
677 | } |
678 | |
679 | inline void DestroyProtoAndIfaceCache(JSObject* obj) { |
680 | MOZ_ASSERT(JS::GetClass(obj)->flags & JSCLASS_DOM_GLOBAL)do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS::GetClass(obj)->flags & JSCLASS_USERBIT1)> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(JS::GetClass(obj)->flags & JSCLASS_USERBIT1)) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS::GetClass(obj)->flags & JSCLASS_USERBIT1" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 680); AnnotateMozCrashReason("MOZ_ASSERT" "(" "JS::GetClass(obj)->flags & JSCLASS_USERBIT1" ")"); do { *((volatile int*)__null) = 680; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
681 | |
682 | if (!DOMGlobalHasProtoAndIFaceCache(obj)) { |
683 | return; |
684 | } |
685 | |
686 | ProtoAndIfaceCache* protoAndIfaceCache = GetProtoAndIfaceCache(obj); |
687 | |
688 | delete protoAndIfaceCache; |
689 | } |
690 | |
691 | /** |
692 | * Add constants to an object. |
693 | */ |
694 | bool DefineConstants(JSContext* cx, JS::Handle<JSObject*> obj, |
695 | const ConstantSpec* cs); |
696 | |
697 | struct JSNativeHolder { |
698 | JSNative mNative; |
699 | const NativePropertyHooks* mPropertyHooks; |
700 | }; |
701 | |
702 | // Struct for holding information for WebIDL interface objects (which are |
703 | // function objects). A pointer to this struct is held in the first reserved |
704 | // slot of the function object. |
705 | struct DOMInterfaceInfo { |
706 | JSNativeHolder nativeHolder; |
707 | |
708 | ProtoHandleGetter mGetParentProto; |
709 | |
710 | const prototypes::ID mPrototypeID; // uint16_t |
711 | const uint32_t mDepth; |
712 | |
713 | // Boolean indicating whether this object wants a isInstance property |
714 | // pointing to InterfaceIsInstance defined on it. Only ever true for |
715 | // interfaces. |
716 | bool wantsInterfaceIsInstance; |
717 | }; |
718 | |
719 | struct LegacyFactoryFunction { |
720 | const char* mName; |
721 | const JSNativeHolder mHolder; |
722 | unsigned mNargs; |
723 | }; |
724 | |
725 | namespace binding_detail { |
726 | |
727 | void CreateInterfaceObjects( |
728 | JSContext* cx, JS::Handle<JSObject*> global, |
729 | JS::Handle<JSObject*> protoProto, const DOMIfaceAndProtoJSClass* protoClass, |
730 | JS::Heap<JSObject*>* protoCache, JS::Handle<JSObject*> interfaceProto, |
731 | const DOMInterfaceInfo* interfaceInfo, unsigned ctorNargs, |
732 | bool isConstructorChromeOnly, |
733 | const Span<const LegacyFactoryFunction>& legacyFactoryFunctions, |
734 | JS::Heap<JSObject*>* constructorCache, const NativeProperties* properties, |
735 | const NativeProperties* chromeOnlyProperties, const char* name, |
736 | bool defineOnGlobal, const char* const* unscopableNames, bool isGlobal, |
737 | const char* const* legacyWindowAliases); |
738 | |
739 | } // namespace binding_detail |
740 | |
741 | // clang-format off |
742 | /* |
743 | * Create a DOM interface object (if constructorClass is non-null) and/or a |
744 | * DOM interface prototype object (if protoClass is non-null). |
745 | * |
746 | * global is used as the parent of the interface object and the interface |
747 | * prototype object |
748 | * protoProto is the prototype to use for the interface prototype object. |
749 | * protoClass is the JSClass to use for the interface prototype object. |
750 | * This is null if we should not create an interface prototype |
751 | * object. |
752 | * protoCache a pointer to a JSObject pointer where we should cache the |
753 | * interface prototype object. This must be null if protoClass is and |
754 | * vice versa. |
755 | * interfaceProto is the prototype to use for the interface object. This can be |
756 | * null if interfaceInfo is null (as in, if we're not creating an |
757 | * interface object at all). |
758 | * interfaceInfo is the info to use for the interface object. This can be null |
759 | * if we're not creating an interface object. |
760 | * ctorNargs is the length of the constructor function; 0 if no constructor |
761 | * isConstructorChromeOnly if true, the constructor is ChromeOnly. |
762 | * legacyFactoryFunctions the legacy factory functions (can be empty) |
763 | * constructorCache a pointer to a JSObject pointer where we should cache the |
764 | * interface object. This must be null if both constructorClass |
765 | * and constructor are null, and non-null otherwise. |
766 | * properties contains the methods, attributes and constants to be defined on |
767 | * objects in any compartment. |
768 | * chromeProperties contains the methods, attributes and constants to be defined |
769 | * on objects in chrome compartments. This must be null if the |
770 | * interface doesn't have any ChromeOnly properties or if the |
771 | * object is being created in non-chrome compartment. |
772 | * name the name to use for 1) the WebIDL class string, which is the value |
773 | * that's used for @@toStringTag, 2) the name property for interface |
774 | * objects and 3) the property on the global object that would be set to |
775 | * the interface object. In general this is the interface identifier. |
776 | * LegacyNamespace would expect something different for 1), but we don't |
777 | * support that. The class string for default iterator objects is not |
778 | * usable as 2) or 3), but default iterator objects don't have an interface |
779 | * object. |
780 | * defineOnGlobal controls whether properties should be defined on the given |
781 | * global for the interface object (if any) and named |
782 | * constructors (if any) for this interface. This can be |
783 | * false in situations where we want the properties to only |
784 | * appear on privileged Xrays but not on the unprivileged |
785 | * underlying global. |
786 | * unscopableNames if not null it points to a null-terminated list of const |
787 | * char* names of the unscopable properties for this interface. |
788 | * isGlobal if true, we're creating interface objects for a [Global] interface, |
789 | * and hence shouldn't define properties on the prototype object. |
790 | * legacyWindowAliases if not null it points to a null-terminated list of const |
791 | * char* names of the legacy window aliases for this |
792 | * interface. |
793 | * |
794 | * At least one of protoClass or interfaceInfo should be non-null. If |
795 | * interfaceInfo is non-null, the resulting interface object will be defined on |
796 | * the given global with property name |name|, which must also be non-null. |
797 | */ |
798 | // clang-format on |
799 | template <size_t N> |
800 | inline void CreateInterfaceObjects( |
801 | JSContext* cx, JS::Handle<JSObject*> global, |
802 | JS::Handle<JSObject*> protoProto, const DOMIfaceAndProtoJSClass* protoClass, |
803 | JS::Heap<JSObject*>* protoCache, JS::Handle<JSObject*> interfaceProto, |
804 | const DOMInterfaceInfo* interfaceInfo, unsigned ctorNargs, |
805 | bool isConstructorChromeOnly, |
806 | const Span<const LegacyFactoryFunction, N>& legacyFactoryFunctions, |
807 | JS::Heap<JSObject*>* constructorCache, const NativeProperties* properties, |
808 | const NativeProperties* chromeOnlyProperties, const char* name, |
809 | bool defineOnGlobal, const char* const* unscopableNames, bool isGlobal, |
810 | const char* const* legacyWindowAliases) { |
811 | // We're using 1 slot for the interface info already, so we only have |
812 | // INTERFACE_OBJECT_MAX_SLOTS - 1 slots for legacy factory functions. |
813 | static_assert(N <= INTERFACE_OBJECT_MAX_SLOTS3 - |
814 | INTERFACE_OBJECT_FIRST_LEGACY_FACTORY_FUNCTION); |
815 | |
816 | return binding_detail::CreateInterfaceObjects( |
817 | cx, global, protoProto, protoClass, protoCache, interfaceProto, |
818 | interfaceInfo, ctorNargs, isConstructorChromeOnly, legacyFactoryFunctions, |
819 | constructorCache, properties, chromeOnlyProperties, name, defineOnGlobal, |
820 | unscopableNames, isGlobal, legacyWindowAliases); |
821 | } |
822 | |
823 | /* |
824 | * Create a namespace object. |
825 | * |
826 | * global the global on which to install a property named with name pointing to |
827 | * the namespace object if defineOnGlobal is true. |
828 | * namespaceProto is the prototype to use for the namespace object. |
829 | * namespaceClass is the JSClass to use for the namespace object. |
830 | * namespaceCache a pointer to a JSObject pointer where we should cache the |
831 | * namespace object. |
832 | * properties contains the methods, attributes and constants to be defined on |
833 | * objects in any compartment. |
834 | * chromeProperties contains the methods, attributes and constants to be defined |
835 | * on objects in chrome compartments. This must be null if the |
836 | * namespace doesn't have any ChromeOnly properties or if the |
837 | * object is being created in non-chrome compartment. |
838 | * name the name to use for the WebIDL class string, which is the value |
839 | * that's used for @@toStringTag, and the name of the property on the |
840 | * global object that would be set to the namespace object. |
841 | * defineOnGlobal controls whether properties should be defined on the given |
842 | * global for the namespace object. This can be false in |
843 | * situations where we want the properties to only appear on |
844 | * privileged Xrays but not on the unprivileged underlying |
845 | * global. |
846 | */ |
847 | void CreateNamespaceObject(JSContext* cx, JS::Handle<JSObject*> global, |
848 | JS::Handle<JSObject*> namespaceProto, |
849 | const DOMIfaceAndProtoJSClass& namespaceClass, |
850 | JS::Heap<JSObject*>* namespaceCache, |
851 | const NativeProperties* properties, |
852 | const NativeProperties* chromeOnlyProperties, |
853 | const char* name, bool defineOnGlobal); |
854 | |
855 | /** |
856 | * Define the properties (regular and chrome-only) on obj. |
857 | * |
858 | * obj the object to install the properties on. This should be the interface |
859 | * prototype object for regular interfaces and the instance object for |
860 | * interfaces marked with Global. |
861 | * properties contains the methods, attributes and constants to be defined on |
862 | * objects in any compartment. |
863 | * chromeProperties contains the methods, attributes and constants to be defined |
864 | * on objects in chrome compartments. This must be null if the |
865 | * interface doesn't have any ChromeOnly properties or if the |
866 | * object is being created in non-chrome compartment. |
867 | */ |
868 | bool DefineProperties(JSContext* cx, JS::Handle<JSObject*> obj, |
869 | const NativeProperties* properties, |
870 | const NativeProperties* chromeOnlyProperties); |
871 | |
872 | /* |
873 | * Define the legacy unforgeable methods on an object. |
874 | */ |
875 | bool DefineLegacyUnforgeableMethods( |
876 | JSContext* cx, JS::Handle<JSObject*> obj, |
877 | const Prefable<const JSFunctionSpec>* props); |
878 | |
879 | /* |
880 | * Define the legacy unforgeable attributes on an object. |
881 | */ |
882 | bool DefineLegacyUnforgeableAttributes( |
883 | JSContext* cx, JS::Handle<JSObject*> obj, |
884 | const Prefable<const JSPropertySpec>* props); |
885 | |
886 | #define HAS_MEMBER_TYPEDEFS \ |
887 | private: \ |
888 | typedef char yes[1]; \ |
889 | typedef char no[2] |
890 | |
891 | #ifdef _MSC_VER |
892 | # define HAS_MEMBER_CHECK(_name) \ |
893 | template <typename V> \ |
894 | static yes& Check##_name(char(*)[(&V::_name == 0) + 1]) |
895 | #else |
896 | # define HAS_MEMBER_CHECK(_name) \ |
897 | template <typename V> \ |
898 | static yes& Check##_name(char(*)[sizeof(&V::_name) + 1]) |
899 | #endif |
900 | |
901 | #define HAS_MEMBER(_memberName, _valueName) \ |
902 | private: \ |
903 | HAS_MEMBER_CHECK(_memberName); \ |
904 | template <typename V> \ |
905 | static no& Check##_memberName(...); \ |
906 | \ |
907 | public: \ |
908 | static bool const _valueName = \ |
909 | sizeof(Check##_memberName<T>(nullptr)) == sizeof(yes) |
910 | |
911 | template <class T> |
912 | struct NativeHasMember { |
913 | HAS_MEMBER_TYPEDEFS; |
914 | |
915 | HAS_MEMBER(GetParentObject, GetParentObject); |
916 | HAS_MEMBER(WrapObject, WrapObject); |
917 | }; |
918 | |
919 | template <class T> |
920 | struct IsSmartPtr { |
921 | HAS_MEMBER_TYPEDEFS; |
922 | |
923 | HAS_MEMBER(get, value); |
924 | }; |
925 | |
926 | template <class T> |
927 | struct IsRefcounted { |
928 | HAS_MEMBER_TYPEDEFS; |
929 | |
930 | HAS_MEMBER(AddRef, HasAddref); |
931 | HAS_MEMBER(Release, HasRelease); |
932 | |
933 | public: |
934 | static bool const value = HasAddref && HasRelease; |
935 | |
936 | private: |
937 | // This struct only works if T is fully declared (not just forward declared). |
938 | // The std::is_base_of check will ensure that, we don't really need it for any |
939 | // other reason (the static assert will of course always be true). |
940 | static_assert(!std::is_base_of<nsISupports, T>::value || IsRefcounted::value, |
941 | "Classes derived from nsISupports are refcounted!"); |
942 | }; |
943 | |
944 | #undef HAS_MEMBER |
945 | #undef HAS_MEMBER_CHECK |
946 | #undef HAS_MEMBER_TYPEDEFS |
947 | |
948 | #ifdef DEBUG1 |
949 | template <class T, bool isISupports = std::is_base_of<nsISupports, T>::value> |
950 | struct CheckWrapperCacheCast { |
951 | static bool Check() { |
952 | return reinterpret_cast<uintptr_t>( |
953 | static_cast<nsWrapperCache*>(reinterpret_cast<T*>(1))) == 1; |
954 | } |
955 | }; |
956 | template <class T> |
957 | struct CheckWrapperCacheCast<T, true> { |
958 | static bool Check() { return true; } |
959 | }; |
960 | #endif |
961 | |
962 | inline bool TryToOuterize(JS::MutableHandle<JS::Value> rval) { |
963 | #ifdef ENABLE_RECORD_TUPLE |
964 | if (rval.isExtendedPrimitive()) { |
965 | return true; |
966 | } |
967 | #endif |
968 | MOZ_ASSERT(rval.isObject())do { static_assert( mozilla::detail::AssertionConditionType< decltype(rval.isObject())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(rval.isObject()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("rval.isObject()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 968); AnnotateMozCrashReason("MOZ_ASSERT" "(" "rval.isObject()" ")"); do { *((volatile int*)__null) = 968; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
969 | if (js::IsWindow(&rval.toObject())) { |
970 | JSObject* obj = js::ToWindowProxyIfWindow(&rval.toObject()); |
971 | MOZ_ASSERT(obj)do { static_assert( mozilla::detail::AssertionConditionType< decltype(obj)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(obj))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("obj", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 971); AnnotateMozCrashReason("MOZ_ASSERT" "(" "obj" ")"); do { *((volatile int*)__null) = 971; __attribute__((nomerge)) :: abort(); } while (false); } } while (false); |
972 | rval.set(JS::ObjectValue(*obj)); |
973 | } |
974 | |
975 | return true; |
976 | } |
977 | |
978 | inline bool TryToOuterize(JS::MutableHandle<JSObject*> obj) { |
979 | if (js::IsWindow(obj)) { |
980 | JSObject* proxy = js::ToWindowProxyIfWindow(obj); |
981 | MOZ_ASSERT(proxy)do { static_assert( mozilla::detail::AssertionConditionType< decltype(proxy)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(proxy))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("proxy", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 981); AnnotateMozCrashReason("MOZ_ASSERT" "(" "proxy" ")"); do { *((volatile int*)__null) = 981; __attribute__((nomerge) ) ::abort(); } while (false); } } while (false); |
982 | obj.set(proxy); |
983 | } |
984 | |
985 | return true; |
986 | } |
987 | |
988 | // Make sure to wrap the given string value into the right compartment, as |
989 | // needed. |
990 | MOZ_ALWAYS_INLINEinline |
991 | bool MaybeWrapStringValue(JSContext* cx, JS::MutableHandle<JS::Value> rval) { |
992 | MOZ_ASSERT(rval.isString())do { static_assert( mozilla::detail::AssertionConditionType< decltype(rval.isString())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(rval.isString()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("rval.isString()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 992); AnnotateMozCrashReason("MOZ_ASSERT" "(" "rval.isString()" ")"); do { *((volatile int*)__null) = 992; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
993 | JSString* str = rval.toString(); |
994 | if (JS::GetStringZone(str) != js::GetContextZone(cx)) { |
995 | return JS_WrapValue(cx, rval); |
996 | } |
997 | return true; |
998 | } |
999 | |
1000 | // Make sure to wrap the given object value into the right compartment as |
1001 | // needed. This will work correctly, but possibly slowly, on all objects. |
1002 | MOZ_ALWAYS_INLINEinline |
1003 | bool MaybeWrapObjectValue(JSContext* cx, JS::MutableHandle<JS::Value> rval) { |
1004 | MOZ_ASSERT(rval.hasObjectPayload())do { static_assert( mozilla::detail::AssertionConditionType< decltype(rval.hasObjectPayload())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(rval.hasObjectPayload()))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("rval.hasObjectPayload()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1004); AnnotateMozCrashReason("MOZ_ASSERT" "(" "rval.hasObjectPayload()" ")"); do { *((volatile int*)__null) = 1004; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1005 | |
1006 | // Cross-compartment always requires wrapping. |
1007 | JSObject* obj = &rval.getObjectPayload(); |
1008 | if (JS::GetCompartment(obj) != js::GetContextCompartment(cx)) { |
1009 | return JS_WrapValue(cx, rval); |
1010 | } |
1011 | |
1012 | // We're same-compartment, but we might still need to outerize if we |
1013 | // have a Window. |
1014 | return TryToOuterize(rval); |
1015 | } |
1016 | |
1017 | // Like MaybeWrapObjectValue, but working with a |
1018 | // JS::MutableHandle<JSObject*> which must be non-null. |
1019 | MOZ_ALWAYS_INLINEinline |
1020 | bool MaybeWrapObject(JSContext* cx, JS::MutableHandle<JSObject*> obj) { |
1021 | if (JS::GetCompartment(obj) != js::GetContextCompartment(cx)) { |
1022 | return JS_WrapObject(cx, obj); |
1023 | } |
1024 | |
1025 | // We're same-compartment, but we might still need to outerize if we |
1026 | // have a Window. |
1027 | return TryToOuterize(obj); |
1028 | } |
1029 | |
1030 | // Like MaybeWrapObjectValue, but also allows null |
1031 | MOZ_ALWAYS_INLINEinline |
1032 | bool MaybeWrapObjectOrNullValue(JSContext* cx, |
1033 | JS::MutableHandle<JS::Value> rval) { |
1034 | MOZ_ASSERT(rval.isObjectOrNull())do { static_assert( mozilla::detail::AssertionConditionType< decltype(rval.isObjectOrNull())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(rval.isObjectOrNull()))), 0) )) { do { } while (false); MOZ_ReportAssertionFailure("rval.isObjectOrNull()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1034); AnnotateMozCrashReason("MOZ_ASSERT" "(" "rval.isObjectOrNull()" ")"); do { *((volatile int*)__null) = 1034; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1035 | if (rval.isNull()) { |
1036 | return true; |
1037 | } |
1038 | return MaybeWrapObjectValue(cx, rval); |
1039 | } |
1040 | |
1041 | // Wrapping for objects that are known to not be DOM objects |
1042 | MOZ_ALWAYS_INLINEinline |
1043 | bool MaybeWrapNonDOMObjectValue(JSContext* cx, |
1044 | JS::MutableHandle<JS::Value> rval) { |
1045 | MOZ_ASSERT(rval.isObject())do { static_assert( mozilla::detail::AssertionConditionType< decltype(rval.isObject())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(rval.isObject()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("rval.isObject()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1045); AnnotateMozCrashReason("MOZ_ASSERT" "(" "rval.isObject()" ")"); do { *((volatile int*)__null) = 1045; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1046 | // Compared to MaybeWrapObjectValue we just skip the TryToOuterize call. The |
1047 | // only reason it would be needed is if we have a Window object, which would |
1048 | // have a DOM class. Assert that we don't have any DOM-class objects coming |
1049 | // through here. |
1050 | MOZ_ASSERT(!GetDOMClass(&rval.toObject()))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!GetDOMClass(&rval.toObject()))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!GetDOMClass(&rval.toObject ())))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("!GetDOMClass(&rval.toObject())", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1050); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!GetDOMClass(&rval.toObject())" ")"); do { *((volatile int*)__null) = 1050; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1051 | |
1052 | JSObject* obj = &rval.toObject(); |
1053 | if (JS::GetCompartment(obj) == js::GetContextCompartment(cx)) { |
1054 | return true; |
1055 | } |
1056 | return JS_WrapValue(cx, rval); |
1057 | } |
1058 | |
1059 | // Like MaybeWrapNonDOMObjectValue but allows null |
1060 | MOZ_ALWAYS_INLINEinline |
1061 | bool MaybeWrapNonDOMObjectOrNullValue(JSContext* cx, |
1062 | JS::MutableHandle<JS::Value> rval) { |
1063 | MOZ_ASSERT(rval.isObjectOrNull())do { static_assert( mozilla::detail::AssertionConditionType< decltype(rval.isObjectOrNull())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(rval.isObjectOrNull()))), 0) )) { do { } while (false); MOZ_ReportAssertionFailure("rval.isObjectOrNull()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1063); AnnotateMozCrashReason("MOZ_ASSERT" "(" "rval.isObjectOrNull()" ")"); do { *((volatile int*)__null) = 1063; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1064 | if (rval.isNull()) { |
1065 | return true; |
1066 | } |
1067 | return MaybeWrapNonDOMObjectValue(cx, rval); |
1068 | } |
1069 | |
1070 | // If rval is a gcthing and is not in the compartment of cx, wrap rval |
1071 | // into the compartment of cx (typically by replacing it with an Xray or |
1072 | // cross-compartment wrapper around the original object). |
1073 | MOZ_ALWAYS_INLINEinline bool MaybeWrapValue(JSContext* cx, |
1074 | JS::MutableHandle<JS::Value> rval) { |
1075 | if (rval.isGCThing()) { |
1076 | if (rval.isString()) { |
1077 | return MaybeWrapStringValue(cx, rval); |
1078 | } |
1079 | if (rval.hasObjectPayload()) { |
1080 | return MaybeWrapObjectValue(cx, rval); |
1081 | } |
1082 | // This could be optimized by checking the zone first, similar to |
1083 | // the way strings are handled. At present, this is used primarily |
1084 | // for structured cloning, so avoiding the overhead of JS_WrapValue |
1085 | // calls is less important than for other types. |
1086 | if (rval.isBigInt()) { |
1087 | return JS_WrapValue(cx, rval); |
1088 | } |
1089 | MOZ_ASSERT(rval.isSymbol())do { static_assert( mozilla::detail::AssertionConditionType< decltype(rval.isSymbol())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(rval.isSymbol()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("rval.isSymbol()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1089); AnnotateMozCrashReason("MOZ_ASSERT" "(" "rval.isSymbol()" ")"); do { *((volatile int*)__null) = 1089; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1090 | JS_MarkCrossZoneId(cx, JS::PropertyKey::Symbol(rval.toSymbol())); |
1091 | } |
1092 | return true; |
1093 | } |
1094 | |
1095 | namespace binding_detail { |
1096 | enum GetOrCreateReflectorWrapBehavior { |
1097 | eWrapIntoContextCompartment, |
1098 | eDontWrapIntoContextCompartment |
1099 | }; |
1100 | |
1101 | template <class T> |
1102 | struct TypeNeedsOuterization { |
1103 | // We only need to outerize Window objects, so anything inheriting from |
1104 | // nsGlobalWindow (which inherits from EventTarget itself). |
1105 | static const bool value = std::is_base_of<nsGlobalWindowInner, T>::value || |
1106 | std::is_base_of<nsGlobalWindowOuter, T>::value || |
1107 | std::is_same_v<EventTarget, T>; |
1108 | }; |
1109 | |
1110 | #ifdef DEBUG1 |
1111 | template <typename T, bool isISupports = std::is_base_of<nsISupports, T>::value> |
1112 | struct CheckWrapperCacheTracing { |
1113 | static inline void Check(T* aObject) {} |
1114 | }; |
1115 | |
1116 | template <typename T> |
1117 | struct CheckWrapperCacheTracing<T, true> { |
1118 | static void Check(T* aObject) { |
1119 | // Rooting analysis thinks QueryInterface may GC, but we're dealing with |
1120 | // a subset of QueryInterface, C++ only types here. |
1121 | JS::AutoSuppressGCAnalysis nogc; |
1122 | |
1123 | nsWrapperCache* wrapperCacheFromQI = nullptr; |
1124 | aObject->QueryInterface(NS_GET_IID(nsWrapperCache)(nsWrapperCache::COMTypeInfo<nsWrapperCache, void>::kIID ), |
1125 | reinterpret_cast<void**>(&wrapperCacheFromQI)); |
1126 | |
1127 | MOZ_ASSERT(wrapperCacheFromQI,do { static_assert( mozilla::detail::AssertionConditionType< decltype(wrapperCacheFromQI)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(wrapperCacheFromQI))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("wrapperCacheFromQI" " (" "Missing nsWrapperCache from QueryInterface implementation?" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1128); AnnotateMozCrashReason("MOZ_ASSERT" "(" "wrapperCacheFromQI" ") (" "Missing nsWrapperCache from QueryInterface implementation?" ")"); do { *((volatile int*)__null) = 1128; __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
1128 | "Missing nsWrapperCache from QueryInterface implementation?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(wrapperCacheFromQI)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(wrapperCacheFromQI))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("wrapperCacheFromQI" " (" "Missing nsWrapperCache from QueryInterface implementation?" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1128); AnnotateMozCrashReason("MOZ_ASSERT" "(" "wrapperCacheFromQI" ") (" "Missing nsWrapperCache from QueryInterface implementation?" ")"); do { *((volatile int*)__null) = 1128; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1129 | |
1130 | if (!wrapperCacheFromQI->GetWrapperPreserveColor()) { |
1131 | // Can't assert that we trace the wrapper, since we don't have any |
1132 | // wrapper to trace. |
1133 | return; |
1134 | } |
1135 | |
1136 | nsISupports* ccISupports = nullptr; |
1137 | aObject->QueryInterface(NS_GET_IID(nsCycleCollectionISupports)(nsCycleCollectionISupports::COMTypeInfo<nsCycleCollectionISupports , void>::kIID), |
1138 | reinterpret_cast<void**>(&ccISupports)); |
1139 | MOZ_ASSERT(ccISupports,do { static_assert( mozilla::detail::AssertionConditionType< decltype(ccISupports)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(ccISupports))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("ccISupports" " (" "nsWrapperCache object which isn't cycle collectable?" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1140); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ccISupports" ") (" "nsWrapperCache object which isn't cycle collectable?" ")"); do { *((volatile int*)__null) = 1140; __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
1140 | "nsWrapperCache object which isn't cycle collectable?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(ccISupports)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(ccISupports))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("ccISupports" " (" "nsWrapperCache object which isn't cycle collectable?" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1140); AnnotateMozCrashReason("MOZ_ASSERT" "(" "ccISupports" ") (" "nsWrapperCache object which isn't cycle collectable?" ")"); do { *((volatile int*)__null) = 1140; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1141 | |
1142 | nsXPCOMCycleCollectionParticipant* participant = nullptr; |
1143 | CallQueryInterface(ccISupports, &participant); |
1144 | MOZ_ASSERT(participant, "Can't QI to CycleCollectionParticipant?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(participant)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(participant))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("participant" " (" "Can't QI to CycleCollectionParticipant?" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1144); AnnotateMozCrashReason("MOZ_ASSERT" "(" "participant" ") (" "Can't QI to CycleCollectionParticipant?" ")"); do { * ((volatile int*)__null) = 1144; __attribute__((nomerge)) ::abort (); } while (false); } } while (false); |
1145 | |
1146 | wrapperCacheFromQI->CheckCCWrapperTraversal(ccISupports, participant); |
1147 | } |
1148 | }; |
1149 | |
1150 | void AssertReflectorHasGivenProto(JSContext* aCx, JSObject* aReflector, |
1151 | JS::Handle<JSObject*> aGivenProto); |
1152 | #endif // DEBUG |
1153 | |
1154 | template <class T, GetOrCreateReflectorWrapBehavior wrapBehavior> |
1155 | MOZ_ALWAYS_INLINEinline bool DoGetOrCreateDOMReflector( |
1156 | JSContext* cx, T* value, JS::Handle<JSObject*> givenProto, |
1157 | JS::MutableHandle<JS::Value> rval) { |
1158 | MOZ_ASSERT(value)do { static_assert( mozilla::detail::AssertionConditionType< decltype(value)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(value))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("value", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1158); AnnotateMozCrashReason("MOZ_ASSERT" "(" "value" ")") ; do { *((volatile int*)__null) = 1158; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1159 | MOZ_ASSERT_IF(givenProto, js::IsObjectInContextCompartment(givenProto, cx))do { if (givenProto) { do { static_assert( mozilla::detail::AssertionConditionType <decltype(js::IsObjectInContextCompartment(givenProto, cx) )>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(js::IsObjectInContextCompartment(givenProto, cx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::IsObjectInContextCompartment(givenProto, cx)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1159); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(givenProto, cx)" ")"); do { *((volatile int*)__null) = 1159; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); } } while ( false); |
1160 | JSObject* obj = value->GetWrapper(); |
1161 | if (obj) { |
1162 | #ifdef DEBUG1 |
1163 | AssertReflectorHasGivenProto(cx, obj, givenProto); |
1164 | // Have to reget obj because AssertReflectorHasGivenProto can |
1165 | // trigger gc so the pointer may now be invalid. |
1166 | obj = value->GetWrapper(); |
1167 | #endif |
1168 | } else { |
1169 | obj = value->WrapObject(cx, givenProto); |
1170 | if (!obj) { |
1171 | // At this point, obj is null, so just return false. |
1172 | // Callers seem to be testing JS_IsExceptionPending(cx) to |
1173 | // figure out whether WrapObject() threw. |
1174 | return false; |
1175 | } |
1176 | |
1177 | #ifdef DEBUG1 |
1178 | if (std::is_base_of<nsWrapperCache, T>::value) { |
1179 | CheckWrapperCacheTracing<T>::Check(value); |
1180 | } |
1181 | #endif |
1182 | } |
1183 | |
1184 | #ifdef DEBUG1 |
1185 | const DOMJSClass* clasp = GetDOMClass(obj); |
1186 | // clasp can be null if the cache contained a non-DOM object. |
1187 | if (clasp) { |
1188 | // Some sanity asserts about our object. Specifically: |
1189 | // 1) If our class claims we're nsISupports, we better be nsISupports |
1190 | // XXXbz ideally, we could assert that reinterpret_cast to nsISupports |
1191 | // does the right thing, but I don't see a way to do it. :( |
1192 | // 2) If our class doesn't claim we're nsISupports we better be |
1193 | // reinterpret_castable to nsWrapperCache. |
1194 | MOZ_ASSERT(clasp, "What happened here?")do { static_assert( mozilla::detail::AssertionConditionType< decltype(clasp)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(clasp))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("clasp" " (" "What happened here?" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1194); AnnotateMozCrashReason("MOZ_ASSERT" "(" "clasp" ") (" "What happened here?" ")"); do { *((volatile int*)__null) = 1194 ; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); |
1195 | MOZ_ASSERT_IF(clasp->mDOMObjectIsISupports,do { if (clasp->mDOMObjectIsISupports) { do { static_assert ( mozilla::detail::AssertionConditionType<decltype((std::is_base_of <nsISupports, T>::value))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!((std::is_base_of<nsISupports , T>::value)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("(std::is_base_of<nsISupports, T>::value)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1196); AnnotateMozCrashReason("MOZ_ASSERT" "(" "(std::is_base_of<nsISupports, T>::value)" ")"); do { *((volatile int*)__null) = 1196; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); } } while ( false) |
1196 | (std::is_base_of<nsISupports, T>::value))do { if (clasp->mDOMObjectIsISupports) { do { static_assert ( mozilla::detail::AssertionConditionType<decltype((std::is_base_of <nsISupports, T>::value))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!((std::is_base_of<nsISupports , T>::value)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("(std::is_base_of<nsISupports, T>::value)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1196); AnnotateMozCrashReason("MOZ_ASSERT" "(" "(std::is_base_of<nsISupports, T>::value)" ")"); do { *((volatile int*)__null) = 1196; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); } } while ( false); |
1197 | MOZ_ASSERT(CheckWrapperCacheCast<T>::Check())do { static_assert( mozilla::detail::AssertionConditionType< decltype(CheckWrapperCacheCast<T>::Check())>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(CheckWrapperCacheCast<T>::Check()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("CheckWrapperCacheCast<T>::Check()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1197); AnnotateMozCrashReason("MOZ_ASSERT" "(" "CheckWrapperCacheCast<T>::Check()" ")"); do { *((volatile int*)__null) = 1197; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1198 | } |
1199 | #endif |
1200 | |
1201 | #ifdef ENABLE_RECORD_TUPLE |
1202 | MOZ_ASSERT(!js::gc::MaybeForwardedIsExtendedPrimitive(*obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!js::gc::MaybeForwardedIsExtendedPrimitive(*obj))> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(!js::gc::MaybeForwardedIsExtendedPrimitive(*obj)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!js::gc::MaybeForwardedIsExtendedPrimitive(*obj)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1202); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!js::gc::MaybeForwardedIsExtendedPrimitive(*obj)" ")"); do { *((volatile int*)__null) = 1202; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1203 | #endif |
1204 | rval.set(JS::ObjectValue(*obj)); |
1205 | |
1206 | if (JS::GetCompartment(obj) == js::GetContextCompartment(cx)) { |
1207 | return TypeNeedsOuterization<T>::value ? TryToOuterize(rval) : true; |
1208 | } |
1209 | |
1210 | if (wrapBehavior == eDontWrapIntoContextCompartment) { |
1211 | if (TypeNeedsOuterization<T>::value) { |
1212 | JSAutoRealm ar(cx, obj); |
1213 | return TryToOuterize(rval); |
1214 | } |
1215 | |
1216 | return true; |
1217 | } |
1218 | |
1219 | return JS_WrapValue(cx, rval); |
1220 | } |
1221 | |
1222 | } // namespace binding_detail |
1223 | |
1224 | // Create a JSObject wrapping "value", if there isn't one already, and store it |
1225 | // in rval. "value" must be a concrete class that implements a |
1226 | // GetWrapperPreserveColor() which can return its existing wrapper, if any, and |
1227 | // a WrapObject() which will try to create a wrapper. Typically, this is done by |
1228 | // having "value" inherit from nsWrapperCache. |
1229 | // |
1230 | // The value stored in rval will be ready to be exposed to whatever JS |
1231 | // is running on cx right now. In particular, it will be in the |
1232 | // compartment of cx, and outerized as needed. |
1233 | template <class T> |
1234 | MOZ_ALWAYS_INLINEinline bool GetOrCreateDOMReflector( |
1235 | JSContext* cx, T* value, JS::MutableHandle<JS::Value> rval, |
1236 | JS::Handle<JSObject*> givenProto = nullptr) { |
1237 | using namespace binding_detail; |
1238 | return DoGetOrCreateDOMReflector<T, eWrapIntoContextCompartment>( |
1239 | cx, value, givenProto, rval); |
1240 | } |
1241 | |
1242 | // Like GetOrCreateDOMReflector but doesn't wrap into the context compartment, |
1243 | // and hence does not actually require cx to be in a compartment. |
1244 | template <class T> |
1245 | MOZ_ALWAYS_INLINEinline bool GetOrCreateDOMReflectorNoWrap( |
1246 | JSContext* cx, T* value, JS::MutableHandle<JS::Value> rval) { |
1247 | using namespace binding_detail; |
1248 | return DoGetOrCreateDOMReflector<T, eDontWrapIntoContextCompartment>( |
1249 | cx, value, nullptr, rval); |
1250 | } |
1251 | |
1252 | // Helper for different overloadings of WrapNewBindingNonWrapperCachedObject() |
1253 | inline bool FinishWrapping(JSContext* cx, JS::Handle<JSObject*> obj, |
1254 | JS::MutableHandle<JS::Value> rval) { |
1255 | #ifdef ENABLE_RECORD_TUPLE |
1256 | // If calling an (object) value's WrapObject() method returned a record/tuple, |
1257 | // then something is very wrong. |
1258 | MOZ_ASSERT(!js::gc::MaybeForwardedIsExtendedPrimitive(*obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!js::gc::MaybeForwardedIsExtendedPrimitive(*obj))> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(!js::gc::MaybeForwardedIsExtendedPrimitive(*obj)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!js::gc::MaybeForwardedIsExtendedPrimitive(*obj)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1258); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!js::gc::MaybeForwardedIsExtendedPrimitive(*obj)" ")"); do { *((volatile int*)__null) = 1258; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1259 | #endif |
1260 | |
1261 | // We can end up here in all sorts of compartments, per comments in |
1262 | // WrapNewBindingNonWrapperCachedObject(). Make sure to JS_WrapValue! |
1263 | rval.set(JS::ObjectValue(*obj)); |
1264 | return MaybeWrapObjectValue(cx, rval); |
1265 | } |
1266 | |
1267 | // Create a JSObject wrapping "value", for cases when "value" is a |
1268 | // non-wrapper-cached object using WebIDL bindings. "value" must implement a |
1269 | // WrapObject() method taking a JSContext and a prototype (possibly null) and |
1270 | // returning the resulting object via a MutableHandle<JSObject*> outparam. |
1271 | template <class T> |
1272 | inline bool WrapNewBindingNonWrapperCachedObject( |
1273 | JSContext* cx, JS::Handle<JSObject*> scopeArg, T* value, |
1274 | JS::MutableHandle<JS::Value> rval, |
1275 | JS::Handle<JSObject*> givenProto = nullptr) { |
1276 | static_assert(IsRefcounted<T>::value, "Don't pass owned classes in here."); |
1277 | MOZ_ASSERT(value)do { static_assert( mozilla::detail::AssertionConditionType< decltype(value)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(value))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("value", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1277); AnnotateMozCrashReason("MOZ_ASSERT" "(" "value" ")") ; do { *((volatile int*)__null) = 1277; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1278 | // We try to wrap in the realm of the underlying object of "scope" |
1279 | JS::Rooted<JSObject*> obj(cx); |
1280 | { |
1281 | // scope for the JSAutoRealm so that we restore the realm |
1282 | // before we call JS_WrapValue. |
1283 | Maybe<JSAutoRealm> ar; |
1284 | // Maybe<Handle> doesn't so much work, and in any case, adding |
1285 | // more Maybe (one for a Rooted and one for a Handle) adds more |
1286 | // code (and branches!) than just adding a single rooted. |
1287 | JS::Rooted<JSObject*> scope(cx, scopeArg); |
1288 | JS::Rooted<JSObject*> proto(cx, givenProto); |
1289 | if (js::IsWrapper(scope)) { |
1290 | // We are working in the Realm of cx and will be producing our reflector |
1291 | // there, so we need to succeed if that realm has access to the scope. |
1292 | scope = |
1293 | js::CheckedUnwrapDynamic(scope, cx, /* stopAtWindowProxy = */ false); |
1294 | if (!scope) return false; |
1295 | ar.emplace(cx, scope); |
1296 | if (!JS_WrapObject(cx, &proto)) { |
1297 | return false; |
1298 | } |
1299 | } else { |
1300 | // cx and scope are same-compartment, but they might still be |
1301 | // different-Realm. Enter the Realm of scope, since that's |
1302 | // where we want to create our object. |
1303 | ar.emplace(cx, scope); |
1304 | } |
1305 | |
1306 | MOZ_ASSERT_IF(proto, js::IsObjectInContextCompartment(proto, cx))do { if (proto) { do { static_assert( mozilla::detail::AssertionConditionType <decltype(js::IsObjectInContextCompartment(proto, cx))> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(js::IsObjectInContextCompartment(proto, cx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::IsObjectInContextCompartment(proto, cx)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1306); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(proto, cx)" ")"); do { *((volatile int*)__null) = 1306; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); } } while ( false); |
1307 | MOZ_ASSERT(js::IsObjectInContextCompartment(scope, cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(js::IsObjectInContextCompartment(scope, cx))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(js::IsObjectInContextCompartment(scope, cx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::IsObjectInContextCompartment(scope, cx)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1307); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(scope, cx)" ")"); do { *((volatile int*)__null) = 1307; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1308 | if (!value->WrapObject(cx, proto, &obj)) { |
1309 | return false; |
1310 | } |
1311 | } |
1312 | |
1313 | return FinishWrapping(cx, obj, rval); |
1314 | } |
1315 | |
1316 | // Create a JSObject wrapping "value", for cases when "value" is a |
1317 | // non-wrapper-cached owned object using WebIDL bindings. "value" must |
1318 | // implement a WrapObject() method taking a taking a JSContext and a prototype |
1319 | // (possibly null) and returning two pieces of information: the resulting object |
1320 | // via a MutableHandle<JSObject*> outparam and a boolean return value that is |
1321 | // true if the JSObject took ownership |
1322 | template <class T> |
1323 | inline bool WrapNewBindingNonWrapperCachedObject( |
1324 | JSContext* cx, JS::Handle<JSObject*> scopeArg, UniquePtr<T>& value, |
1325 | JS::MutableHandle<JS::Value> rval, |
1326 | JS::Handle<JSObject*> givenProto = nullptr) { |
1327 | static_assert(!IsRefcounted<T>::value, "Only pass owned classes in here."); |
1328 | // We do a runtime check on value, because otherwise we might in |
1329 | // fact end up wrapping a null and invoking methods on it later. |
1330 | if (!value) { |
1331 | MOZ_CRASH("Don't try to wrap null objects")do { do { } while (false); MOZ_ReportCrash("" "Don't try to wrap null objects" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1331); AnnotateMozCrashReason("MOZ_CRASH(" "Don't try to wrap null objects" ")"); do { *((volatile int*)__null) = 1331; __attribute__((nomerge )) ::abort(); } while (false); } while (false); |
1332 | } |
1333 | // We try to wrap in the realm of the underlying object of "scope" |
1334 | JS::Rooted<JSObject*> obj(cx); |
1335 | { |
1336 | // scope for the JSAutoRealm so that we restore the realm |
1337 | // before we call JS_WrapValue. |
1338 | Maybe<JSAutoRealm> ar; |
1339 | // Maybe<Handle> doesn't so much work, and in any case, adding |
1340 | // more Maybe (one for a Rooted and one for a Handle) adds more |
1341 | // code (and branches!) than just adding a single rooted. |
1342 | JS::Rooted<JSObject*> scope(cx, scopeArg); |
1343 | JS::Rooted<JSObject*> proto(cx, givenProto); |
1344 | if (js::IsWrapper(scope)) { |
1345 | // We are working in the Realm of cx and will be producing our reflector |
1346 | // there, so we need to succeed if that realm has access to the scope. |
1347 | scope = |
1348 | js::CheckedUnwrapDynamic(scope, cx, /* stopAtWindowProxy = */ false); |
1349 | if (!scope) return false; |
1350 | ar.emplace(cx, scope); |
1351 | if (!JS_WrapObject(cx, &proto)) { |
1352 | return false; |
1353 | } |
1354 | } else { |
1355 | // cx and scope are same-compartment, but they might still be |
1356 | // different-Realm. Enter the Realm of scope, since that's |
1357 | // where we want to create our object. |
1358 | ar.emplace(cx, scope); |
1359 | } |
1360 | |
1361 | MOZ_ASSERT_IF(proto, js::IsObjectInContextCompartment(proto, cx))do { if (proto) { do { static_assert( mozilla::detail::AssertionConditionType <decltype(js::IsObjectInContextCompartment(proto, cx))> ::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(js::IsObjectInContextCompartment(proto, cx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::IsObjectInContextCompartment(proto, cx)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1361); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(proto, cx)" ")"); do { *((volatile int*)__null) = 1361; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); } } while ( false); |
1362 | MOZ_ASSERT(js::IsObjectInContextCompartment(scope, cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(js::IsObjectInContextCompartment(scope, cx))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(js::IsObjectInContextCompartment(scope, cx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::IsObjectInContextCompartment(scope, cx)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1362); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(scope, cx)" ")"); do { *((volatile int*)__null) = 1362; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1363 | if (!value->WrapObject(cx, proto, &obj)) { |
1364 | return false; |
1365 | } |
1366 | |
1367 | // JS object took ownership |
1368 | Unused << value.release(); |
1369 | } |
1370 | |
1371 | return FinishWrapping(cx, obj, rval); |
1372 | } |
1373 | |
1374 | // Helper for smart pointers (nsRefPtr/nsCOMPtr). |
1375 | template <template <typename> class SmartPtr, typename T, |
1376 | typename U = std::enable_if_t<IsRefcounted<T>::value, T>, |
1377 | typename V = std::enable_if_t<IsSmartPtr<SmartPtr<T>>::value, T>> |
1378 | inline bool WrapNewBindingNonWrapperCachedObject( |
1379 | JSContext* cx, JS::Handle<JSObject*> scope, const SmartPtr<T>& value, |
1380 | JS::MutableHandle<JS::Value> rval, |
1381 | JS::Handle<JSObject*> givenProto = nullptr) { |
1382 | return WrapNewBindingNonWrapperCachedObject(cx, scope, value.get(), rval, |
1383 | givenProto); |
1384 | } |
1385 | |
1386 | // Helper for object references (as opposed to pointers). |
1387 | template <typename T, typename U = std::enable_if_t<!IsSmartPtr<T>::value, T>> |
1388 | inline bool WrapNewBindingNonWrapperCachedObject( |
1389 | JSContext* cx, JS::Handle<JSObject*> scope, T& value, |
1390 | JS::MutableHandle<JS::Value> rval, |
1391 | JS::Handle<JSObject*> givenProto = nullptr) { |
1392 | return WrapNewBindingNonWrapperCachedObject(cx, scope, &value, rval, |
1393 | givenProto); |
1394 | } |
1395 | |
1396 | template <bool Fatal> |
1397 | inline bool EnumValueNotFound(BindingCallContext& cx, JS::Handle<JSString*> str, |
1398 | const char* type, const char* sourceDescription); |
1399 | |
1400 | template <> |
1401 | inline bool EnumValueNotFound<false>(BindingCallContext& cx, |
1402 | JS::Handle<JSString*> str, |
1403 | const char* type, |
1404 | const char* sourceDescription) { |
1405 | // TODO: Log a warning to the console. |
1406 | return true; |
1407 | } |
1408 | |
1409 | template <> |
1410 | inline bool EnumValueNotFound<true>(BindingCallContext& cx, |
1411 | JS::Handle<JSString*> str, const char* type, |
1412 | const char* sourceDescription) { |
1413 | JS::UniqueChars deflated = JS_EncodeStringToUTF8(cx, str); |
1414 | if (!deflated) { |
1415 | return false; |
1416 | } |
1417 | return cx.ThrowErrorMessage<MSG_INVALID_ENUM_VALUE>(sourceDescription, |
1418 | deflated.get(), type); |
1419 | } |
1420 | |
1421 | namespace binding_detail { |
1422 | |
1423 | template <typename CharT> |
1424 | inline int FindEnumStringIndexImpl(const CharT* chars, size_t length, |
1425 | const Span<const nsLiteralCString>& values) { |
1426 | for (size_t i = 0; i < values.Length(); ++i) { |
1427 | const nsLiteralCString& value = values[i]; |
1428 | if (length != value.Length()) { |
1429 | continue; |
1430 | } |
1431 | |
1432 | bool equal = true; |
1433 | for (size_t j = 0; j != length; ++j) { |
1434 | if (unsigned(value.CharAt(j)) != unsigned(chars[j])) { |
1435 | equal = false; |
1436 | break; |
1437 | } |
1438 | } |
1439 | |
1440 | if (equal) { |
1441 | return (int)i; |
1442 | } |
1443 | } |
1444 | |
1445 | return -1; |
1446 | } |
1447 | |
1448 | template <bool InvalidValueFatal> |
1449 | inline bool FindEnumStringIndex(BindingCallContext& cx, JS::Handle<JS::Value> v, |
1450 | const Span<const nsLiteralCString>& values, |
1451 | const char* type, const char* sourceDescription, |
1452 | int* index) { |
1453 | // JS_StringEqualsAscii is slow as molasses, so don't use it here. |
1454 | JS::Rooted<JSString*> str(cx, JS::ToString(cx, v)); |
1455 | if (!str) { |
1456 | return false; |
1457 | } |
1458 | |
1459 | { |
1460 | size_t length; |
1461 | JS::AutoCheckCannotGC nogc; |
1462 | if (JS::StringHasLatin1Chars(str)) { |
1463 | const JS::Latin1Char* chars = |
1464 | JS_GetLatin1StringCharsAndLength(cx, nogc, str, &length); |
1465 | if (!chars) { |
1466 | return false; |
1467 | } |
1468 | *index = FindEnumStringIndexImpl(chars, length, values); |
1469 | } else { |
1470 | const char16_t* chars = |
1471 | JS_GetTwoByteStringCharsAndLength(cx, nogc, str, &length); |
1472 | if (!chars) { |
1473 | return false; |
1474 | } |
1475 | *index = FindEnumStringIndexImpl(chars, length, values); |
1476 | } |
1477 | if (*index >= 0) { |
1478 | return true; |
1479 | } |
1480 | } |
1481 | |
1482 | return EnumValueNotFound<InvalidValueFatal>(cx, str, type, sourceDescription); |
1483 | } |
1484 | |
1485 | } // namespace binding_detail |
1486 | |
1487 | template <typename Enum, class StringT> |
1488 | inline Maybe<Enum> StringToEnum(const StringT& aString) { |
1489 | int index = binding_detail::FindEnumStringIndexImpl( |
1490 | aString.BeginReading(), aString.Length(), |
1491 | binding_detail::EnumStrings<Enum>::Values); |
1492 | return index >= 0 ? Some(static_cast<Enum>(index)) : Nothing(); |
1493 | } |
1494 | |
1495 | template <typename Enum> |
1496 | inline constexpr const nsLiteralCString& GetEnumString(Enum stringId) { |
1497 | MOZ_RELEASE_ASSERT(do { static_assert( mozilla::detail::AssertionConditionType< decltype(static_cast<size_t>(stringId) < mozilla::ArrayLength (binding_detail::EnumStrings<Enum>::Values))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(static_cast<size_t>(stringId) < mozilla::ArrayLength (binding_detail::EnumStrings<Enum>::Values)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("static_cast<size_t>(stringId) < mozilla::ArrayLength(binding_detail::EnumStrings<Enum>::Values)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1499); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "static_cast<size_t>(stringId) < mozilla::ArrayLength(binding_detail::EnumStrings<Enum>::Values)" ")"); do { *((volatile int*)__null) = 1499; __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
1498 | static_cast<size_t>(stringId) <do { static_assert( mozilla::detail::AssertionConditionType< decltype(static_cast<size_t>(stringId) < mozilla::ArrayLength (binding_detail::EnumStrings<Enum>::Values))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(static_cast<size_t>(stringId) < mozilla::ArrayLength (binding_detail::EnumStrings<Enum>::Values)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("static_cast<size_t>(stringId) < mozilla::ArrayLength(binding_detail::EnumStrings<Enum>::Values)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1499); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "static_cast<size_t>(stringId) < mozilla::ArrayLength(binding_detail::EnumStrings<Enum>::Values)" ")"); do { *((volatile int*)__null) = 1499; __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
1499 | mozilla::ArrayLength(binding_detail::EnumStrings<Enum>::Values))do { static_assert( mozilla::detail::AssertionConditionType< decltype(static_cast<size_t>(stringId) < mozilla::ArrayLength (binding_detail::EnumStrings<Enum>::Values))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(static_cast<size_t>(stringId) < mozilla::ArrayLength (binding_detail::EnumStrings<Enum>::Values)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("static_cast<size_t>(stringId) < mozilla::ArrayLength(binding_detail::EnumStrings<Enum>::Values)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1499); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "static_cast<size_t>(stringId) < mozilla::ArrayLength(binding_detail::EnumStrings<Enum>::Values)" ")"); do { *((volatile int*)__null) = 1499; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1500 | return binding_detail::EnumStrings<Enum>::Values[static_cast<size_t>( |
1501 | stringId)]; |
1502 | } |
1503 | |
1504 | template <typename Enum> |
1505 | constexpr mozilla::detail::EnumeratedRange<Enum> MakeWebIDLEnumeratedRange() { |
1506 | return MakeInclusiveEnumeratedRange(ContiguousEnumValues<Enum>::min, |
1507 | ContiguousEnumValues<Enum>::max); |
1508 | } |
1509 | |
1510 | inline nsWrapperCache* GetWrapperCache(const ParentObject& aParentObject) { |
1511 | return aParentObject.mWrapperCache; |
1512 | } |
1513 | |
1514 | template <class T> |
1515 | inline T* GetParentPointer(T* aObject) { |
1516 | return aObject; |
1517 | } |
1518 | |
1519 | inline nsISupports* GetParentPointer(const ParentObject& aObject) { |
1520 | return aObject.mObject; |
1521 | } |
1522 | |
1523 | template <typename T> |
1524 | inline mozilla::dom::ReflectionScope GetReflectionScope(T* aParentObject) { |
1525 | return mozilla::dom::ReflectionScope::Content; |
1526 | } |
1527 | |
1528 | inline mozilla::dom::ReflectionScope GetReflectionScope( |
1529 | const ParentObject& aParentObject) { |
1530 | return aParentObject.mReflectionScope; |
1531 | } |
1532 | |
1533 | template <class T> |
1534 | inline void ClearWrapper(T* p, nsWrapperCache* cache, JSObject* obj) { |
1535 | MOZ_ASSERT(cache->GetWrapperMaybeDead() == obj ||do { static_assert( mozilla::detail::AssertionConditionType< decltype(cache->GetWrapperMaybeDead() == obj || (js::RuntimeIsBeingDestroyed () && !cache->GetWrapperMaybeDead()))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(cache->GetWrapperMaybeDead() == obj || (js::RuntimeIsBeingDestroyed () && !cache->GetWrapperMaybeDead())))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("cache->GetWrapperMaybeDead() == obj || (js::RuntimeIsBeingDestroyed() && !cache->GetWrapperMaybeDead())" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1536); AnnotateMozCrashReason("MOZ_ASSERT" "(" "cache->GetWrapperMaybeDead() == obj || (js::RuntimeIsBeingDestroyed() && !cache->GetWrapperMaybeDead())" ")"); do { *((volatile int*)__null) = 1536; __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
1536 | (js::RuntimeIsBeingDestroyed() && !cache->GetWrapperMaybeDead()))do { static_assert( mozilla::detail::AssertionConditionType< decltype(cache->GetWrapperMaybeDead() == obj || (js::RuntimeIsBeingDestroyed () && !cache->GetWrapperMaybeDead()))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(cache->GetWrapperMaybeDead() == obj || (js::RuntimeIsBeingDestroyed () && !cache->GetWrapperMaybeDead())))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("cache->GetWrapperMaybeDead() == obj || (js::RuntimeIsBeingDestroyed() && !cache->GetWrapperMaybeDead())" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1536); AnnotateMozCrashReason("MOZ_ASSERT" "(" "cache->GetWrapperMaybeDead() == obj || (js::RuntimeIsBeingDestroyed() && !cache->GetWrapperMaybeDead())" ")"); do { *((volatile int*)__null) = 1536; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1537 | cache->ClearWrapper(obj); |
1538 | } |
1539 | |
1540 | template <class T> |
1541 | inline void ClearWrapper(T* p, void*, JSObject* obj) { |
1542 | // QueryInterface to nsWrapperCache can't GC, we hope. |
1543 | JS::AutoSuppressGCAnalysis nogc; |
1544 | |
1545 | nsWrapperCache* cache; |
1546 | CallQueryInterface(p, &cache); |
1547 | ClearWrapper(p, cache, obj); |
1548 | } |
1549 | |
1550 | template <class T> |
1551 | inline void UpdateWrapper(T* p, nsWrapperCache* cache, JSObject* obj, |
1552 | const JSObject* old) { |
1553 | JS::AutoAssertGCCallback inCallback; |
1554 | cache->UpdateWrapper(obj, old); |
1555 | } |
1556 | |
1557 | template <class T> |
1558 | inline void UpdateWrapper(T* p, void*, JSObject* obj, const JSObject* old) { |
1559 | JS::AutoAssertGCCallback inCallback; |
1560 | nsWrapperCache* cache; |
1561 | CallQueryInterface(p, &cache); |
1562 | UpdateWrapper(p, cache, obj, old); |
1563 | } |
1564 | |
1565 | // Attempt to preserve the wrapper, if any, for a Paris DOM bindings object. |
1566 | // Return true if we successfully preserved the wrapper, or there is no wrapper |
1567 | // to preserve. In the latter case we don't need to preserve the wrapper, |
1568 | // because the object can only be obtained by JS once, or they cannot be |
1569 | // meaningfully owned from the native side. |
1570 | // |
1571 | // This operation will return false only for non-nsISupports cycle-collected |
1572 | // objects, because we cannot determine if they are wrappercached or not. |
1573 | bool TryPreserveWrapper(JS::Handle<JSObject*> obj); |
1574 | |
1575 | bool HasReleasedWrapper(JS::Handle<JSObject*> obj); |
1576 | |
1577 | // Can only be called with a DOM JSClass. |
1578 | bool InstanceClassHasProtoAtDepth(const JSClass* clasp, uint32_t protoID, |
1579 | uint32_t depth); |
1580 | |
1581 | // Only set allowNativeWrapper to false if you really know you need it; if in |
1582 | // doubt use true. Setting it to false disables security wrappers. |
1583 | bool XPCOMObjectToJsval(JSContext* cx, JS::Handle<JSObject*> scope, |
1584 | xpcObjectHelper& helper, const nsIID* iid, |
1585 | bool allowNativeWrapper, |
1586 | JS::MutableHandle<JS::Value> rval); |
1587 | |
1588 | // Special-cased wrapping for variants |
1589 | bool VariantToJsval(JSContext* aCx, nsIVariant* aVariant, |
1590 | JS::MutableHandle<JS::Value> aRetval); |
1591 | |
1592 | // Wrap an object "p" which is not using WebIDL bindings yet. This _will_ |
1593 | // actually work on WebIDL binding objects that are wrappercached, but will be |
1594 | // much slower than GetOrCreateDOMReflector. "cache" must either be null or be |
1595 | // the nsWrapperCache for "p". |
1596 | template <class T> |
1597 | inline bool WrapObject(JSContext* cx, T* p, nsWrapperCache* cache, |
1598 | const nsIID* iid, JS::MutableHandle<JS::Value> rval) { |
1599 | if (xpc_FastGetCachedWrapper(cx, cache, rval)) return true; |
1600 | xpcObjectHelper helper(ToSupports(p), cache); |
1601 | JS::Rooted<JSObject*> scope(cx, JS::CurrentGlobalOrNull(cx)); |
1602 | return XPCOMObjectToJsval(cx, scope, helper, iid, true, rval); |
1603 | } |
1604 | |
1605 | // A specialization of the above for nsIVariant, because that needs to |
1606 | // do something different. |
1607 | template <> |
1608 | inline bool WrapObject<nsIVariant>(JSContext* cx, nsIVariant* p, |
1609 | nsWrapperCache* cache, const nsIID* iid, |
1610 | JS::MutableHandle<JS::Value> rval) { |
1611 | MOZ_ASSERT(iid)do { static_assert( mozilla::detail::AssertionConditionType< decltype(iid)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(iid))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("iid", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1611); AnnotateMozCrashReason("MOZ_ASSERT" "(" "iid" ")"); do { *((volatile int*)__null) = 1611; __attribute__((nomerge)) :: abort(); } while (false); } } while (false); |
1612 | MOZ_ASSERT(iid->Equals(NS_GET_IID(nsIVariant)))do { static_assert( mozilla::detail::AssertionConditionType< decltype(iid->Equals((nsIVariant::COMTypeInfo<nsIVariant , void>::kIID)))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(iid->Equals((nsIVariant:: COMTypeInfo<nsIVariant, void>::kIID))))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("iid->Equals((nsIVariant::COMTypeInfo<nsIVariant, void>::kIID))" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1612); AnnotateMozCrashReason("MOZ_ASSERT" "(" "iid->Equals((nsIVariant::COMTypeInfo<nsIVariant, void>::kIID))" ")"); do { *((volatile int*)__null) = 1612; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1613 | return VariantToJsval(cx, p, rval); |
1614 | } |
1615 | |
1616 | // Wrap an object "p" which is not using WebIDL bindings yet. Just like the |
1617 | // variant that takes an nsWrapperCache above, but will try to auto-derive the |
1618 | // nsWrapperCache* from "p". |
1619 | template <class T> |
1620 | inline bool WrapObject(JSContext* cx, T* p, const nsIID* iid, |
1621 | JS::MutableHandle<JS::Value> rval) { |
1622 | return WrapObject(cx, p, GetWrapperCache(p), iid, rval); |
1623 | } |
1624 | |
1625 | // Just like the WrapObject above, but without requiring you to pick which |
1626 | // interface you're wrapping as. This should only be used for objects that have |
1627 | // classinfo, for which it doesn't matter what IID is used to wrap. |
1628 | template <class T> |
1629 | inline bool WrapObject(JSContext* cx, T* p, JS::MutableHandle<JS::Value> rval) { |
1630 | return WrapObject(cx, p, nullptr, rval); |
1631 | } |
1632 | |
1633 | // Helper to make it possible to wrap directly out of an nsCOMPtr |
1634 | template <class T> |
1635 | inline bool WrapObject(JSContext* cx, const nsCOMPtr<T>& p, const nsIID* iid, |
1636 | JS::MutableHandle<JS::Value> rval) { |
1637 | return WrapObject(cx, p.get(), iid, rval); |
1638 | } |
1639 | |
1640 | // Helper to make it possible to wrap directly out of an nsCOMPtr |
1641 | template <class T> |
1642 | inline bool WrapObject(JSContext* cx, const nsCOMPtr<T>& p, |
1643 | JS::MutableHandle<JS::Value> rval) { |
1644 | return WrapObject(cx, p, nullptr, rval); |
1645 | } |
1646 | |
1647 | // Helper to make it possible to wrap directly out of an nsRefPtr |
1648 | template <class T> |
1649 | inline bool WrapObject(JSContext* cx, const RefPtr<T>& p, const nsIID* iid, |
1650 | JS::MutableHandle<JS::Value> rval) { |
1651 | return WrapObject(cx, p.get(), iid, rval); |
1652 | } |
1653 | |
1654 | // Helper to make it possible to wrap directly out of an nsRefPtr |
1655 | template <class T> |
1656 | inline bool WrapObject(JSContext* cx, const RefPtr<T>& p, |
1657 | JS::MutableHandle<JS::Value> rval) { |
1658 | return WrapObject(cx, p, nullptr, rval); |
1659 | } |
1660 | |
1661 | // Specialization to make it easy to use WrapObject in codegen. |
1662 | template <> |
1663 | inline bool WrapObject<JSObject>(JSContext* cx, JSObject* p, |
1664 | JS::MutableHandle<JS::Value> rval) { |
1665 | rval.set(JS::ObjectOrNullValue(p)); |
1666 | return true; |
1667 | } |
1668 | |
1669 | inline bool WrapObject(JSContext* cx, JSObject& p, |
1670 | JS::MutableHandle<JS::Value> rval) { |
1671 | rval.set(JS::ObjectValue(p)); |
1672 | return true; |
1673 | } |
1674 | |
1675 | bool WrapObject(JSContext* cx, const WindowProxyHolder& p, |
1676 | JS::MutableHandle<JS::Value> rval); |
1677 | |
1678 | // Given an object "p" that inherits from nsISupports, wrap it and return the |
1679 | // result. Null is returned on wrapping failure. This is somewhat similar to |
1680 | // WrapObject() above, but does NOT allow Xrays around the result, since we |
1681 | // don't want those for our parent object. |
1682 | template <typename T> |
1683 | static inline JSObject* WrapNativeISupports(JSContext* cx, T* p, |
1684 | nsWrapperCache* cache) { |
1685 | JS::Rooted<JSObject*> retval(cx); |
1686 | { |
1687 | xpcObjectHelper helper(ToSupports(p), cache); |
1688 | JS::Rooted<JSObject*> scope(cx, JS::CurrentGlobalOrNull(cx)); |
1689 | JS::Rooted<JS::Value> v(cx); |
1690 | retval = XPCOMObjectToJsval(cx, scope, helper, nullptr, false, &v) |
1691 | ? v.toObjectOrNull() |
1692 | : nullptr; |
1693 | } |
1694 | return retval; |
1695 | } |
1696 | |
1697 | // Wrapping of our native parent, for cases when it's a WebIDL object. |
1698 | template <typename T, bool hasWrapObject = NativeHasMember<T>::WrapObject> |
1699 | struct WrapNativeHelper { |
1700 | static inline JSObject* Wrap(JSContext* cx, T* parent, |
1701 | nsWrapperCache* cache) { |
1702 | MOZ_ASSERT(cache)do { static_assert( mozilla::detail::AssertionConditionType< decltype(cache)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(cache))), 0))) { do { } while ( false); MOZ_ReportAssertionFailure("cache", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1702); AnnotateMozCrashReason("MOZ_ASSERT" "(" "cache" ")") ; do { *((volatile int*)__null) = 1702; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1703 | |
1704 | JSObject* obj; |
1705 | if ((obj = cache->GetWrapper())) { |
1706 | // GetWrapper always unmarks gray. |
1707 | JS::AssertObjectIsNotGray(obj); |
1708 | return obj; |
1709 | } |
1710 | |
1711 | // WrapObject never returns a gray thing. |
1712 | obj = parent->WrapObject(cx, nullptr); |
1713 | JS::AssertObjectIsNotGray(obj); |
1714 | |
1715 | return obj; |
1716 | } |
1717 | }; |
1718 | |
1719 | // Wrapping of our native parent, for cases when it's not a WebIDL object. In |
1720 | // this case it must be nsISupports. |
1721 | template <typename T> |
1722 | struct WrapNativeHelper<T, false> { |
1723 | static inline JSObject* Wrap(JSContext* cx, T* parent, |
1724 | nsWrapperCache* cache) { |
1725 | JSObject* obj; |
1726 | if (cache && (obj = cache->GetWrapper())) { |
1727 | #ifdef DEBUG1 |
1728 | JS::Rooted<JSObject*> rootedObj(cx, obj); |
1729 | NS_ASSERTION(WrapNativeISupports(cx, parent, cache) == rootedObj,do { if (!(WrapNativeISupports(cx, parent, cache) == rootedObj )) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Unexpected object in nsWrapperCache" , "WrapNativeISupports(cx, parent, cache) == rootedObj", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1730); MOZ_PretendNoReturn(); } } while (0) |
1730 | "Unexpected object in nsWrapperCache")do { if (!(WrapNativeISupports(cx, parent, cache) == rootedObj )) { NS_DebugBreak(NS_DEBUG_ASSERTION, "Unexpected object in nsWrapperCache" , "WrapNativeISupports(cx, parent, cache) == rootedObj", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1730); MOZ_PretendNoReturn(); } } while (0); |
1731 | obj = rootedObj; |
1732 | #endif |
1733 | JS::AssertObjectIsNotGray(obj); |
1734 | return obj; |
1735 | } |
1736 | |
1737 | obj = WrapNativeISupports(cx, parent, cache); |
1738 | JS::AssertObjectIsNotGray(obj); |
1739 | return obj; |
1740 | } |
1741 | }; |
1742 | |
1743 | // Finding the associated global for an object. |
1744 | template <typename T> |
1745 | static inline JSObject* FindAssociatedGlobal( |
1746 | JSContext* cx, T* p, nsWrapperCache* cache, |
1747 | mozilla::dom::ReflectionScope scope = |
1748 | mozilla::dom::ReflectionScope::Content) { |
1749 | if (!p) { |
1750 | return JS::CurrentGlobalOrNull(cx); |
1751 | } |
1752 | |
1753 | JSObject* obj = WrapNativeHelper<T>::Wrap(cx, p, cache); |
1754 | if (!obj) { |
1755 | return nullptr; |
1756 | } |
1757 | JS::AssertObjectIsNotGray(obj); |
1758 | |
1759 | // The object is never a CCW but it may not be in the current compartment of |
1760 | // the JSContext. |
1761 | obj = JS::GetNonCCWObjectGlobal(obj); |
1762 | |
1763 | switch (scope) { |
1764 | case mozilla::dom::ReflectionScope::NAC: { |
1765 | return xpc::NACScope(obj); |
1766 | } |
1767 | |
1768 | case mozilla::dom::ReflectionScope::UAWidget: { |
1769 | // If scope is set to UAWidgetScope, it means that the canonical reflector |
1770 | // for this native object should live in the UA widget scope. |
1771 | if (xpc::IsInUAWidgetScope(obj)) { |
1772 | return obj; |
1773 | } |
1774 | JS::Rooted<JSObject*> rootedObj(cx, obj); |
1775 | JSObject* uaWidgetScope = xpc::GetUAWidgetScope(cx, rootedObj); |
1776 | MOZ_ASSERT_IF(uaWidgetScope, JS_IsGlobalObject(uaWidgetScope))do { if (uaWidgetScope) { do { static_assert( mozilla::detail ::AssertionConditionType<decltype(JS_IsGlobalObject(uaWidgetScope ))>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(JS_IsGlobalObject(uaWidgetScope)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsGlobalObject(uaWidgetScope)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1776); AnnotateMozCrashReason("MOZ_ASSERT" "(" "JS_IsGlobalObject(uaWidgetScope)" ")"); do { *((volatile int*)__null) = 1776; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); } } while ( false); |
1777 | JS::AssertObjectIsNotGray(uaWidgetScope); |
1778 | return uaWidgetScope; |
1779 | } |
1780 | |
1781 | case ReflectionScope::Content: |
1782 | return obj; |
1783 | } |
1784 | |
1785 | MOZ_CRASH("Unknown ReflectionScope variant")do { do { } while (false); MOZ_ReportCrash("" "Unknown ReflectionScope variant" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1785); AnnotateMozCrashReason("MOZ_CRASH(" "Unknown ReflectionScope variant" ")"); do { *((volatile int*)__null) = 1785; __attribute__((nomerge )) ::abort(); } while (false); } while (false); |
1786 | |
1787 | return nullptr; |
1788 | } |
1789 | |
1790 | // Finding of the associated global for an object, when we don't want to |
1791 | // explicitly pass in things like the nsWrapperCache for it. |
1792 | template <typename T> |
1793 | static inline JSObject* FindAssociatedGlobal(JSContext* cx, const T& p) { |
1794 | return FindAssociatedGlobal(cx, GetParentPointer(p), GetWrapperCache(p), |
1795 | GetReflectionScope(p)); |
1796 | } |
1797 | |
1798 | // Specialization for the case of nsIGlobalObject, since in that case |
1799 | // we can just get the JSObject* directly. |
1800 | template <> |
1801 | inline JSObject* FindAssociatedGlobal(JSContext* cx, |
1802 | nsIGlobalObject* const& p) { |
1803 | if (!p) { |
1804 | return JS::CurrentGlobalOrNull(cx); |
1805 | } |
1806 | |
1807 | JSObject* global = p->GetGlobalJSObject(); |
1808 | if (!global) { |
1809 | // nsIGlobalObject doesn't have a JS object anymore, |
1810 | // fallback to the current global. |
1811 | return JS::CurrentGlobalOrNull(cx); |
1812 | } |
1813 | |
1814 | MOZ_ASSERT(JS_IsGlobalObject(global))do { static_assert( mozilla::detail::AssertionConditionType< decltype(JS_IsGlobalObject(global))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(JS_IsGlobalObject(global)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("JS_IsGlobalObject(global)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1814); AnnotateMozCrashReason("MOZ_ASSERT" "(" "JS_IsGlobalObject(global)" ")"); do { *((volatile int*)__null) = 1814; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1815 | JS::AssertObjectIsNotGray(global); |
1816 | return global; |
1817 | } |
1818 | |
1819 | template <typename T, |
1820 | bool hasAssociatedGlobal = NativeHasMember<T>::GetParentObject> |
1821 | struct FindAssociatedGlobalForNative { |
1822 | static JSObject* Get(JSContext* cx, JS::Handle<JSObject*> obj) { |
1823 | MOZ_ASSERT(js::IsObjectInContextCompartment(obj, cx))do { static_assert( mozilla::detail::AssertionConditionType< decltype(js::IsObjectInContextCompartment(obj, cx))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(js::IsObjectInContextCompartment(obj, cx)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::IsObjectInContextCompartment(obj, cx)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1823); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::IsObjectInContextCompartment(obj, cx)" ")"); do { *((volatile int*)__null) = 1823; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
1824 | T* native = UnwrapDOMObject<T>(obj); |
1825 | return FindAssociatedGlobal(cx, native->GetParentObject()); |
1826 | } |
1827 | }; |
1828 | |
1829 | template <typename T> |
1830 | struct FindAssociatedGlobalForNative<T, false> { |
1831 | static JSObject* Get(JSContext* cx, JS::Handle<JSObject*> obj) { |
1832 | MOZ_CRASH()do { do { } while (false); MOZ_ReportCrash("" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 1832); AnnotateMozCrashReason("MOZ_CRASH(" ")"); do { *((volatile int*)__null) = 1832; __attribute__((nomerge)) ::abort(); } while (false); } while (false); |
1833 | return nullptr; |
1834 | } |
1835 | }; |
1836 | |
1837 | // Helper for calling GetOrCreateDOMReflector with smart pointers |
1838 | // (UniquePtr/RefPtr/nsCOMPtr) or references. |
1839 | template <class T, bool isSmartPtr = IsSmartPtr<T>::value> |
1840 | struct GetOrCreateDOMReflectorHelper { |
1841 | static inline bool GetOrCreate(JSContext* cx, const T& value, |
1842 | JS::Handle<JSObject*> givenProto, |
1843 | JS::MutableHandle<JS::Value> rval) { |
1844 | return GetOrCreateDOMReflector(cx, value.get(), rval, givenProto); |
1845 | } |
1846 | }; |
1847 | |
1848 | template <class T> |
1849 | struct GetOrCreateDOMReflectorHelper<T, false> { |
1850 | static inline bool GetOrCreate(JSContext* cx, T& value, |
1851 | JS::Handle<JSObject*> givenProto, |
1852 | JS::MutableHandle<JS::Value> rval) { |
1853 | static_assert(IsRefcounted<T>::value, "Don't pass owned classes in here."); |
1854 | return GetOrCreateDOMReflector(cx, &value, rval, givenProto); |
1855 | } |
1856 | }; |
1857 | |
1858 | template <class T> |
1859 | inline bool GetOrCreateDOMReflector( |
1860 | JSContext* cx, T& value, JS::MutableHandle<JS::Value> rval, |
1861 | JS::Handle<JSObject*> givenProto = nullptr) { |
1862 | return GetOrCreateDOMReflectorHelper<T>::GetOrCreate(cx, value, givenProto, |
1863 | rval); |
1864 | } |
1865 | |
1866 | // Helper for calling GetOrCreateDOMReflectorNoWrap with smart pointers |
1867 | // (UniquePtr/RefPtr/nsCOMPtr) or references. |
1868 | template <class T, bool isSmartPtr = IsSmartPtr<T>::value> |
1869 | struct GetOrCreateDOMReflectorNoWrapHelper { |
1870 | static inline bool GetOrCreate(JSContext* cx, const T& value, |
1871 | JS::MutableHandle<JS::Value> rval) { |
1872 | return GetOrCreateDOMReflectorNoWrap(cx, value.get(), rval); |
1873 | } |
1874 | }; |
1875 | |
1876 | template <class T> |
1877 | struct GetOrCreateDOMReflectorNoWrapHelper<T, false> { |
1878 | static inline bool GetOrCreate(JSContext* cx, T& value, |
1879 | JS::MutableHandle<JS::Value> rval) { |
1880 | return GetOrCreateDOMReflectorNoWrap(cx, &value, rval); |
1881 | } |
1882 | }; |
1883 | |
1884 | template <class T> |
1885 | inline bool GetOrCreateDOMReflectorNoWrap(JSContext* cx, T& value, |
1886 | JS::MutableHandle<JS::Value> rval) { |
1887 | return GetOrCreateDOMReflectorNoWrapHelper<T>::GetOrCreate(cx, value, rval); |
1888 | } |
1889 | |
1890 | template <class T> |
1891 | inline JSObject* GetCallbackFromCallbackObject(JSContext* aCx, T* aObj) { |
1892 | return aObj->Callback(aCx); |
1893 | } |
1894 | |
1895 | // Helper for getting the callback JSObject* of a smart ptr around a |
1896 | // CallbackObject or a reference to a CallbackObject or something like |
1897 | // that. |
1898 | template <class T, bool isSmartPtr = IsSmartPtr<T>::value> |
1899 | struct GetCallbackFromCallbackObjectHelper { |
1900 | static inline JSObject* Get(JSContext* aCx, const T& aObj) { |
1901 | return GetCallbackFromCallbackObject(aCx, aObj.get()); |
1902 | } |
1903 | }; |
1904 | |
1905 | template <class T> |
1906 | struct GetCallbackFromCallbackObjectHelper<T, false> { |
1907 | static inline JSObject* Get(JSContext* aCx, T& aObj) { |
1908 | return GetCallbackFromCallbackObject(aCx, &aObj); |
1909 | } |
1910 | }; |
1911 | |
1912 | template <class T> |
1913 | inline JSObject* GetCallbackFromCallbackObject(JSContext* aCx, T& aObj) { |
1914 | return GetCallbackFromCallbackObjectHelper<T>::Get(aCx, aObj); |
1915 | } |
1916 | |
1917 | static inline bool AtomizeAndPinJSString(JSContext* cx, jsid& id, |
1918 | const char* chars) { |
1919 | if (JSString* str = ::JS_AtomizeAndPinString(cx, chars)) { |
1920 | id = JS::PropertyKey::fromPinnedString(str); |
1921 | return true; |
1922 | } |
1923 | return false; |
1924 | } |
1925 | |
1926 | void GetInterfaceImpl(JSContext* aCx, nsIInterfaceRequestor* aRequestor, |
1927 | nsWrapperCache* aCache, JS::Handle<JS::Value> aIID, |
1928 | JS::MutableHandle<JS::Value> aRetval, |
1929 | ErrorResult& aError); |
1930 | |
1931 | template <class T> |
1932 | void GetInterface(JSContext* aCx, T* aThis, JS::Handle<JS::Value> aIID, |
1933 | JS::MutableHandle<JS::Value> aRetval, ErrorResult& aError) { |
1934 | GetInterfaceImpl(aCx, aThis, aThis, aIID, aRetval, aError); |
1935 | } |
1936 | |
1937 | bool ThrowingConstructor(JSContext* cx, unsigned argc, JS::Value* vp); |
1938 | |
1939 | bool ThrowConstructorWithoutNew(JSContext* cx, const char* name); |
1940 | |
1941 | // Helper for throwing an "invalid this" exception. |
1942 | bool ThrowInvalidThis(JSContext* aCx, const JS::CallArgs& aArgs, |
1943 | bool aSecurityError, prototypes::ID aProtoId); |
1944 | |
1945 | bool GetPropertyOnPrototype(JSContext* cx, JS::Handle<JSObject*> proxy, |
1946 | JS::Handle<JS::Value> receiver, JS::Handle<jsid> id, |
1947 | bool* found, JS::MutableHandle<JS::Value> vp); |
1948 | |
1949 | // |
1950 | bool HasPropertyOnPrototype(JSContext* cx, JS::Handle<JSObject*> proxy, |
1951 | JS::Handle<jsid> id, bool* has); |
1952 | |
1953 | // Append the property names in "names" to "props". If |
1954 | // shadowPrototypeProperties is false then skip properties that are also |
1955 | // present on the proto chain of proxy. If shadowPrototypeProperties is true, |
1956 | // then the "proxy" argument is ignored. |
1957 | bool AppendNamedPropertyIds(JSContext* cx, JS::Handle<JSObject*> proxy, |
1958 | nsTArray<nsString>& names, |
1959 | bool shadowPrototypeProperties, |
1960 | JS::MutableHandleVector<jsid> props); |
1961 | |
1962 | enum StringificationBehavior { eStringify, eEmpty, eNull }; |
1963 | |
1964 | static inline JSString* ConvertJSValueToJSString(JSContext* cx, |
1965 | JS::Handle<JS::Value> v) { |
1966 | if (MOZ_LIKELY(v.isString())(__builtin_expect(!!(v.isString()), 1))) { |
1967 | return v.toString(); |
1968 | } |
1969 | return JS::ToString(cx, v); |
1970 | } |
1971 | |
1972 | template <typename T> |
1973 | static inline bool ConvertJSValueToString( |
1974 | JSContext* cx, JS::Handle<JS::Value> v, |
1975 | StringificationBehavior nullBehavior, |
1976 | StringificationBehavior undefinedBehavior, T& result) { |
1977 | JSString* s; |
1978 | if (v.isString()) { |
1979 | s = v.toString(); |
1980 | } else { |
1981 | StringificationBehavior behavior; |
1982 | if (v.isNull()) { |
1983 | behavior = nullBehavior; |
1984 | } else if (v.isUndefined()) { |
1985 | behavior = undefinedBehavior; |
1986 | } else { |
1987 | behavior = eStringify; |
1988 | } |
1989 | |
1990 | if (behavior != eStringify) { |
1991 | if (behavior == eEmpty) { |
1992 | result.Truncate(); |
1993 | } else { |
1994 | result.SetIsVoid(true); |
1995 | } |
1996 | return true; |
1997 | } |
1998 | |
1999 | s = JS::ToString(cx, v); |
2000 | if (!s) { |
2001 | return false; |
2002 | } |
2003 | } |
2004 | |
2005 | return AssignJSString(cx, result, s); |
2006 | } |
2007 | |
2008 | template <typename T> |
2009 | static inline bool ConvertJSValueToString( |
2010 | JSContext* cx, JS::Handle<JS::Value> v, |
2011 | const char* /* unused sourceDescription */, T& result) { |
2012 | return ConvertJSValueToString(cx, v, eStringify, eStringify, result); |
2013 | } |
2014 | |
2015 | [[nodiscard]] bool NormalizeUSVString(nsAString& aString); |
2016 | |
2017 | [[nodiscard]] bool NormalizeUSVString( |
2018 | binding_detail::FakeString<char16_t>& aString); |
2019 | |
2020 | template <typename T> |
2021 | static inline bool ConvertJSValueToUSVString( |
2022 | JSContext* cx, JS::Handle<JS::Value> v, |
2023 | const char* /* unused sourceDescription */, T& result) { |
2024 | if (!ConvertJSValueToString(cx, v, eStringify, eStringify, result)) { |
2025 | return false; |
2026 | } |
2027 | |
2028 | if (!NormalizeUSVString(result)) { |
2029 | JS_ReportOutOfMemory(cx); |
2030 | return false; |
2031 | } |
2032 | |
2033 | return true; |
2034 | } |
2035 | |
2036 | template <typename T> |
2037 | inline bool ConvertIdToString(JSContext* cx, JS::Handle<JS::PropertyKey> id, |
2038 | T& result, bool& isSymbol) { |
2039 | if (MOZ_LIKELY(id.isString())(__builtin_expect(!!(id.isString()), 1))) { |
2040 | if (!AssignJSString(cx, result, id.toString())) { |
2041 | return false; |
2042 | } |
2043 | } else if (id.isSymbol()) { |
2044 | isSymbol = true; |
2045 | return true; |
2046 | } else { |
2047 | JS::Rooted<JS::Value> nameVal(cx, js::IdToValue(id)); |
2048 | if (!ConvertJSValueToString(cx, nameVal, eStringify, eStringify, result)) { |
2049 | return false; |
2050 | } |
2051 | } |
2052 | isSymbol = false; |
2053 | return true; |
2054 | } |
2055 | |
2056 | bool ConvertJSValueToByteString(BindingCallContext& cx, JS::Handle<JS::Value> v, |
2057 | bool nullable, const char* sourceDescription, |
2058 | nsACString& result); |
2059 | |
2060 | inline bool ConvertJSValueToByteString(BindingCallContext& cx, |
2061 | JS::Handle<JS::Value> v, |
2062 | const char* sourceDescription, |
2063 | nsACString& result) { |
2064 | return ConvertJSValueToByteString(cx, v, false, sourceDescription, result); |
2065 | } |
2066 | |
2067 | template <typename T> |
2068 | void DoTraceSequence(JSTracer* trc, FallibleTArray<T>& seq); |
2069 | template <typename T> |
2070 | void DoTraceSequence(JSTracer* trc, nsTArray<T>& seq); |
2071 | |
2072 | // Class used to trace sequences, with specializations for various |
2073 | // sequence types. |
2074 | template <typename T, bool isDictionary = is_dom_dictionary<T>, |
2075 | bool isTypedArray = is_dom_typed_array<T>, |
2076 | bool isOwningUnion = is_dom_owning_union<T>> |
2077 | class SequenceTracer { |
2078 | explicit SequenceTracer() = delete; // Should never be instantiated |
2079 | }; |
2080 | |
2081 | // sequence<object> or sequence<object?> |
2082 | template <> |
2083 | class SequenceTracer<JSObject*, false, false, false> { |
2084 | explicit SequenceTracer() = delete; // Should never be instantiated |
2085 | |
2086 | public: |
2087 | static void TraceSequence(JSTracer* trc, JSObject** objp, JSObject** end) { |
2088 | for (; objp != end; ++objp) { |
2089 | JS::TraceRoot(trc, objp, "sequence<object>"); |
2090 | } |
2091 | } |
2092 | }; |
2093 | |
2094 | // sequence<any> |
2095 | template <> |
2096 | class SequenceTracer<JS::Value, false, false, false> { |
2097 | explicit SequenceTracer() = delete; // Should never be instantiated |
2098 | |
2099 | public: |
2100 | static void TraceSequence(JSTracer* trc, JS::Value* valp, JS::Value* end) { |
2101 | for (; valp != end; ++valp) { |
2102 | JS::TraceRoot(trc, valp, "sequence<any>"); |
2103 | } |
2104 | } |
2105 | }; |
2106 | |
2107 | // sequence<sequence<T>> |
2108 | template <typename T> |
2109 | class SequenceTracer<Sequence<T>, false, false, false> { |
2110 | explicit SequenceTracer() = delete; // Should never be instantiated |
2111 | |
2112 | public: |
2113 | static void TraceSequence(JSTracer* trc, Sequence<T>* seqp, |
2114 | Sequence<T>* end) { |
2115 | for (; seqp != end; ++seqp) { |
2116 | DoTraceSequence(trc, *seqp); |
2117 | } |
2118 | } |
2119 | }; |
2120 | |
2121 | // sequence<sequence<T>> as return value |
2122 | template <typename T> |
2123 | class SequenceTracer<nsTArray<T>, false, false, false> { |
2124 | explicit SequenceTracer() = delete; // Should never be instantiated |
2125 | |
2126 | public: |
2127 | static void TraceSequence(JSTracer* trc, nsTArray<T>* seqp, |
2128 | nsTArray<T>* end) { |
2129 | for (; seqp != end; ++seqp) { |
2130 | DoTraceSequence(trc, *seqp); |
2131 | } |
2132 | } |
2133 | }; |
2134 | |
2135 | // sequence<someDictionary> |
2136 | template <typename T> |
2137 | class SequenceTracer<T, true, false, false> { |
2138 | explicit SequenceTracer() = delete; // Should never be instantiated |
2139 | |
2140 | public: |
2141 | static void TraceSequence(JSTracer* trc, T* dictp, T* end) { |
2142 | for (; dictp != end; ++dictp) { |
2143 | dictp->TraceDictionary(trc); |
2144 | } |
2145 | } |
2146 | }; |
2147 | |
2148 | // sequence<SomeTypedArray> |
2149 | template <typename T> |
2150 | class SequenceTracer<T, false, true, false> { |
2151 | explicit SequenceTracer() = delete; // Should never be instantiated |
2152 | |
2153 | public: |
2154 | static void TraceSequence(JSTracer* trc, T* arrayp, T* end) { |
2155 | for (; arrayp != end; ++arrayp) { |
2156 | arrayp->TraceSelf(trc); |
2157 | } |
2158 | } |
2159 | }; |
2160 | |
2161 | // sequence<SomeOwningUnion> |
2162 | template <typename T> |
2163 | class SequenceTracer<T, false, false, true> { |
2164 | explicit SequenceTracer() = delete; // Should never be instantiated |
2165 | |
2166 | public: |
2167 | static void TraceSequence(JSTracer* trc, T* arrayp, T* end) { |
2168 | for (; arrayp != end; ++arrayp) { |
2169 | arrayp->TraceUnion(trc); |
2170 | } |
2171 | } |
2172 | }; |
2173 | |
2174 | // sequence<T?> with T? being a Nullable<T> |
2175 | template <typename T> |
2176 | class SequenceTracer<Nullable<T>, false, false, false> { |
2177 | explicit SequenceTracer() = delete; // Should never be instantiated |
2178 | |
2179 | public: |
2180 | static void TraceSequence(JSTracer* trc, Nullable<T>* seqp, |
2181 | Nullable<T>* end) { |
2182 | for (; seqp != end; ++seqp) { |
2183 | if (!seqp->IsNull()) { |
2184 | // Pretend like we actually have a length-one sequence here so |
2185 | // we can do template instantiation correctly for T. |
2186 | T& val = seqp->Value(); |
2187 | T* ptr = &val; |
2188 | SequenceTracer<T>::TraceSequence(trc, ptr, ptr + 1); |
2189 | } |
2190 | } |
2191 | } |
2192 | }; |
2193 | |
2194 | template <typename K, typename V> |
2195 | void TraceRecord(JSTracer* trc, Record<K, V>& record) { |
2196 | for (auto& entry : record.Entries()) { |
2197 | // Act like it's a one-element sequence to leverage all that infrastructure. |
2198 | SequenceTracer<V>::TraceSequence(trc, &entry.mValue, &entry.mValue + 1); |
2199 | } |
2200 | } |
2201 | |
2202 | // sequence<record> |
2203 | template <typename K, typename V> |
2204 | class SequenceTracer<Record<K, V>, false, false, false> { |
2205 | explicit SequenceTracer() = delete; // Should never be instantiated |
2206 | |
2207 | public: |
2208 | static void TraceSequence(JSTracer* trc, Record<K, V>* seqp, |
2209 | Record<K, V>* end) { |
2210 | for (; seqp != end; ++seqp) { |
2211 | TraceRecord(trc, *seqp); |
2212 | } |
2213 | } |
2214 | }; |
2215 | |
2216 | template <typename T> |
2217 | void DoTraceSequence(JSTracer* trc, FallibleTArray<T>& seq) { |
2218 | SequenceTracer<T>::TraceSequence(trc, seq.Elements(), |
2219 | seq.Elements() + seq.Length()); |
2220 | } |
2221 | |
2222 | template <typename T> |
2223 | void DoTraceSequence(JSTracer* trc, nsTArray<T>& seq) { |
2224 | SequenceTracer<T>::TraceSequence(trc, seq.Elements(), |
2225 | seq.Elements() + seq.Length()); |
2226 | } |
2227 | |
2228 | // Rooter class for sequences; this is what we mostly use in the codegen |
2229 | template <typename T> |
2230 | class MOZ_RAII SequenceRooter final : private JS::CustomAutoRooter { |
2231 | public: |
2232 | template <typename CX> |
2233 | SequenceRooter(const CX& cx, FallibleTArray<T>* aSequence) |
2234 | : JS::CustomAutoRooter(cx), |
2235 | mFallibleArray(aSequence), |
2236 | mSequenceType(eFallibleArray) {} |
2237 | |
2238 | template <typename CX> |
2239 | SequenceRooter(const CX& cx, nsTArray<T>* aSequence) |
2240 | : JS::CustomAutoRooter(cx), |
2241 | mInfallibleArray(aSequence), |
2242 | mSequenceType(eInfallibleArray) {} |
2243 | |
2244 | template <typename CX> |
2245 | SequenceRooter(const CX& cx, Nullable<nsTArray<T>>* aSequence) |
2246 | : JS::CustomAutoRooter(cx), |
2247 | mNullableArray(aSequence), |
2248 | mSequenceType(eNullableArray) {} |
2249 | |
2250 | private: |
2251 | enum SequenceType { eInfallibleArray, eFallibleArray, eNullableArray }; |
2252 | |
2253 | virtual void trace(JSTracer* trc) override { |
2254 | if (mSequenceType == eFallibleArray) { |
2255 | DoTraceSequence(trc, *mFallibleArray); |
2256 | } else if (mSequenceType == eInfallibleArray) { |
2257 | DoTraceSequence(trc, *mInfallibleArray); |
2258 | } else { |
2259 | MOZ_ASSERT(mSequenceType == eNullableArray)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mSequenceType == eNullableArray)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(mSequenceType == eNullableArray ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "mSequenceType == eNullableArray", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2259); AnnotateMozCrashReason("MOZ_ASSERT" "(" "mSequenceType == eNullableArray" ")"); do { *((volatile int*)__null) = 2259; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2260 | if (!mNullableArray->IsNull()) { |
2261 | DoTraceSequence(trc, mNullableArray->Value()); |
2262 | } |
2263 | } |
2264 | } |
2265 | |
2266 | union { |
2267 | nsTArray<T>* mInfallibleArray; |
2268 | FallibleTArray<T>* mFallibleArray; |
2269 | Nullable<nsTArray<T>>* mNullableArray; |
2270 | }; |
2271 | |
2272 | SequenceType mSequenceType; |
2273 | }; |
2274 | |
2275 | // Rooter class for Record; this is what we mostly use in the codegen. |
2276 | template <typename K, typename V> |
2277 | class MOZ_RAII RecordRooter final : private JS::CustomAutoRooter { |
2278 | public: |
2279 | template <typename CX> |
2280 | RecordRooter(const CX& cx, Record<K, V>* aRecord) |
2281 | : JS::CustomAutoRooter(cx), mRecord(aRecord), mRecordType(eRecord) {} |
2282 | |
2283 | template <typename CX> |
2284 | RecordRooter(const CX& cx, Nullable<Record<K, V>>* aRecord) |
2285 | : JS::CustomAutoRooter(cx), |
2286 | mNullableRecord(aRecord), |
2287 | mRecordType(eNullableRecord) {} |
2288 | |
2289 | private: |
2290 | enum RecordType { eRecord, eNullableRecord }; |
2291 | |
2292 | virtual void trace(JSTracer* trc) override { |
2293 | if (mRecordType == eRecord) { |
2294 | TraceRecord(trc, *mRecord); |
2295 | } else { |
2296 | MOZ_ASSERT(mRecordType == eNullableRecord)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mRecordType == eNullableRecord)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(mRecordType == eNullableRecord ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "mRecordType == eNullableRecord", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2296); AnnotateMozCrashReason("MOZ_ASSERT" "(" "mRecordType == eNullableRecord" ")"); do { *((volatile int*)__null) = 2296; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2297 | if (!mNullableRecord->IsNull()) { |
2298 | TraceRecord(trc, mNullableRecord->Value()); |
2299 | } |
2300 | } |
2301 | } |
2302 | |
2303 | union { |
2304 | Record<K, V>* mRecord; |
2305 | Nullable<Record<K, V>>* mNullableRecord; |
2306 | }; |
2307 | |
2308 | RecordType mRecordType; |
2309 | }; |
2310 | |
2311 | template <typename T> |
2312 | class MOZ_RAII RootedUnion : public T, private JS::CustomAutoRooter { |
2313 | public: |
2314 | template <typename CX> |
2315 | explicit RootedUnion(const CX& cx) : T(), JS::CustomAutoRooter(cx) {} |
2316 | |
2317 | virtual void trace(JSTracer* trc) override { this->TraceUnion(trc); } |
2318 | }; |
2319 | |
2320 | template <typename T> |
2321 | class MOZ_STACK_CLASS NullableRootedUnion : public Nullable<T>, |
2322 | private JS::CustomAutoRooter { |
2323 | public: |
2324 | template <typename CX> |
2325 | explicit NullableRootedUnion(const CX& cx) |
2326 | : Nullable<T>(), JS::CustomAutoRooter(cx) {} |
2327 | |
2328 | virtual void trace(JSTracer* trc) override { |
2329 | if (!this->IsNull()) { |
2330 | this->Value().TraceUnion(trc); |
2331 | } |
2332 | } |
2333 | }; |
2334 | |
2335 | inline bool AddStringToIDVector(JSContext* cx, |
2336 | JS::MutableHandleVector<jsid> vector, |
2337 | const char* name) { |
2338 | return vector.growBy(1) && |
2339 | AtomizeAndPinJSString(cx, *(vector[vector.length() - 1]).address(), |
2340 | name); |
2341 | } |
2342 | |
2343 | // We use one JSNative to represent all DOM interface objects (so we can easily |
2344 | // detect when we need to wrap them in an Xray wrapper). A pointer to the |
2345 | // relevant DOMInterfaceInfo is stored in the |
2346 | // INTERFACE_OBJECT_INFO_RESERVED_SLOT slot of the JSFunction object for a |
2347 | // specific interface object. We store the real JSNative and the |
2348 | // NativeProperties in a JSNativeHolder, held by the DOMInterfaceInfo. |
2349 | bool InterfaceObjectJSNative(JSContext* cx, unsigned argc, JS::Value* vp); |
2350 | |
2351 | inline bool IsInterfaceObject(JSObject* obj) { |
2352 | return JS_IsNativeFunction(obj, InterfaceObjectJSNative); |
2353 | } |
2354 | |
2355 | inline const DOMInterfaceInfo* InterfaceInfoFromObject(JSObject* obj) { |
2356 | MOZ_ASSERT(IsInterfaceObject(obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsInterfaceObject(obj))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsInterfaceObject(obj)))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("IsInterfaceObject(obj)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2356); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsInterfaceObject(obj)" ")"); do { *((volatile int*)__null) = 2356; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2357 | const JS::Value& v = |
2358 | js::GetFunctionNativeReserved(obj, INTERFACE_OBJECT_INFO_RESERVED_SLOT); |
2359 | return static_cast<const DOMInterfaceInfo*>(v.toPrivate()); |
2360 | } |
2361 | |
2362 | inline const JSNativeHolder* NativeHolderFromInterfaceObject(JSObject* obj) { |
2363 | MOZ_ASSERT(IsInterfaceObject(obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsInterfaceObject(obj))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsInterfaceObject(obj)))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("IsInterfaceObject(obj)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2363); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsInterfaceObject(obj)" ")"); do { *((volatile int*)__null) = 2363; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2364 | return &InterfaceInfoFromObject(obj)->nativeHolder; |
2365 | } |
2366 | |
2367 | // We use one JSNative to represent all legacy factory functions (so we can |
2368 | // easily detect when we need to wrap them in an Xray wrapper). We store the |
2369 | // real JSNative and the NativeProperties in a JSNativeHolder in the |
2370 | // LEGACY_FACTORY_FUNCTION_NATIVE_HOLDER_RESERVED_SLOT slot of the JSFunction |
2371 | // object. |
2372 | bool LegacyFactoryFunctionJSNative(JSContext* cx, unsigned argc, JS::Value* vp); |
2373 | |
2374 | inline bool IsLegacyFactoryFunction(JSObject* obj) { |
2375 | return JS_IsNativeFunction(obj, LegacyFactoryFunctionJSNative); |
2376 | } |
2377 | |
2378 | inline const JSNativeHolder* NativeHolderFromLegacyFactoryFunction( |
2379 | JSObject* obj) { |
2380 | MOZ_ASSERT(IsLegacyFactoryFunction(obj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsLegacyFactoryFunction(obj))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsLegacyFactoryFunction(obj) ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "IsLegacyFactoryFunction(obj)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2380); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsLegacyFactoryFunction(obj)" ")"); do { *((volatile int*)__null) = 2380; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2381 | const JS::Value& v = js::GetFunctionNativeReserved( |
2382 | obj, LEGACY_FACTORY_FUNCTION_NATIVE_HOLDER_RESERVED_SLOT); |
2383 | return static_cast<const JSNativeHolder*>(v.toPrivate()); |
2384 | } |
2385 | |
2386 | inline const JSNativeHolder* NativeHolderFromObject(JSObject* obj) { |
2387 | return IsInterfaceObject(obj) ? NativeHolderFromInterfaceObject(obj) |
2388 | : NativeHolderFromLegacyFactoryFunction(obj); |
2389 | } |
2390 | |
2391 | // Implementation of the bits that XrayWrapper needs |
2392 | |
2393 | /** |
2394 | * This resolves operations, attributes and constants of the interfaces for obj. |
2395 | * |
2396 | * wrapper is the Xray JS object. |
2397 | * obj is the target object of the Xray, a binding's instance object or a |
2398 | * interface or interface prototype object. |
2399 | */ |
2400 | bool XrayResolveOwnProperty( |
2401 | JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> obj, |
2402 | JS::Handle<jsid> id, |
2403 | JS::MutableHandle<mozilla::Maybe<JS::PropertyDescriptor>> desc, |
2404 | bool& cacheOnHolder); |
2405 | |
2406 | /** |
2407 | * Define a property on obj through an Xray wrapper. |
2408 | * |
2409 | * wrapper is the Xray JS object. |
2410 | * obj is the target object of the Xray, a binding's instance object or a |
2411 | * interface or interface prototype object. |
2412 | * id and desc are the parameters for the property to be defined. |
2413 | * result is the out-parameter indicating success (read it only if |
2414 | * this returns true and also sets *done to true). |
2415 | * done will be set to true if a property was set as a result of this call |
2416 | * or if we want to always avoid setting this property |
2417 | * (i.e. indexed properties on DOM objects) |
2418 | */ |
2419 | bool XrayDefineProperty(JSContext* cx, JS::Handle<JSObject*> wrapper, |
2420 | JS::Handle<JSObject*> obj, JS::Handle<jsid> id, |
2421 | JS::Handle<JS::PropertyDescriptor> desc, |
2422 | JS::ObjectOpResult& result, bool* done); |
2423 | |
2424 | /** |
2425 | * Add to props the property keys of all indexed or named properties of obj and |
2426 | * operations, attributes and constants of the interfaces for obj. |
2427 | * |
2428 | * wrapper is the Xray JS object. |
2429 | * obj is the target object of the Xray, a binding's instance object or a |
2430 | * interface or interface prototype object. |
2431 | * flags are JSITER_* flags. |
2432 | */ |
2433 | bool XrayOwnPropertyKeys(JSContext* cx, JS::Handle<JSObject*> wrapper, |
2434 | JS::Handle<JSObject*> obj, unsigned flags, |
2435 | JS::MutableHandleVector<jsid> props); |
2436 | |
2437 | /** |
2438 | * Returns the prototype to use for an Xray for a DOM object, wrapped in cx's |
2439 | * compartment. This always returns the prototype that would be used for a DOM |
2440 | * object if we ignore any changes that might have been done to the prototype |
2441 | * chain by JS, the XBL code or plugins. |
2442 | * |
2443 | * cx should be in the Xray's compartment. |
2444 | * obj is the target object of the Xray, a binding's instance object or an |
2445 | * interface or interface prototype object. |
2446 | */ |
2447 | inline bool XrayGetNativeProto(JSContext* cx, JS::Handle<JSObject*> obj, |
2448 | JS::MutableHandle<JSObject*> protop) { |
2449 | JS::Rooted<JSObject*> global(cx, JS::GetNonCCWObjectGlobal(obj)); |
2450 | { |
2451 | JSAutoRealm ar(cx, global); |
2452 | const DOMJSClass* domClass = GetDOMClass(obj); |
2453 | if (domClass) { |
2454 | ProtoHandleGetter protoGetter = domClass->mGetProto; |
2455 | if (protoGetter) { |
2456 | protop.set(protoGetter(cx)); |
2457 | } else { |
2458 | protop.set(JS::GetRealmObjectPrototype(cx)); |
2459 | } |
2460 | } else if (JS_ObjectIsFunction(obj)) { |
2461 | if (IsLegacyFactoryFunction(obj)) { |
2462 | protop.set(JS::GetRealmFunctionPrototype(cx)); |
2463 | } else { |
2464 | protop.set(InterfaceInfoFromObject(obj)->mGetParentProto(cx)); |
2465 | } |
2466 | } else { |
2467 | const JSClass* clasp = JS::GetClass(obj); |
2468 | MOZ_ASSERT(IsDOMIfaceAndProtoClass(clasp))do { static_assert( mozilla::detail::AssertionConditionType< decltype(IsDOMIfaceAndProtoClass(clasp))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(IsDOMIfaceAndProtoClass(clasp )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("IsDOMIfaceAndProtoClass(clasp)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2468); AnnotateMozCrashReason("MOZ_ASSERT" "(" "IsDOMIfaceAndProtoClass(clasp)" ")"); do { *((volatile int*)__null) = 2468; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2469 | ProtoGetter protoGetter = |
2470 | DOMIfaceAndProtoJSClass::FromJSClass(clasp)->mGetParentProto; |
2471 | protop.set(protoGetter(cx)); |
2472 | } |
2473 | } |
2474 | |
2475 | return JS_WrapObject(cx, protop); |
2476 | } |
2477 | |
2478 | /** |
2479 | * Get the Xray expando class to use for the given DOM object. |
2480 | */ |
2481 | const JSClass* XrayGetExpandoClass(JSContext* cx, JS::Handle<JSObject*> obj); |
2482 | |
2483 | /** |
2484 | * Delete a named property, if any. Return value is false if exception thrown, |
2485 | * true otherwise. The caller should not do any more work after calling this |
2486 | * function, because it has no way whether a deletion was performed and hence |
2487 | * opresult already has state set on it. If callers ever need to change that, |
2488 | * add a "bool* found" argument and change the generated DeleteNamedProperty to |
2489 | * use it instead of a local variable. |
2490 | */ |
2491 | bool XrayDeleteNamedProperty(JSContext* cx, JS::Handle<JSObject*> wrapper, |
2492 | JS::Handle<JSObject*> obj, JS::Handle<jsid> id, |
2493 | JS::ObjectOpResult& opresult); |
2494 | |
2495 | namespace binding_detail { |
2496 | |
2497 | // Default implementations of the NativePropertyHooks' mResolveOwnProperty and |
2498 | // mEnumerateOwnProperties for WebIDL bindings implemented as proxies. |
2499 | bool ResolveOwnProperty( |
2500 | JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> obj, |
2501 | JS::Handle<jsid> id, |
2502 | JS::MutableHandle<mozilla::Maybe<JS::PropertyDescriptor>> desc); |
2503 | bool EnumerateOwnProperties(JSContext* cx, JS::Handle<JSObject*> wrapper, |
2504 | JS::Handle<JSObject*> obj, |
2505 | JS::MutableHandleVector<jsid> props); |
2506 | |
2507 | } // namespace binding_detail |
2508 | |
2509 | /** |
2510 | * Get the object which should be used to cache the return value of a property |
2511 | * getter in the case of a [Cached] or [StoreInSlot] property. `obj` is the |
2512 | * `this` value for our property getter that we're working with. |
2513 | * |
2514 | * This function can return null on failure to allocate the object, throwing on |
2515 | * the JSContext in the process. |
2516 | * |
2517 | * The isXray outparam will be set to true if obj is an Xray and false |
2518 | * otherwise. |
2519 | * |
2520 | * Note that the Slow version should only be called from |
2521 | * GetCachedSlotStorageObject. |
2522 | */ |
2523 | JSObject* GetCachedSlotStorageObjectSlow(JSContext* cx, |
2524 | JS::Handle<JSObject*> obj, |
2525 | bool* isXray); |
2526 | |
2527 | inline JSObject* GetCachedSlotStorageObject(JSContext* cx, |
2528 | JS::Handle<JSObject*> obj, |
2529 | bool* isXray) { |
2530 | if (IsDOMObject(obj)) { |
2531 | *isXray = false; |
2532 | return obj; |
2533 | } |
2534 | |
2535 | return GetCachedSlotStorageObjectSlow(cx, obj, isXray); |
2536 | } |
2537 | |
2538 | extern NativePropertyHooks sEmptyNativePropertyHooks; |
2539 | |
2540 | inline bool IsDOMConstructor(JSObject* obj) { |
2541 | return IsInterfaceObject(obj) || IsLegacyFactoryFunction(obj); |
2542 | } |
2543 | |
2544 | inline bool UseDOMXray(JSObject* obj) { |
2545 | const JSClass* clasp = JS::GetClass(obj); |
2546 | return IsDOMClass(clasp) || IsDOMConstructor(obj) || |
2547 | IsDOMIfaceAndProtoClass(clasp); |
2548 | } |
2549 | |
2550 | // Helpers for creating a const version of a type. |
2551 | template <typename T> |
2552 | const T& Constify(T& arg) { |
2553 | return arg; |
2554 | } |
2555 | |
2556 | // Helper for turning (Owning)NonNull<T> into T& |
2557 | template <typename T> |
2558 | T& NonNullHelper(T& aArg) { |
2559 | return aArg; |
2560 | } |
2561 | |
2562 | template <typename T> |
2563 | T& NonNullHelper(NonNull<T>& aArg) { |
2564 | return aArg; |
2565 | } |
2566 | |
2567 | template <typename T> |
2568 | const T& NonNullHelper(const NonNull<T>& aArg) { |
2569 | return aArg; |
2570 | } |
2571 | |
2572 | template <typename T> |
2573 | T& NonNullHelper(OwningNonNull<T>& aArg) { |
2574 | return aArg; |
2575 | } |
2576 | |
2577 | template <typename T> |
2578 | const T& NonNullHelper(const OwningNonNull<T>& aArg) { |
2579 | return aArg; |
2580 | } |
2581 | |
2582 | template <typename CharT> |
2583 | inline void NonNullHelper(NonNull<binding_detail::FakeString<CharT>>& aArg) { |
2584 | // This overload is here to make sure that we never end up applying |
2585 | // NonNullHelper to a NonNull<binding_detail::FakeString>. If we |
2586 | // try to, it should fail to compile, since presumably the caller will try to |
2587 | // use our nonexistent return value. |
2588 | } |
2589 | |
2590 | template <typename CharT> |
2591 | inline void NonNullHelper( |
2592 | const NonNull<binding_detail::FakeString<CharT>>& aArg) { |
2593 | // This overload is here to make sure that we never end up applying |
2594 | // NonNullHelper to a NonNull<binding_detail::FakeString>. If we |
2595 | // try to, it should fail to compile, since presumably the caller will try to |
2596 | // use our nonexistent return value. |
2597 | } |
2598 | |
2599 | template <typename CharT> |
2600 | inline void NonNullHelper(binding_detail::FakeString<CharT>& aArg) { |
2601 | // This overload is here to make sure that we never end up applying |
2602 | // NonNullHelper to a FakeString before we've constified it. If we |
2603 | // try to, it should fail to compile, since presumably the caller will try to |
2604 | // use our nonexistent return value. |
2605 | } |
2606 | |
2607 | template <typename CharT> |
2608 | MOZ_ALWAYS_INLINEinline const nsTSubstring<CharT>& NonNullHelper( |
2609 | const binding_detail::FakeString<CharT>& aArg) { |
2610 | return aArg; |
2611 | } |
2612 | |
2613 | // Given a DOM reflector aObj, give its underlying DOM object a reflector in |
2614 | // whatever global that underlying DOM object now thinks it should be in. If |
2615 | // this is in a different compartment from aObj, aObj will become a |
2616 | // cross-compatment wrapper for the new object. Otherwise, aObj will become the |
2617 | // new object (via a brain transplant). If the new global is the same as the |
2618 | // old global, we just keep using the same object. |
2619 | // |
2620 | // On entry to this method, aCx and aObj must be same-compartment. |
2621 | void UpdateReflectorGlobal(JSContext* aCx, JS::Handle<JSObject*> aObj, |
2622 | ErrorResult& aError); |
2623 | |
2624 | // Helper for lenient getters/setters to report to console. If this |
2625 | // returns false, we couldn't even get a global. |
2626 | bool ReportLenientThisUnwrappingFailure(JSContext* cx, JSObject* obj); |
2627 | |
2628 | // Given a JSObject* that represents the chrome side of a JS-implemented WebIDL |
2629 | // interface, get the nsIGlobalObject corresponding to the content side, if any. |
2630 | // A false return means an exception was thrown. |
2631 | bool GetContentGlobalForJSImplementedObject(BindingCallContext& cx, |
2632 | JS::Handle<JSObject*> obj, |
2633 | nsIGlobalObject** global); |
2634 | |
2635 | void ConstructJSImplementation(const char* aContractId, |
2636 | nsIGlobalObject* aGlobal, |
2637 | JS::MutableHandle<JSObject*> aObject, |
2638 | ErrorResult& aRv); |
2639 | |
2640 | // XXX Avoid pulling in the whole ScriptSettings.h, however there should be a |
2641 | // unique declaration of this function somewhere else. |
2642 | JS::RootingContext* RootingCx(); |
2643 | |
2644 | template <typename T> |
2645 | already_AddRefed<T> ConstructJSImplementation(const char* aContractId, |
2646 | nsIGlobalObject* aGlobal, |
2647 | ErrorResult& aRv) { |
2648 | JS::RootingContext* cx = RootingCx(); |
2649 | JS::Rooted<JSObject*> jsImplObj(cx); |
2650 | ConstructJSImplementation(aContractId, aGlobal, &jsImplObj, aRv); |
2651 | if (aRv.Failed()) { |
2652 | return nullptr; |
2653 | } |
2654 | |
2655 | MOZ_RELEASE_ASSERT(!js::IsWrapper(jsImplObj))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!js::IsWrapper(jsImplObj))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!js::IsWrapper(jsImplObj)))) , 0))) { do { } while (false); MOZ_ReportAssertionFailure("!js::IsWrapper(jsImplObj)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2655); AnnotateMozCrashReason("MOZ_RELEASE_ASSERT" "(" "!js::IsWrapper(jsImplObj)" ")"); do { *((volatile int*)__null) = 2655; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
2656 | JS::Rooted<JSObject*> jsImplGlobal(cx, JS::GetNonCCWObjectGlobal(jsImplObj)); |
2657 | RefPtr<T> newObj = new T(jsImplObj, jsImplGlobal, aGlobal); |
2658 | return newObj.forget(); |
2659 | } |
2660 | |
2661 | template <typename T> |
2662 | already_AddRefed<T> ConstructJSImplementation(const char* aContractId, |
2663 | const GlobalObject& aGlobal, |
2664 | ErrorResult& aRv) { |
2665 | nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(aGlobal.GetAsSupports()); |
2666 | if (!global) { |
2667 | aRv.Throw(NS_ERROR_FAILURE); |
2668 | return nullptr; |
2669 | } |
2670 | |
2671 | return ConstructJSImplementation<T>(aContractId, global, aRv); |
2672 | } |
2673 | |
2674 | /** |
2675 | * Convert an nsCString to jsval, returning true on success. |
2676 | * These functions are intended for ByteString implementations. |
2677 | * As such, the string is not UTF-8 encoded. Any UTF8 strings passed to these |
2678 | * methods will be mangled. |
2679 | */ |
2680 | inline bool NonVoidByteStringToJsval(JSContext* cx, const nsACString& str, |
2681 | JS::MutableHandle<JS::Value> rval) { |
2682 | return xpc::NonVoidLatin1StringToJsval(cx, str, rval); |
2683 | } |
2684 | inline bool ByteStringToJsval(JSContext* cx, const nsACString& str, |
2685 | JS::MutableHandle<JS::Value> rval) { |
2686 | if (str.IsVoid()) { |
2687 | rval.setNull(); |
2688 | return true; |
2689 | } |
2690 | return NonVoidByteStringToJsval(cx, str, rval); |
2691 | } |
2692 | |
2693 | // Convert an utf-8 encoded nsCString to jsval, returning true on success. |
2694 | // |
2695 | // TODO(bug 1606957): This could probably be better. |
2696 | inline bool NonVoidUTF8StringToJsval(JSContext* cx, const nsACString& str, |
2697 | JS::MutableHandle<JS::Value> rval) { |
2698 | return xpc::NonVoidUTF8StringToJsval(cx, str, rval); |
2699 | } |
2700 | |
2701 | inline bool UTF8StringToJsval(JSContext* cx, const nsACString& str, |
2702 | JS::MutableHandle<JS::Value> rval) { |
2703 | if (str.IsVoid()) { |
2704 | rval.setNull(); |
2705 | return true; |
2706 | } |
2707 | return NonVoidUTF8StringToJsval(cx, str, rval); |
2708 | } |
2709 | |
2710 | template <class T, bool isISupports = std::is_base_of<nsISupports, T>::value> |
2711 | struct PreserveWrapperHelper { |
2712 | static void PreserveWrapper(T* aObject) { |
2713 | aObject->PreserveWrapper(aObject, NS_CYCLE_COLLECTION_PARTICIPANT(T)T::cycleCollection::GetParticipant()); |
2714 | } |
2715 | }; |
2716 | |
2717 | template <class T> |
2718 | struct PreserveWrapperHelper<T, true> { |
2719 | static void PreserveWrapper(T* aObject) { |
2720 | aObject->PreserveWrapper(reinterpret_cast<nsISupports*>(aObject)); |
2721 | } |
2722 | }; |
2723 | |
2724 | template <class T> |
2725 | void PreserveWrapper(T* aObject) { |
2726 | PreserveWrapperHelper<T>::PreserveWrapper(aObject); |
2727 | } |
2728 | |
2729 | template <class T, bool isISupports = std::is_base_of<nsISupports, T>::value> |
2730 | struct CastingAssertions { |
2731 | static bool ToSupportsIsCorrect(T*) { return true; } |
2732 | static bool ToSupportsIsOnPrimaryInheritanceChain(T*, nsWrapperCache*) { |
2733 | return true; |
2734 | } |
2735 | }; |
2736 | |
2737 | template <class T> |
2738 | struct CastingAssertions<T, true> { |
2739 | static bool ToSupportsIsCorrect(T* aObject) { |
2740 | return ToSupports(aObject) == reinterpret_cast<nsISupports*>(aObject); |
2741 | } |
2742 | static bool ToSupportsIsOnPrimaryInheritanceChain(T* aObject, |
2743 | nsWrapperCache* aCache) { |
2744 | return reinterpret_cast<void*>(aObject) != aCache; |
2745 | } |
2746 | }; |
2747 | |
2748 | template <class T> |
2749 | bool ToSupportsIsCorrect(T* aObject) { |
2750 | return CastingAssertions<T>::ToSupportsIsCorrect(aObject); |
2751 | } |
2752 | |
2753 | template <class T> |
2754 | bool ToSupportsIsOnPrimaryInheritanceChain(T* aObject, nsWrapperCache* aCache) { |
2755 | return CastingAssertions<T>::ToSupportsIsOnPrimaryInheritanceChain(aObject, |
2756 | aCache); |
2757 | } |
2758 | |
2759 | // Get the size of allocated memory to associate with a binding JSObject for a |
2760 | // native object. This is supplied to the JS engine to allow it to schedule GC |
2761 | // when necessary. |
2762 | // |
2763 | // This function supplies a default value and is overloaded for specific native |
2764 | // object types. |
2765 | inline size_t BindingJSObjectMallocBytes(void* aNativePtr) { return 0; } |
2766 | |
2767 | // The BindingJSObjectCreator class is supposed to be used by a caller that |
2768 | // wants to create and initialise a binding JSObject. After initialisation has |
2769 | // been successfully completed it should call InitializationSucceeded(). |
2770 | // The BindingJSObjectCreator object will root the JSObject until |
2771 | // InitializationSucceeded() is called on it. If the native object for the |
2772 | // binding is refcounted it will also hold a strong reference to it, that |
2773 | // reference is transferred to the JSObject (which holds the native in a slot) |
2774 | // when InitializationSucceeded() is called. If the BindingJSObjectCreator |
2775 | // object is destroyed and InitializationSucceeded() was never called on it then |
2776 | // the JSObject's slot holding the native will be set to undefined, and for a |
2777 | // refcounted native the strong reference will be released. |
2778 | template <class T> |
2779 | class MOZ_STACK_CLASS BindingJSObjectCreator { |
2780 | public: |
2781 | explicit BindingJSObjectCreator(JSContext* aCx) : mReflector(aCx) {} |
2782 | |
2783 | ~BindingJSObjectCreator() { |
2784 | if (mReflector) { |
2785 | JS::SetReservedSlot(mReflector, DOM_OBJECT_SLOT0, JS::UndefinedValue()); |
2786 | } |
2787 | } |
2788 | |
2789 | void CreateProxyObject(JSContext* aCx, const JSClass* aClass, |
2790 | const DOMProxyHandler* aHandler, |
2791 | JS::Handle<JSObject*> aProto, bool aLazyProto, |
2792 | T* aNative, JS::Handle<JS::Value> aExpandoValue, |
2793 | JS::MutableHandle<JSObject*> aReflector) { |
2794 | js::ProxyOptions options; |
2795 | options.setClass(aClass); |
2796 | options.setLazyProto(aLazyProto); |
2797 | |
2798 | aReflector.set( |
2799 | js::NewProxyObject(aCx, aHandler, aExpandoValue, aProto, options)); |
2800 | if (aReflector) { |
2801 | js::SetProxyReservedSlot(aReflector, DOM_OBJECT_SLOT0, |
2802 | JS::PrivateValue(aNative)); |
2803 | mNative = aNative; |
2804 | mReflector = aReflector; |
2805 | |
2806 | if (size_t mallocBytes = BindingJSObjectMallocBytes(aNative)) { |
2807 | JS::AddAssociatedMemory(aReflector, mallocBytes, |
2808 | JS::MemoryUse::DOMBinding); |
2809 | } |
2810 | } |
2811 | } |
2812 | |
2813 | void CreateObject(JSContext* aCx, const JSClass* aClass, |
2814 | JS::Handle<JSObject*> aProto, T* aNative, |
2815 | JS::MutableHandle<JSObject*> aReflector) { |
2816 | aReflector.set(JS_NewObjectWithGivenProto(aCx, aClass, aProto)); |
2817 | if (aReflector) { |
2818 | JS::SetReservedSlot(aReflector, DOM_OBJECT_SLOT0, |
2819 | JS::PrivateValue(aNative)); |
2820 | mNative = aNative; |
2821 | mReflector = aReflector; |
2822 | |
2823 | if (size_t mallocBytes = BindingJSObjectMallocBytes(aNative)) { |
2824 | JS::AddAssociatedMemory(aReflector, mallocBytes, |
2825 | JS::MemoryUse::DOMBinding); |
2826 | } |
2827 | } |
2828 | } |
2829 | |
2830 | void InitializationSucceeded() { |
2831 | T* pointer; |
2832 | mNative.forget(&pointer); |
2833 | mReflector = nullptr; |
2834 | } |
2835 | |
2836 | private: |
2837 | struct OwnedNative { |
2838 | // Make sure the native objects inherit from NonRefcountedDOMObject so |
2839 | // that we log their ctor and dtor. |
2840 | static_assert(std::is_base_of<NonRefcountedDOMObject, T>::value, |
2841 | "Non-refcounted objects with DOM bindings should inherit " |
2842 | "from NonRefcountedDOMObject."); |
2843 | |
2844 | OwnedNative& operator=(T* aNative) { |
2845 | mNative = aNative; |
2846 | return *this; |
2847 | } |
2848 | |
2849 | // This signature sucks, but it's the only one that will make a nsRefPtr |
2850 | // just forget about its pointer without warning. |
2851 | void forget(T** aResult) { |
2852 | *aResult = mNative; |
2853 | mNative = nullptr; |
2854 | } |
2855 | |
2856 | // Keep track of the pointer for use in InitializationSucceeded(). |
2857 | // The caller (or, after initialization succeeds, the JS object) retains |
2858 | // ownership of the object. |
2859 | T* mNative; |
2860 | }; |
2861 | |
2862 | JS::Rooted<JSObject*> mReflector; |
2863 | std::conditional_t<IsRefcounted<T>::value, RefPtr<T>, OwnedNative> mNative; |
2864 | }; |
2865 | |
2866 | template <class T> |
2867 | struct DeferredFinalizerImpl { |
2868 | using SmartPtr = std::conditional_t< |
2869 | std::is_same_v<T, nsISupports>, nsCOMPtr<T>, |
2870 | std::conditional_t<IsRefcounted<T>::value, RefPtr<T>, UniquePtr<T>>>; |
2871 | typedef SegmentedVector<SmartPtr> SmartPtrArray; |
2872 | |
2873 | static_assert( |
2874 | std::is_same_v<T, nsISupports> || !std::is_base_of<nsISupports, T>::value, |
2875 | "nsISupports classes should all use the nsISupports instantiation"); |
2876 | |
2877 | static inline void AppendAndTake( |
2878 | SegmentedVector<nsCOMPtr<nsISupports>>& smartPtrArray, nsISupports* ptr) { |
2879 | smartPtrArray.InfallibleAppend(dont_AddRef(ptr)); |
2880 | } |
2881 | template <class U> |
2882 | static inline void AppendAndTake(SegmentedVector<RefPtr<U>>& smartPtrArray, |
2883 | U* ptr) { |
2884 | smartPtrArray.InfallibleAppend(dont_AddRef(ptr)); |
2885 | } |
2886 | template <class U> |
2887 | static inline void AppendAndTake(SegmentedVector<UniquePtr<U>>& smartPtrArray, |
2888 | U* ptr) { |
2889 | smartPtrArray.InfallibleAppend(ptr); |
2890 | } |
2891 | |
2892 | static void* AppendDeferredFinalizePointer(void* aData, void* aObject) { |
2893 | SmartPtrArray* pointers = static_cast<SmartPtrArray*>(aData); |
2894 | if (!pointers) { |
2895 | pointers = new SmartPtrArray(); |
2896 | } |
2897 | AppendAndTake(*pointers, static_cast<T*>(aObject)); |
2898 | return pointers; |
2899 | } |
2900 | static bool DeferredFinalize(uint32_t aSlice, void* aData) { |
2901 | MOZ_ASSERT(aSlice > 0, "nonsensical/useless call with aSlice == 0")do { static_assert( mozilla::detail::AssertionConditionType< decltype(aSlice > 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(aSlice > 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("aSlice > 0" " (" "nonsensical/useless call with aSlice == 0" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2901); AnnotateMozCrashReason("MOZ_ASSERT" "(" "aSlice > 0" ") (" "nonsensical/useless call with aSlice == 0" ")"); do { *((volatile int*)__null) = 2901; __attribute__((nomerge)) :: abort(); } while (false); } } while (false); |
2902 | SmartPtrArray* pointers = static_cast<SmartPtrArray*>(aData); |
2903 | uint32_t oldLen = pointers->Length(); |
2904 | if (oldLen < aSlice) { |
2905 | aSlice = oldLen; |
2906 | } |
2907 | uint32_t newLen = oldLen - aSlice; |
2908 | pointers->PopLastN(aSlice); |
2909 | if (newLen == 0) { |
2910 | delete pointers; |
2911 | return true; |
2912 | } |
2913 | return false; |
2914 | } |
2915 | }; |
2916 | |
2917 | template <class T, bool isISupports = std::is_base_of<nsISupports, T>::value> |
2918 | struct DeferredFinalizer { |
2919 | static void AddForDeferredFinalization(T* aObject) { |
2920 | typedef DeferredFinalizerImpl<T> Impl; |
2921 | DeferredFinalize(Impl::AppendDeferredFinalizePointer, |
2922 | Impl::DeferredFinalize, aObject); |
2923 | } |
2924 | }; |
2925 | |
2926 | template <class T> |
2927 | struct DeferredFinalizer<T, true> { |
2928 | static void AddForDeferredFinalization(T* aObject) { |
2929 | DeferredFinalize(reinterpret_cast<nsISupports*>(aObject)); |
2930 | } |
2931 | }; |
2932 | |
2933 | template <class T> |
2934 | static void AddForDeferredFinalization(T* aObject) { |
2935 | DeferredFinalizer<T>::AddForDeferredFinalization(aObject); |
2936 | } |
2937 | |
2938 | // This returns T's CC participant if it participates in CC and does not inherit |
2939 | // from nsISupports. Otherwise, it returns null. QI should be used to get the |
2940 | // participant if T inherits from nsISupports. |
2941 | template <class T, bool isISupports = std::is_base_of<nsISupports, T>::value> |
2942 | class GetCCParticipant { |
2943 | // Helper for GetCCParticipant for classes that participate in CC. |
2944 | template <class U> |
2945 | static constexpr nsCycleCollectionParticipant* GetHelper( |
2946 | int, typename U::NS_CYCLE_COLLECTION_INNERCLASScycleCollection* dummy = nullptr) { |
2947 | return T::NS_CYCLE_COLLECTION_INNERCLASScycleCollection::GetParticipant(); |
2948 | } |
2949 | // Helper for GetCCParticipant for classes that don't participate in CC. |
2950 | template <class U> |
2951 | static constexpr nsCycleCollectionParticipant* GetHelper(double) { |
2952 | return nullptr; |
2953 | } |
2954 | |
2955 | public: |
2956 | static constexpr nsCycleCollectionParticipant* Get() { |
2957 | // Passing int() here will try to call the GetHelper that takes an int as |
2958 | // its first argument. If T doesn't participate in CC then substitution for |
2959 | // the second argument (with a default value) will fail and because of |
2960 | // SFINAE the next best match (the variant taking a double) will be called. |
2961 | return GetHelper<T>(int()); |
2962 | } |
2963 | }; |
2964 | |
2965 | template <class T> |
2966 | class GetCCParticipant<T, true> { |
2967 | public: |
2968 | static constexpr nsCycleCollectionParticipant* Get() { return nullptr; } |
2969 | }; |
2970 | |
2971 | void FinalizeGlobal(JS::GCContext* aGcx, JSObject* aObj); |
2972 | |
2973 | bool ResolveGlobal(JSContext* aCx, JS::Handle<JSObject*> aObj, |
2974 | JS::Handle<jsid> aId, bool* aResolvedp); |
2975 | |
2976 | bool MayResolveGlobal(const JSAtomState& aNames, jsid aId, JSObject* aMaybeObj); |
2977 | |
2978 | bool EnumerateGlobal(JSContext* aCx, JS::Handle<JSObject*> aObj, |
2979 | JS::MutableHandleVector<jsid> aProperties, |
2980 | bool aEnumerableOnly); |
2981 | |
2982 | struct CreateGlobalOptionsGeneric { |
2983 | static void TraceGlobal(JSTracer* aTrc, JSObject* aObj) { |
2984 | mozilla::dom::TraceProtoAndIfaceCache(aTrc, aObj); |
2985 | } |
2986 | static bool PostCreateGlobal(JSContext* aCx, JS::Handle<JSObject*> aGlobal) { |
2987 | MOZ_ALWAYS_TRUE(TryPreserveWrapper(aGlobal))do { if ((__builtin_expect(!!(TryPreserveWrapper(aGlobal)), 1 ))) { } else { do { static_assert( mozilla::detail::AssertionConditionType <decltype(false)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(false))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("false" " (" "TryPreserveWrapper(aGlobal)" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 2987); AnnotateMozCrashReason("MOZ_DIAGNOSTIC_ASSERT" "(" "false" ") (" "TryPreserveWrapper(aGlobal)" ")"); do { *((volatile int *)__null) = 2987; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); } } while (false); |
2988 | |
2989 | return true; |
2990 | } |
2991 | }; |
2992 | |
2993 | struct CreateGlobalOptionsWithXPConnect { |
2994 | static void TraceGlobal(JSTracer* aTrc, JSObject* aObj); |
2995 | static bool PostCreateGlobal(JSContext* aCx, JS::Handle<JSObject*> aGlobal); |
2996 | }; |
2997 | |
2998 | template <class T> |
2999 | using IsGlobalWithXPConnect = |
3000 | std::integral_constant<bool, |
3001 | std::is_base_of<nsGlobalWindowInner, T>::value || |
3002 | std::is_base_of<MessageManagerGlobal, T>::value>; |
3003 | |
3004 | template <class T> |
3005 | struct CreateGlobalOptions |
3006 | : std::conditional_t<IsGlobalWithXPConnect<T>::value, |
3007 | CreateGlobalOptionsWithXPConnect, |
3008 | CreateGlobalOptionsGeneric> { |
3009 | static constexpr ProtoAndIfaceCache::Kind ProtoAndIfaceCacheKind = |
3010 | ProtoAndIfaceCache::NonWindowLike; |
3011 | }; |
3012 | |
3013 | template <> |
3014 | struct CreateGlobalOptions<nsGlobalWindowInner> |
3015 | : public CreateGlobalOptionsWithXPConnect { |
3016 | static constexpr ProtoAndIfaceCache::Kind ProtoAndIfaceCacheKind = |
3017 | ProtoAndIfaceCache::WindowLike; |
3018 | }; |
3019 | |
3020 | uint64_t GetWindowID(void* aGlobal); |
3021 | uint64_t GetWindowID(nsGlobalWindowInner* aGlobal); |
3022 | uint64_t GetWindowID(DedicatedWorkerGlobalScope* aGlobal); |
3023 | |
3024 | // The return value is true if we created and successfully performed our part of |
3025 | // the setup for the global, false otherwise. |
3026 | // |
3027 | // Typically this method's caller will want to ensure that |
3028 | // xpc::InitGlobalObjectOptions is called before, and xpc::InitGlobalObject is |
3029 | // called after, this method, to ensure that this global object and its |
3030 | // compartment are consistent with other global objects. |
3031 | template <class T, ProtoHandleGetter GetProto> |
3032 | bool CreateGlobal(JSContext* aCx, T* aNative, nsWrapperCache* aCache, |
3033 | const JSClass* aClass, JS::RealmOptions& aOptions, |
3034 | JSPrincipals* aPrincipal, |
3035 | JS::MutableHandle<JSObject*> aGlobal) { |
3036 | AUTO_PROFILER_LABEL_RELEVANT_FOR_JS("Create global object", JS)mozilla::AutoProfilerLabel raiiObject3036( "Create global object" , nullptr, JS::ProfilingCategoryPair::JS, uint32_t(js::ProfilingStackFrame ::Flags::RELEVANT_FOR_JS)); |
3037 | aOptions.creationOptions() |
3038 | .setTrace(CreateGlobalOptions<T>::TraceGlobal) |
3039 | .setProfilerRealmID(GetWindowID(aNative)); |
3040 | xpc::SetPrefableRealmOptions(aOptions); |
3041 | |
3042 | aGlobal.set(JS_NewGlobalObject(aCx, aClass, aPrincipal, |
3043 | JS::DontFireOnNewGlobalHook, aOptions)); |
3044 | if (!aGlobal) { |
3045 | NS_WARNING("Failed to create global")NS_DebugBreak(NS_DEBUG_WARNING, "Failed to create global", nullptr , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 3045); |
3046 | return false; |
3047 | } |
3048 | |
3049 | JSAutoRealm ar(aCx, aGlobal); |
3050 | |
3051 | { |
3052 | JS::SetReservedSlot(aGlobal, DOM_OBJECT_SLOT0, JS::PrivateValue(aNative)); |
3053 | NS_ADDREF(aNative)(aNative)->AddRef(); |
3054 | |
3055 | aCache->SetWrapper(aGlobal); |
3056 | |
3057 | dom::AllocateProtoAndIfaceCache( |
3058 | aGlobal, CreateGlobalOptions<T>::ProtoAndIfaceCacheKind); |
3059 | |
3060 | if (!CreateGlobalOptions<T>::PostCreateGlobal(aCx, aGlobal)) { |
3061 | return false; |
3062 | } |
3063 | |
3064 | // Initializing this at this point for nsGlobalWindowInner makes no sense, |
3065 | // because GetRTPCallerType doesn't return the correct result before |
3066 | // the global is completely initialized with a document. |
3067 | if constexpr (!std::is_base_of_v<nsGlobalWindowInner, T>) { |
3068 | JS::SetRealmReduceTimerPrecisionCallerType( |
3069 | js::GetNonCCWObjectRealm(aGlobal), |
3070 | RTPCallerTypeToToken(aNative->GetRTPCallerType())); |
3071 | } |
3072 | } |
3073 | |
3074 | JS::Handle<JSObject*> proto = GetProto(aCx); |
3075 | if (!proto || !JS_SetPrototype(aCx, aGlobal, proto)) { |
3076 | NS_WARNING("Failed to set proto")NS_DebugBreak(NS_DEBUG_WARNING, "Failed to set proto", nullptr , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 3076); |
3077 | return false; |
3078 | } |
3079 | |
3080 | bool succeeded; |
3081 | if (!JS_SetImmutablePrototype(aCx, aGlobal, &succeeded)) { |
3082 | return false; |
3083 | } |
3084 | MOZ_ASSERT(succeeded,do { static_assert( mozilla::detail::AssertionConditionType< decltype(succeeded)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(succeeded))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("succeeded" " (" "making a fresh global object's [[Prototype]] immutable can " "internally fail, but it should never be unsuccessful" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 3086); AnnotateMozCrashReason("MOZ_ASSERT" "(" "succeeded" ") (" "making a fresh global object's [[Prototype]] immutable can " "internally fail, but it should never be unsuccessful" ")"); do { *((volatile int*)__null) = 3086; __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
3085 | "making a fresh global object's [[Prototype]] immutable can "do { static_assert( mozilla::detail::AssertionConditionType< decltype(succeeded)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(succeeded))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("succeeded" " (" "making a fresh global object's [[Prototype]] immutable can " "internally fail, but it should never be unsuccessful" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 3086); AnnotateMozCrashReason("MOZ_ASSERT" "(" "succeeded" ") (" "making a fresh global object's [[Prototype]] immutable can " "internally fail, but it should never be unsuccessful" ")"); do { *((volatile int*)__null) = 3086; __attribute__((nomerge )) ::abort(); } while (false); } } while (false) |
3086 | "internally fail, but it should never be unsuccessful")do { static_assert( mozilla::detail::AssertionConditionType< decltype(succeeded)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(succeeded))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("succeeded" " (" "making a fresh global object's [[Prototype]] immutable can " "internally fail, but it should never be unsuccessful" ")", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 3086); AnnotateMozCrashReason("MOZ_ASSERT" "(" "succeeded" ") (" "making a fresh global object's [[Prototype]] immutable can " "internally fail, but it should never be unsuccessful" ")"); do { *((volatile int*)__null) = 3086; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
3087 | |
3088 | return true; |
3089 | } |
3090 | |
3091 | namespace binding_detail { |
3092 | /** |
3093 | * WebIDL getters have a "generic" JSNative that is responsible for the |
3094 | * following things: |
3095 | * |
3096 | * 1) Determining the "this" pointer for the C++ call. |
3097 | * 2) Extracting the "specialized" getter from the jitinfo on the JSFunction. |
3098 | * 3) Calling the specialized getter. |
3099 | * 4) Handling exceptions as needed. |
3100 | * |
3101 | * There are several variants of (1) depending on the interface involved and |
3102 | * there are two variants of (4) depending on whether the return type is a |
3103 | * Promise. We handle this by templating our generic getter on a |
3104 | * this-determination policy and an exception handling policy, then explicitly |
3105 | * instantiating the relevant template specializations. |
3106 | */ |
3107 | template <typename ThisPolicy, typename ExceptionPolicy> |
3108 | bool GenericGetter(JSContext* cx, unsigned argc, JS::Value* vp); |
3109 | |
3110 | /** |
3111 | * WebIDL setters have a "generic" JSNative that is responsible for the |
3112 | * following things: |
3113 | * |
3114 | * 1) Determining the "this" pointer for the C++ call. |
3115 | * 2) Extracting the "specialized" setter from the jitinfo on the JSFunction. |
3116 | * 3) Calling the specialized setter. |
3117 | * |
3118 | * There are several variants of (1) depending on the interface |
3119 | * involved. We handle this by templating our generic setter on a |
3120 | * this-determination policy, then explicitly instantiating the |
3121 | * relevant template specializations. |
3122 | */ |
3123 | template <typename ThisPolicy> |
3124 | bool GenericSetter(JSContext* cx, unsigned argc, JS::Value* vp); |
3125 | |
3126 | /** |
3127 | * WebIDL methods have a "generic" JSNative that is responsible for the |
3128 | * following things: |
3129 | * |
3130 | * 1) Determining the "this" pointer for the C++ call. |
3131 | * 2) Extracting the "specialized" method from the jitinfo on the JSFunction. |
3132 | * 3) Calling the specialized methodx. |
3133 | * 4) Handling exceptions as needed. |
3134 | * |
3135 | * There are several variants of (1) depending on the interface involved and |
3136 | * there are two variants of (4) depending on whether the return type is a |
3137 | * Promise. We handle this by templating our generic method on a |
3138 | * this-determination policy and an exception handling policy, then explicitly |
3139 | * instantiating the relevant template specializations. |
3140 | */ |
3141 | template <typename ThisPolicy, typename ExceptionPolicy> |
3142 | bool GenericMethod(JSContext* cx, unsigned argc, JS::Value* vp); |
3143 | |
3144 | // A this-extraction policy for normal getters/setters/methods. |
3145 | struct NormalThisPolicy; |
3146 | |
3147 | // A this-extraction policy for getters/setters/methods on interfaces |
3148 | // that are on some global's proto chain. |
3149 | struct MaybeGlobalThisPolicy; |
3150 | |
3151 | // A this-extraction policy for lenient getters/setters. |
3152 | struct LenientThisPolicy; |
3153 | |
3154 | // A this-extraction policy for cross-origin getters/setters/methods. |
3155 | struct CrossOriginThisPolicy; |
3156 | |
3157 | // A this-extraction policy for getters/setters/methods that should |
3158 | // not be allowed to be called cross-origin but expect objects that |
3159 | // _can_ be cross-origin. |
3160 | struct MaybeCrossOriginObjectThisPolicy; |
3161 | |
3162 | // A this-extraction policy which is just like |
3163 | // MaybeCrossOriginObjectThisPolicy but has lenient-this behavior. |
3164 | struct MaybeCrossOriginObjectLenientThisPolicy; |
3165 | |
3166 | // An exception-reporting policy for normal getters/setters/methods. |
3167 | struct ThrowExceptions; |
3168 | |
3169 | // An exception-handling policy for Promise-returning getters/methods. |
3170 | struct ConvertExceptionsToPromises; |
3171 | } // namespace binding_detail |
3172 | |
3173 | bool StaticMethodPromiseWrapper(JSContext* cx, unsigned argc, JS::Value* vp); |
3174 | |
3175 | // ConvertExceptionToPromise should only be called when we have an error |
3176 | // condition (e.g. returned false from a JSAPI method). Note that there may be |
3177 | // no exception on cx, in which case this is an uncatchable failure that will |
3178 | // simply be propagated. Otherwise this method will attempt to convert the |
3179 | // exception to a Promise rejected with the exception that it will store in |
3180 | // rval. |
3181 | bool ConvertExceptionToPromise(JSContext* cx, |
3182 | JS::MutableHandle<JS::Value> rval); |
3183 | |
3184 | #ifdef DEBUG1 |
3185 | void AssertReturnTypeMatchesJitinfo(const JSJitInfo* aJitinfo, |
3186 | JS::Handle<JS::Value> aValue); |
3187 | #endif |
3188 | |
3189 | bool CallerSubsumes(JSObject* aObject); |
3190 | |
3191 | MOZ_ALWAYS_INLINEinline bool CallerSubsumes(JS::Handle<JS::Value> aValue) { |
3192 | if (!aValue.isObject()) { |
3193 | return true; |
3194 | } |
3195 | return CallerSubsumes(&aValue.toObject()); |
3196 | } |
3197 | |
3198 | template <class T, class S> |
3199 | inline RefPtr<T> StrongOrRawPtr(already_AddRefed<S>&& aPtr) { |
3200 | return std::move(aPtr); |
3201 | } |
3202 | |
3203 | template <class T, class S> |
3204 | inline RefPtr<T> StrongOrRawPtr(RefPtr<S>&& aPtr) { |
3205 | return std::move(aPtr); |
3206 | } |
3207 | |
3208 | template <class T, typename = std::enable_if_t<IsRefcounted<T>::value>> |
3209 | inline T* StrongOrRawPtr(T* aPtr) { |
3210 | return aPtr; |
3211 | } |
3212 | |
3213 | template <class T, class S, |
3214 | typename = std::enable_if_t<!IsRefcounted<S>::value>> |
3215 | inline UniquePtr<T> StrongOrRawPtr(UniquePtr<S>&& aPtr) { |
3216 | return std::move(aPtr); |
3217 | } |
3218 | |
3219 | template <class T, template <typename> class SmartPtr, class S> |
3220 | inline void StrongOrRawPtr(SmartPtr<S>&& aPtr) = delete; |
3221 | |
3222 | template <class T> |
3223 | using StrongPtrForMember = |
3224 | std::conditional_t<IsRefcounted<T>::value, RefPtr<T>, UniquePtr<T>>; |
3225 | |
3226 | namespace binding_detail { |
3227 | inline JSObject* GetHackedNamespaceProtoObject(JSContext* aCx) { |
3228 | return JS_NewPlainObject(aCx); |
3229 | } |
3230 | } // namespace binding_detail |
3231 | |
3232 | // Resolve an id on the given global object that wants to be included in |
3233 | // Exposed=System webidl annotations. False return value means exception |
3234 | // thrown. |
3235 | bool SystemGlobalResolve(JSContext* cx, JS::Handle<JSObject*> obj, |
3236 | JS::Handle<jsid> id, bool* resolvedp); |
3237 | |
3238 | // Enumerate all ids on the given global object that wants to be included in |
3239 | // Exposed=System webidl annotations. False return value means exception |
3240 | // thrown. |
3241 | bool SystemGlobalEnumerate(JSContext* cx, JS::Handle<JSObject*> obj); |
3242 | |
3243 | // Slot indexes for maplike/setlike forEach functions |
3244 | #define FOREACH_CALLBACK_SLOT0 0 |
3245 | #define FOREACH_MAPLIKEORSETLIKEOBJ_SLOT1 1 |
3246 | |
3247 | // Backing function for running .forEach() on maplike/setlike interfaces. |
3248 | // Unpacks callback and maplike/setlike object from reserved slots, then runs |
3249 | // callback for each key (and value, for maplikes) |
3250 | bool ForEachHandler(JSContext* aCx, unsigned aArgc, JS::Value* aVp); |
3251 | |
3252 | // Unpacks backing object (ES6 map/set) from the reserved slot of a reflector |
3253 | // for a maplike/setlike interface. If backing object does not exist, creates |
3254 | // backing object in the compartment of the reflector involved, making this safe |
3255 | // to use across compartments/via xrays. Return values of these methods will |
3256 | // always be in the context compartment. |
3257 | bool GetMaplikeBackingObject(JSContext* aCx, JS::Handle<JSObject*> aObj, |
3258 | size_t aSlotIndex, |
3259 | JS::MutableHandle<JSObject*> aBackingObj, |
3260 | bool* aBackingObjCreated); |
3261 | bool GetSetlikeBackingObject(JSContext* aCx, JS::Handle<JSObject*> aObj, |
3262 | size_t aSlotIndex, |
3263 | JS::MutableHandle<JSObject*> aBackingObj, |
3264 | bool* aBackingObjCreated); |
3265 | |
3266 | // Unpacks backing object (ES Proxy exotic object) from the reserved slot of a |
3267 | // reflector for a observableArray attribute. If backing object does not exist, |
3268 | // creates backing object in the compartment of the reflector involved, making |
3269 | // this safe to use across compartments/via xrays. Return values of these |
3270 | // methods will always be in the context compartment. |
3271 | bool GetObservableArrayBackingObject( |
3272 | JSContext* aCx, JS::Handle<JSObject*> aObj, size_t aSlotIndex, |
3273 | JS::MutableHandle<JSObject*> aBackingObj, bool* aBackingObjCreated, |
3274 | const ObservableArrayProxyHandler* aHandler, void* aOwner); |
3275 | |
3276 | // Get the desired prototype object for an object construction from the given |
3277 | // CallArgs. The CallArgs must be for a constructor call. The |
3278 | // aProtoId/aCreator arguments are used to get a default if we don't find a |
3279 | // prototype on the newTarget of the callargs. |
3280 | bool GetDesiredProto(JSContext* aCx, const JS::CallArgs& aCallArgs, |
3281 | prototypes::id::ID aProtoId, |
3282 | CreateInterfaceObjectsMethod aCreator, |
3283 | JS::MutableHandle<JSObject*> aDesiredProto); |
3284 | |
3285 | // This function is expected to be called from the constructor function for an |
3286 | // HTML or XUL element interface; the global/callargs need to be whatever was |
3287 | // passed to that constructor function. |
3288 | already_AddRefed<Element> CreateXULOrHTMLElement( |
3289 | const GlobalObject& aGlobal, const JS::CallArgs& aCallArgs, |
3290 | JS::Handle<JSObject*> aGivenProto, ErrorResult& aRv); |
3291 | |
3292 | void SetUseCounter(JSObject* aObject, UseCounter aUseCounter); |
3293 | void SetUseCounter(UseCounterWorker aUseCounter); |
3294 | |
3295 | // Warnings |
3296 | void DeprecationWarning(JSContext* aCx, JSObject* aObject, |
3297 | DeprecatedOperations aOperation); |
3298 | |
3299 | void DeprecationWarning(const GlobalObject& aGlobal, |
3300 | DeprecatedOperations aOperation); |
3301 | |
3302 | namespace binding_detail { |
3303 | // Get a JS global object that can be used for some temporary allocations. The |
3304 | // idea is that this should be used for situations when you need to operate in |
3305 | // _some_ compartment but don't care which one. A typical example is when you |
3306 | // have non-JS input, non-JS output, but have to go through some sort of JS |
3307 | // representation in the middle, so need a compartment to allocate things in. |
3308 | // |
3309 | // It's VERY important that any consumers of this function only do things that |
3310 | // are guaranteed to be side-effect-free, even in the face of a script |
3311 | // environment controlled by a hostile adversary. This is because in the worker |
3312 | // case the global is in fact the worker global, so it and its standard objects |
3313 | // are controlled by the worker script. This is why this function is in the |
3314 | // binding_detail namespace. Any use of this function MUST be very carefully |
3315 | // reviewed by someone who is sufficiently devious and has a very good |
3316 | // understanding of all the code that will run while we're using the return |
3317 | // value, including the SpiderMonkey parts. |
3318 | JSObject* UnprivilegedJunkScopeOrWorkerGlobal(const fallible_t&); |
3319 | |
3320 | // Implementation of the [HTMLConstructor] extended attribute. |
3321 | bool HTMLConstructor(JSContext* aCx, unsigned aArgc, JS::Value* aVp, |
3322 | constructors::id::ID aConstructorId, |
3323 | prototypes::id::ID aProtoId, |
3324 | CreateInterfaceObjectsMethod aCreator); |
3325 | |
3326 | // A method to test whether an attribute with the given JSJitGetterOp getter is |
3327 | // enabled in the given set of prefable proeprty specs. For use for toJSON |
3328 | // conversions. aObj is the object that would be used as the "this" value. |
3329 | bool IsGetterEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj, |
3330 | JSJitGetterOp aGetter, |
3331 | const Prefable<const JSPropertySpec>* aAttributes); |
3332 | |
3333 | // A class that can be used to examine the chars of a linear string. |
3334 | class StringIdChars { |
3335 | public: |
3336 | // Require a non-const ref to an AutoRequireNoGC to prevent callers |
3337 | // from passing temporaries. |
3338 | StringIdChars(JS::AutoRequireNoGC& nogc, JSLinearString* str) { |
3339 | mIsLatin1 = JS::LinearStringHasLatin1Chars(str); |
3340 | if (mIsLatin1) { |
3341 | mLatin1Chars = JS::GetLatin1LinearStringChars(nogc, str); |
3342 | } else { |
3343 | mTwoByteChars = JS::GetTwoByteLinearStringChars(nogc, str); |
3344 | } |
3345 | #ifdef DEBUG1 |
3346 | mLength = JS::GetLinearStringLength(str); |
3347 | #endif // DEBUG |
3348 | } |
3349 | |
3350 | MOZ_ALWAYS_INLINEinline char16_t operator[](size_t index) { |
3351 | MOZ_ASSERT(index < mLength)do { static_assert( mozilla::detail::AssertionConditionType< decltype(index < mLength)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(index < mLength))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("index < mLength" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/mozilla/dom/BindingUtils.h" , 3351); AnnotateMozCrashReason("MOZ_ASSERT" "(" "index < mLength" ")"); do { *((volatile int*)__null) = 3351; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
3352 | if (mIsLatin1) { |
3353 | return mLatin1Chars[index]; |
3354 | } |
3355 | return mTwoByteChars[index]; |
3356 | } |
3357 | |
3358 | private: |
3359 | bool mIsLatin1; |
3360 | union { |
3361 | const JS::Latin1Char* mLatin1Chars; |
3362 | const char16_t* mTwoByteChars; |
3363 | }; |
3364 | #ifdef DEBUG1 |
3365 | size_t mLength; |
3366 | #endif // DEBUG |
3367 | }; |
3368 | |
3369 | already_AddRefed<Promise> CreateRejectedPromiseFromThrownException( |
3370 | JSContext* aCx, ErrorResult& aError); |
3371 | |
3372 | template <auto ConstructorEnabled> |
3373 | inline bool ShouldExpose(JSContext* aCx, JS::Handle<JSObject*> aGlobal, |
3374 | DefineInterfaceProperty aDefine) { |
3375 | return aDefine == DefineInterfaceProperty::Always || |
3376 | (aDefine == DefineInterfaceProperty::CheckExposure && |
3377 | ConstructorEnabled(aCx, aGlobal)); |
3378 | } |
3379 | |
3380 | } // namespace binding_detail |
3381 | |
3382 | } // namespace dom |
3383 | |
3384 | } // namespace mozilla |
3385 | |
3386 | #endif /* mozilla_dom_BindingUtils_h__ */ |
1 | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- | |||
2 | * vim: set ts=8 sts=2 et sw=2 tw=80: | |||
3 | * This Source Code Form is subject to the terms of the Mozilla Public | |||
4 | * License, v. 2.0. If a copy of the MPL was not distributed with this | |||
5 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |||
6 | ||||
7 | #ifndef js_RootingAPI_h | |||
8 | #define js_RootingAPI_h | |||
9 | ||||
10 | #include "mozilla/Attributes.h" | |||
11 | #include "mozilla/DebugOnly.h" | |||
12 | #include "mozilla/EnumeratedArray.h" | |||
13 | #include "mozilla/LinkedList.h" | |||
14 | #include "mozilla/Maybe.h" | |||
15 | ||||
16 | #include <tuple> | |||
17 | #include <type_traits> | |||
18 | #include <utility> | |||
19 | ||||
20 | #include "jspubtd.h" | |||
21 | ||||
22 | #include "js/ComparisonOperators.h" // JS::detail::DefineComparisonOps | |||
23 | #include "js/GCAnnotations.h" | |||
24 | #include "js/GCPolicyAPI.h" | |||
25 | #include "js/GCTypeMacros.h" // JS_FOR_EACH_PUBLIC_{,TAGGED_}GC_POINTER_TYPE | |||
26 | #include "js/HashTable.h" | |||
27 | #include "js/HeapAPI.h" // StackKindCount | |||
28 | #include "js/ProfilingStack.h" | |||
29 | #include "js/Realm.h" | |||
30 | #include "js/Stack.h" // JS::NativeStackLimit | |||
31 | #include "js/TypeDecls.h" | |||
32 | #include "js/UniquePtr.h" | |||
33 | ||||
34 | /* | |||
35 | * [SMDOC] Stack Rooting | |||
36 | * | |||
37 | * Moving GC Stack Rooting | |||
38 | * | |||
39 | * A moving GC may change the physical location of GC allocated things, even | |||
40 | * when they are rooted, updating all pointers to the thing to refer to its new | |||
41 | * location. The GC must therefore know about all live pointers to a thing, | |||
42 | * not just one of them, in order to behave correctly. | |||
43 | * | |||
44 | * The |Rooted| and |Handle| classes below are used to root stack locations | |||
45 | * whose value may be held live across a call that can trigger GC. For a | |||
46 | * code fragment such as: | |||
47 | * | |||
48 | * JSObject* obj = NewObject(cx); | |||
49 | * DoSomething(cx); | |||
50 | * ... = obj->lastProperty(); | |||
51 | * | |||
52 | * If |DoSomething()| can trigger a GC, the stack location of |obj| must be | |||
53 | * rooted to ensure that the GC does not move the JSObject referred to by | |||
54 | * |obj| without updating |obj|'s location itself. This rooting must happen | |||
55 | * regardless of whether there are other roots which ensure that the object | |||
56 | * itself will not be collected. | |||
57 | * | |||
58 | * If |DoSomething()| cannot trigger a GC, and the same holds for all other | |||
59 | * calls made between |obj|'s definitions and its last uses, then no rooting | |||
60 | * is required. | |||
61 | * | |||
62 | * SpiderMonkey can trigger a GC at almost any time and in ways that are not | |||
63 | * always clear. For example, the following innocuous-looking actions can | |||
64 | * cause a GC: allocation of any new GC thing; JSObject::hasProperty; | |||
65 | * JS_ReportError and friends; and ToNumber, among many others. The following | |||
66 | * dangerous-looking actions cannot trigger a GC: js_malloc, cx->malloc_, | |||
67 | * rt->malloc_, and friends and JS_ReportOutOfMemory. | |||
68 | * | |||
69 | * The following family of three classes will exactly root a stack location. | |||
70 | * Incorrect usage of these classes will result in a compile error in almost | |||
71 | * all cases. Therefore, it is very hard to be incorrectly rooted if you use | |||
72 | * these classes exclusively. These classes are all templated on the type T of | |||
73 | * the value being rooted. | |||
74 | * | |||
75 | * - Rooted<T> declares a variable of type T, whose value is always rooted. | |||
76 | * Rooted<T> may be automatically coerced to a Handle<T>, below. Rooted<T> | |||
77 | * should be used whenever a local variable's value may be held live across a | |||
78 | * call which can trigger a GC. | |||
79 | * | |||
80 | * - Handle<T> is a const reference to a Rooted<T>. Functions which take GC | |||
81 | * things or values as arguments and need to root those arguments should | |||
82 | * generally use handles for those arguments and avoid any explicit rooting. | |||
83 | * This has two benefits. First, when several such functions call each other | |||
84 | * then redundant rooting of multiple copies of the GC thing can be avoided. | |||
85 | * Second, if the caller does not pass a rooted value a compile error will be | |||
86 | * generated, which is quicker and easier to fix than when relying on a | |||
87 | * separate rooting analysis. | |||
88 | * | |||
89 | * - MutableHandle<T> is a non-const reference to Rooted<T>. It is used in the | |||
90 | * same way as Handle<T> and includes a |set(const T& v)| method to allow | |||
91 | * updating the value of the referenced Rooted<T>. A MutableHandle<T> can be | |||
92 | * created with an implicit cast from a Rooted<T>*. | |||
93 | * | |||
94 | * In some cases the small performance overhead of exact rooting (measured to | |||
95 | * be a few nanoseconds on desktop) is too much. In these cases, try the | |||
96 | * following: | |||
97 | * | |||
98 | * - Move all Rooted<T> above inner loops: this allows you to re-use the root | |||
99 | * on each iteration of the loop. | |||
100 | * | |||
101 | * - Pass Handle<T> through your hot call stack to avoid re-rooting costs at | |||
102 | * every invocation. | |||
103 | * | |||
104 | * The following diagram explains the list of supported, implicit type | |||
105 | * conversions between classes of this family: | |||
106 | * | |||
107 | * Rooted<T> ----> Handle<T> | |||
108 | * | ^ | |||
109 | * | | | |||
110 | * | | | |||
111 | * +---> MutableHandle<T> | |||
112 | * (via &) | |||
113 | * | |||
114 | * All of these types have an implicit conversion to raw pointers. | |||
115 | */ | |||
116 | ||||
117 | namespace js { | |||
118 | ||||
119 | class Nursery; | |||
120 | ||||
121 | // The defaulted Enable parameter for the following two types is for restricting | |||
122 | // specializations with std::enable_if. | |||
123 | template <typename T, typename Enable = void> | |||
124 | struct BarrierMethods {}; | |||
125 | ||||
126 | template <typename Element, typename Wrapper, typename Enable = void> | |||
127 | class WrappedPtrOperations {}; | |||
128 | ||||
129 | template <typename Element, typename Wrapper> | |||
130 | class MutableWrappedPtrOperations | |||
131 | : public WrappedPtrOperations<Element, Wrapper> {}; | |||
132 | ||||
133 | template <typename T, typename Wrapper> | |||
134 | class RootedOperations : public MutableWrappedPtrOperations<T, Wrapper> {}; | |||
135 | ||||
136 | template <typename T, typename Wrapper> | |||
137 | class HandleOperations : public WrappedPtrOperations<T, Wrapper> {}; | |||
138 | ||||
139 | template <typename T, typename Wrapper> | |||
140 | class MutableHandleOperations : public MutableWrappedPtrOperations<T, Wrapper> { | |||
141 | }; | |||
142 | ||||
143 | template <typename T, typename Wrapper> | |||
144 | class HeapOperations : public MutableWrappedPtrOperations<T, Wrapper> {}; | |||
145 | ||||
146 | // Cannot use FOR_EACH_HEAP_ABLE_GC_POINTER_TYPE, as this would import too many | |||
147 | // macros into scope | |||
148 | ||||
149 | // Add a 2nd template parameter to allow conditionally enabling partial | |||
150 | // specializations via std::enable_if. | |||
151 | template <typename T, typename Enable = void> | |||
152 | struct IsHeapConstructibleType : public std::false_type {}; | |||
153 | ||||
154 | #define JS_DECLARE_IS_HEAP_CONSTRUCTIBLE_TYPE(T)template <> struct IsHeapConstructibleType<T> : public std::true_type {}; \ | |||
155 | template <> \ | |||
156 | struct IsHeapConstructibleType<T> : public std::true_type {}; | |||
157 | JS_FOR_EACH_PUBLIC_GC_POINTER_TYPE(JS_DECLARE_IS_HEAP_CONSTRUCTIBLE_TYPE)template <> struct IsHeapConstructibleType<JS::BigInt *> : public std::true_type {}; template <> struct IsHeapConstructibleType <JS::Symbol*> : public std::true_type {}; template < > struct IsHeapConstructibleType<JSAtom*> : public std ::true_type {}; template <> struct IsHeapConstructibleType <JSFunction*> : public std::true_type {}; template < > struct IsHeapConstructibleType<JSLinearString*> : public std::true_type {}; template <> struct IsHeapConstructibleType <JSObject*> : public std::true_type {}; template <> struct IsHeapConstructibleType<JSScript*> : public std ::true_type {}; template <> struct IsHeapConstructibleType <JSString*> : public std::true_type {}; | |||
158 | JS_FOR_EACH_PUBLIC_TAGGED_GC_POINTER_TYPE(JS_DECLARE_IS_HEAP_CONSTRUCTIBLE_TYPE)template <> struct IsHeapConstructibleType<JS::Value > : public std::true_type {}; template <> struct IsHeapConstructibleType <JS::PropertyKey> : public std::true_type {}; | |||
159 | // Note that JS_DECLARE_IS_HEAP_CONSTRUCTIBLE_TYPE is left defined, to allow | |||
160 | // declaring other types (eg from js/public/experimental/TypedData.h) to | |||
161 | // be used with Heap<>. | |||
162 | ||||
163 | namespace gc { | |||
164 | struct Cell; | |||
165 | } /* namespace gc */ | |||
166 | ||||
167 | // Important: Return a reference so passing a Rooted<T>, etc. to | |||
168 | // something that takes a |const T&| is not a GC hazard. | |||
169 | #define DECLARE_POINTER_CONSTREF_OPS(T)operator const T&() const { return get(); } const T& operator ->() const { return get(); } \ | |||
170 | operator const T&() const { return get(); } \ | |||
171 | const T& operator->() const { return get(); } | |||
172 | ||||
173 | // Assignment operators on a base class are hidden by the implicitly defined | |||
174 | // operator= on the derived class. Thus, define the operator= directly on the | |||
175 | // class as we would need to manually pass it through anyway. | |||
176 | #define DECLARE_POINTER_ASSIGN_OPS(Wrapper, T)Wrapper& operator=(const T& p) { set(p); return *this ; } Wrapper& operator=(T&& p) { set(std::move(p)) ; return *this; } Wrapper& operator=(const Wrapper& other ) { set(other.get()); return *this; } \ | |||
177 | Wrapper& operator=(const T& p) { \ | |||
178 | set(p); \ | |||
179 | return *this; \ | |||
180 | } \ | |||
181 | Wrapper& operator=(T&& p) { \ | |||
182 | set(std::move(p)); \ | |||
183 | return *this; \ | |||
184 | } \ | |||
185 | Wrapper& operator=(const Wrapper& other) { \ | |||
186 | set(other.get()); \ | |||
187 | return *this; \ | |||
188 | } | |||
189 | ||||
190 | #define DELETE_ASSIGNMENT_OPS(Wrapper, T)template <typename S> Wrapper<T>& operator=(S ) = delete; Wrapper<T>& operator=(const Wrapper< T>&) = delete; \ | |||
191 | template <typename S> \ | |||
192 | Wrapper<T>& operator=(S) = delete; \ | |||
193 | Wrapper<T>& operator=(const Wrapper<T>&) = delete; | |||
194 | ||||
195 | #define DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr)const T* address() const { return &(ptr); } const T& get () const { return (ptr); } \ | |||
196 | const T* address() const { return &(ptr); } \ | |||
197 | const T& get() const { return (ptr); } | |||
198 | ||||
199 | #define DECLARE_NONPOINTER_MUTABLE_ACCESSOR_METHODS(ptr)T* address() { return &(ptr); } T& get() { return (ptr ); } \ | |||
200 | T* address() { return &(ptr); } \ | |||
201 | T& get() { return (ptr); } | |||
202 | ||||
203 | } /* namespace js */ | |||
204 | ||||
205 | namespace JS { | |||
206 | ||||
207 | JS_PUBLIC_API void HeapObjectPostWriteBarrier(JSObject** objp, JSObject* prev, | |||
208 | JSObject* next); | |||
209 | JS_PUBLIC_API void HeapObjectWriteBarriers(JSObject** objp, JSObject* prev, | |||
210 | JSObject* next); | |||
211 | JS_PUBLIC_API void HeapStringWriteBarriers(JSString** objp, JSString* prev, | |||
212 | JSString* next); | |||
213 | JS_PUBLIC_API void HeapBigIntWriteBarriers(JS::BigInt** bip, JS::BigInt* prev, | |||
214 | JS::BigInt* next); | |||
215 | JS_PUBLIC_API void HeapScriptWriteBarriers(JSScript** objp, JSScript* prev, | |||
216 | JSScript* next); | |||
217 | ||||
218 | /** | |||
219 | * SafelyInitialized<T>::create() creates a safely-initialized |T|, suitable for | |||
220 | * use as a default value in situations requiring a safe but arbitrary |T| | |||
221 | * value. Implemented as a static method of a struct to allow partial | |||
222 | * specialization for subclasses via the Enable template parameter. | |||
223 | */ | |||
224 | template <typename T, typename Enable = void> | |||
225 | struct SafelyInitialized { | |||
226 | static T create() { | |||
227 | // This function wants to presume that |T()| -- which value-initializes a | |||
228 | // |T| per C++11 [expr.type.conv]p2 -- will produce a safely-initialized, | |||
229 | // safely-usable T that it can return. | |||
230 | ||||
231 | #if defined(XP_WIN) || defined(XP_DARWIN) || \ | |||
232 | (defined(XP_UNIX1) && !defined(__clang__1)) | |||
233 | ||||
234 | // That presumption holds for pointers, where value initialization produces | |||
235 | // a null pointer. | |||
236 | constexpr bool IsPointer = std::is_pointer_v<T>; | |||
237 | ||||
238 | // For classes and unions we *assume* that if |T|'s default constructor is | |||
239 | // non-trivial it'll initialize correctly. (This is unideal, but C++ | |||
240 | // doesn't offer a type trait indicating whether a class's constructor is | |||
241 | // user-defined, which better approximates our desired semantics.) | |||
242 | constexpr bool IsNonTriviallyDefaultConstructibleClassOrUnion = | |||
243 | (std::is_class_v<T> || std::is_union_v<T>) && | |||
244 | !std::is_trivially_default_constructible_v<T>; | |||
245 | ||||
246 | static_assert(IsPointer || IsNonTriviallyDefaultConstructibleClassOrUnion, | |||
247 | "T() must evaluate to a safely-initialized T"); | |||
248 | ||||
249 | #endif | |||
250 | ||||
251 | return T(); | |||
252 | } | |||
253 | }; | |||
254 | ||||
255 | #ifdef JS_DEBUG1 | |||
256 | /** | |||
257 | * For generational GC, assert that an object is in the tenured generation as | |||
258 | * opposed to being in the nursery. | |||
259 | */ | |||
260 | extern JS_PUBLIC_API void AssertGCThingMustBeTenured(JSObject* obj); | |||
261 | extern JS_PUBLIC_API void AssertGCThingIsNotNurseryAllocable( | |||
262 | js::gc::Cell* cell); | |||
263 | #else | |||
264 | inline void AssertGCThingMustBeTenured(JSObject* obj) {} | |||
265 | inline void AssertGCThingIsNotNurseryAllocable(js::gc::Cell* cell) {} | |||
266 | #endif | |||
267 | ||||
268 | /** | |||
269 | * The Heap<T> class is a heap-stored reference to a JS GC thing for use outside | |||
270 | * the JS engine. All members of heap classes that refer to GC things should use | |||
271 | * Heap<T> (or possibly TenuredHeap<T>, described below). | |||
272 | * | |||
273 | * Heap<T> is an abstraction that hides some of the complexity required to | |||
274 | * maintain GC invariants for the contained reference. It uses operator | |||
275 | * overloading to provide a normal pointer interface, but adds barriers to | |||
276 | * notify the GC of changes. | |||
277 | * | |||
278 | * Heap<T> implements the following barriers: | |||
279 | * | |||
280 | * - Pre-write barrier (necessary for incremental GC). | |||
281 | * - Post-write barrier (necessary for generational GC). | |||
282 | * - Read barrier (necessary for cycle collector integration). | |||
283 | * | |||
284 | * Heap<T> may be moved or destroyed outside of GC finalization and hence may be | |||
285 | * used in dynamic storage such as a Vector. | |||
286 | * | |||
287 | * Heap<T> instances must be traced when their containing object is traced to | |||
288 | * keep the pointed-to GC thing alive. | |||
289 | * | |||
290 | * Heap<T> objects should only be used on the heap. GC references stored on the | |||
291 | * C/C++ stack must use Rooted/Handle/MutableHandle instead. | |||
292 | * | |||
293 | * Type T must be a public GC pointer type. | |||
294 | */ | |||
295 | template <typename T> | |||
296 | class MOZ_NON_MEMMOVABLE Heap : public js::HeapOperations<T, Heap<T>> { | |||
297 | static_assert(js::IsHeapConstructibleType<T>::value, | |||
298 | "Type T must be a public GC pointer type"); | |||
299 | ||||
300 | public: | |||
301 | using ElementType = T; | |||
302 | ||||
303 | Heap() : ptr(SafelyInitialized<T>::create()) { | |||
304 | // No barriers are required for initialization to the default value. | |||
305 | static_assert(sizeof(T) == sizeof(Heap<T>), | |||
306 | "Heap<T> must be binary compatible with T."); | |||
307 | } | |||
308 | explicit Heap(const T& p) : ptr(p) { | |||
309 | writeBarriers(SafelyInitialized<T>::create(), ptr); | |||
310 | } | |||
311 | ||||
312 | /* | |||
313 | * For Heap, move semantics are equivalent to copy semantics. However, we want | |||
314 | * the copy constructor to be explicit, and an explicit move constructor | |||
315 | * breaks common usage of move semantics, so we need to define both, even | |||
316 | * though they are equivalent. | |||
317 | */ | |||
318 | explicit Heap(const Heap<T>& other) : ptr(other.unbarrieredGet()) { | |||
319 | writeBarriers(SafelyInitialized<T>::create(), ptr); | |||
320 | } | |||
321 | Heap(Heap<T>&& other) : ptr(other.unbarrieredGet()) { | |||
322 | writeBarriers(SafelyInitialized<T>::create(), ptr); | |||
323 | } | |||
324 | ||||
325 | Heap& operator=(Heap<T>&& other) { | |||
326 | set(other.unbarrieredGet()); | |||
327 | other.set(SafelyInitialized<T>::create()); | |||
328 | return *this; | |||
329 | } | |||
330 | // Copy constructor defined by DECLARE_POINTER_ASSIGN_OPS. | |||
331 | ||||
332 | ~Heap() { writeBarriers(ptr, SafelyInitialized<T>::create()); } | |||
333 | ||||
334 | DECLARE_POINTER_CONSTREF_OPS(T)operator const T&() const { return get(); } const T& operator ->() const { return get(); }; | |||
335 | DECLARE_POINTER_ASSIGN_OPS(Heap<T>, T)Heap<T>& operator=(const T& p) { set(p); return *this; } Heap<T>& operator=(T&& p) { set(std ::move(p)); return *this; } Heap<T>& operator=(const Heap<T>& other) { set(other.get()); return *this; }; | |||
336 | ||||
337 | void exposeToActiveJS() const { js::BarrierMethods<T>::exposeToJS(ptr); } | |||
338 | ||||
339 | const T& get() const { | |||
340 | exposeToActiveJS(); | |||
341 | return ptr; | |||
342 | } | |||
343 | const T& unbarrieredGet() const { return ptr; } | |||
344 | ||||
345 | void set(const T& newPtr) { | |||
346 | T tmp = ptr; | |||
347 | ptr = newPtr; | |||
348 | writeBarriers(tmp, ptr); | |||
349 | } | |||
350 | void unbarrieredSet(const T& newPtr) { ptr = newPtr; } | |||
351 | ||||
352 | T* unsafeAddress() { return &ptr; } | |||
353 | const T* unsafeAddress() const { return &ptr; } | |||
354 | ||||
355 | explicit operator bool() const { | |||
356 | return bool(js::BarrierMethods<T>::asGCThingOrNull(ptr)); | |||
357 | } | |||
358 | ||||
359 | private: | |||
360 | void writeBarriers(const T& prev, const T& next) { | |||
361 | js::BarrierMethods<T>::writeBarriers(&ptr, prev, next); | |||
362 | } | |||
363 | ||||
364 | T ptr; | |||
365 | }; | |||
366 | ||||
367 | namespace detail { | |||
368 | ||||
369 | template <typename T> | |||
370 | struct DefineComparisonOps<Heap<T>> : std::true_type { | |||
371 | static const T& get(const Heap<T>& v) { return v.unbarrieredGet(); } | |||
372 | }; | |||
373 | ||||
374 | } // namespace detail | |||
375 | ||||
376 | static MOZ_ALWAYS_INLINEinline bool ObjectIsTenured(JSObject* obj) { | |||
377 | return !js::gc::IsInsideNursery(reinterpret_cast<js::gc::Cell*>(obj)); | |||
378 | } | |||
379 | ||||
380 | static MOZ_ALWAYS_INLINEinline bool ObjectIsTenured(const Heap<JSObject*>& obj) { | |||
381 | return ObjectIsTenured(obj.unbarrieredGet()); | |||
382 | } | |||
383 | ||||
384 | static MOZ_ALWAYS_INLINEinline bool ObjectIsMarkedGray(JSObject* obj) { | |||
385 | auto cell = reinterpret_cast<js::gc::Cell*>(obj); | |||
386 | if (js::gc::IsInsideNursery(cell)) { | |||
387 | return false; | |||
388 | } | |||
389 | ||||
390 | auto tenuredCell = reinterpret_cast<js::gc::TenuredCell*>(cell); | |||
391 | return js::gc::detail::CellIsMarkedGrayIfKnown(tenuredCell); | |||
392 | } | |||
393 | ||||
394 | static MOZ_ALWAYS_INLINEinline bool ObjectIsMarkedGray( | |||
395 | const JS::Heap<JSObject*>& obj) { | |||
396 | return ObjectIsMarkedGray(obj.unbarrieredGet()); | |||
397 | } | |||
398 | ||||
399 | // The following *IsNotGray functions take account of the eventual | |||
400 | // gray marking state at the end of any ongoing incremental GC by | |||
401 | // delaying the checks if necessary. | |||
402 | ||||
403 | #ifdef DEBUG1 | |||
404 | ||||
405 | inline void AssertCellIsNotGray(const js::gc::Cell* maybeCell) { | |||
406 | if (maybeCell) { | |||
407 | js::gc::detail::AssertCellIsNotGray(maybeCell); | |||
408 | } | |||
409 | } | |||
410 | ||||
411 | inline void AssertObjectIsNotGray(JSObject* maybeObj) { | |||
412 | AssertCellIsNotGray(reinterpret_cast<js::gc::Cell*>(maybeObj)); | |||
413 | } | |||
414 | ||||
415 | inline void AssertObjectIsNotGray(const JS::Heap<JSObject*>& obj) { | |||
416 | AssertObjectIsNotGray(obj.unbarrieredGet()); | |||
417 | } | |||
418 | ||||
419 | #else | |||
420 | ||||
421 | inline void AssertCellIsNotGray(js::gc::Cell* maybeCell) {} | |||
422 | inline void AssertObjectIsNotGray(JSObject* maybeObj) {} | |||
423 | inline void AssertObjectIsNotGray(const JS::Heap<JSObject*>& obj) {} | |||
424 | ||||
425 | #endif | |||
426 | ||||
427 | /** | |||
428 | * The TenuredHeap<T> class is similar to the Heap<T> class above in that it | |||
429 | * encapsulates the GC concerns of an on-heap reference to a JS object. However, | |||
430 | * it has two important differences: | |||
431 | * | |||
432 | * 1) Pointers which are statically known to only reference "tenured" objects | |||
433 | * can avoid the extra overhead of SpiderMonkey's post write barriers. | |||
434 | * | |||
435 | * 2) Objects in the "tenured" heap have stronger alignment restrictions than | |||
436 | * those in the "nursery", so it is possible to store flags in the lower | |||
437 | * bits of pointers known to be tenured. TenuredHeap wraps a normal tagged | |||
438 | * pointer with a nice API for accessing the flag bits and adds various | |||
439 | * assertions to ensure that it is not mis-used. | |||
440 | * | |||
441 | * GC things are said to be "tenured" when they are located in the long-lived | |||
442 | * heap: e.g. they have gained tenure as an object by surviving past at least | |||
443 | * one GC. For performance, SpiderMonkey allocates some things which are known | |||
444 | * to normally be long lived directly into the tenured generation; for example, | |||
445 | * global objects. Additionally, SpiderMonkey does not visit individual objects | |||
446 | * when deleting non-tenured objects, so object with finalizers are also always | |||
447 | * tenured; for instance, this includes most DOM objects. | |||
448 | * | |||
449 | * The considerations to keep in mind when using a TenuredHeap<T> vs a normal | |||
450 | * Heap<T> are: | |||
451 | * | |||
452 | * - It is invalid for a TenuredHeap<T> to refer to a non-tenured thing. | |||
453 | * - It is however valid for a Heap<T> to refer to a tenured thing. | |||
454 | * - It is not possible to store flag bits in a Heap<T>. | |||
455 | */ | |||
456 | template <typename T> | |||
457 | class TenuredHeap : public js::HeapOperations<T, TenuredHeap<T>> { | |||
458 | static_assert(js::IsHeapConstructibleType<T>::value, | |||
459 | "Type T must be a public GC pointer type"); | |||
460 | ||||
461 | public: | |||
462 | using ElementType = T; | |||
463 | ||||
464 | TenuredHeap() : bits(0) { | |||
465 | static_assert(sizeof(T) == sizeof(TenuredHeap<T>), | |||
466 | "TenuredHeap<T> must be binary compatible with T."); | |||
467 | } | |||
468 | ||||
469 | explicit TenuredHeap(T p) : bits(0) { unbarrieredSetPtr(p); } | |||
470 | explicit TenuredHeap(const TenuredHeap<T>& p) : bits(0) { | |||
471 | unbarrieredSetPtr(p.getPtr()); | |||
472 | } | |||
473 | ||||
474 | TenuredHeap<T>& operator=(T p) { | |||
475 | setPtr(p); | |||
476 | return *this; | |||
477 | } | |||
478 | TenuredHeap<T>& operator=(const TenuredHeap<T>& other) { | |||
479 | preWriteBarrier(); | |||
480 | bits = other.bits; | |||
481 | return *this; | |||
482 | } | |||
483 | ||||
484 | ~TenuredHeap() { preWriteBarrier(); } | |||
485 | ||||
486 | void setPtr(T newPtr) { | |||
487 | preWriteBarrier(); | |||
488 | unbarrieredSetPtr(newPtr); | |||
489 | } | |||
490 | void unbarrieredSetPtr(T newPtr) { | |||
491 | MOZ_ASSERT((reinterpret_cast<uintptr_t>(newPtr) & flagsMask) == 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype((reinterpret_cast<uintptr_t>(newPtr) & flagsMask ) == 0)>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!((reinterpret_cast<uintptr_t>(newPtr) & flagsMask ) == 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("(reinterpret_cast<uintptr_t>(newPtr) & flagsMask) == 0" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 491); AnnotateMozCrashReason("MOZ_ASSERT" "(" "(reinterpret_cast<uintptr_t>(newPtr) & flagsMask) == 0" ")"); do { *((volatile int*)__null) = 491; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
492 | MOZ_ASSERT(js::gc::IsCellPointerValidOrNull(newPtr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(js::gc::IsCellPointerValidOrNull(newPtr))>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!(js::gc::IsCellPointerValidOrNull(newPtr)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("js::gc::IsCellPointerValidOrNull(newPtr)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 492); AnnotateMozCrashReason("MOZ_ASSERT" "(" "js::gc::IsCellPointerValidOrNull(newPtr)" ")"); do { *((volatile int*)__null) = 492; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
493 | if (newPtr) { | |||
494 | AssertGCThingMustBeTenured(newPtr); | |||
495 | } | |||
496 | bits = (bits & flagsMask) | reinterpret_cast<uintptr_t>(newPtr); | |||
497 | } | |||
498 | ||||
499 | void setFlags(uintptr_t flagsToSet) { | |||
500 | MOZ_ASSERT((flagsToSet & ~flagsMask) == 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype((flagsToSet & ~flagsMask) == 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!((flagsToSet & ~flagsMask ) == 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("(flagsToSet & ~flagsMask) == 0", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 500); AnnotateMozCrashReason("MOZ_ASSERT" "(" "(flagsToSet & ~flagsMask) == 0" ")"); do { *((volatile int*)__null) = 500; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
501 | bits |= flagsToSet; | |||
502 | } | |||
503 | ||||
504 | void unsetFlags(uintptr_t flagsToUnset) { | |||
505 | MOZ_ASSERT((flagsToUnset & ~flagsMask) == 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype((flagsToUnset & ~flagsMask) == 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!((flagsToUnset & ~flagsMask ) == 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("(flagsToUnset & ~flagsMask) == 0", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 505); AnnotateMozCrashReason("MOZ_ASSERT" "(" "(flagsToUnset & ~flagsMask) == 0" ")"); do { *((volatile int*)__null) = 505; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
506 | bits &= ~flagsToUnset; | |||
507 | } | |||
508 | ||||
509 | bool hasFlag(uintptr_t flag) const { | |||
510 | MOZ_ASSERT((flag & ~flagsMask) == 0)do { static_assert( mozilla::detail::AssertionConditionType< decltype((flag & ~flagsMask) == 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!((flag & ~flagsMask) == 0 ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "(flag & ~flagsMask) == 0", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 510); AnnotateMozCrashReason("MOZ_ASSERT" "(" "(flag & ~flagsMask) == 0" ")"); do { *((volatile int*)__null) = 510; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
511 | return (bits & flag) != 0; | |||
512 | } | |||
513 | ||||
514 | T unbarrieredGetPtr() const { return reinterpret_cast<T>(bits & ~flagsMask); } | |||
515 | uintptr_t getFlags() const { return bits & flagsMask; } | |||
516 | ||||
517 | void exposeToActiveJS() const { | |||
518 | js::BarrierMethods<T>::exposeToJS(unbarrieredGetPtr()); | |||
519 | } | |||
520 | T getPtr() const { | |||
521 | exposeToActiveJS(); | |||
522 | return unbarrieredGetPtr(); | |||
523 | } | |||
524 | ||||
525 | operator T() const { return getPtr(); } | |||
526 | T operator->() const { return getPtr(); } | |||
527 | ||||
528 | explicit operator bool() const { | |||
529 | return bool(js::BarrierMethods<T>::asGCThingOrNull(unbarrieredGetPtr())); | |||
530 | } | |||
531 | ||||
532 | private: | |||
533 | enum { | |||
534 | maskBits = 3, | |||
535 | flagsMask = (1 << maskBits) - 1, | |||
536 | }; | |||
537 | ||||
538 | void preWriteBarrier() { | |||
539 | if (T prev = unbarrieredGetPtr()) { | |||
540 | JS::IncrementalPreWriteBarrier(JS::GCCellPtr(prev)); | |||
541 | } | |||
542 | } | |||
543 | ||||
544 | uintptr_t bits; | |||
545 | }; | |||
546 | ||||
547 | namespace detail { | |||
548 | ||||
549 | template <typename T> | |||
550 | struct DefineComparisonOps<TenuredHeap<T>> : std::true_type { | |||
551 | static const T get(const TenuredHeap<T>& v) { return v.unbarrieredGetPtr(); } | |||
552 | }; | |||
553 | ||||
554 | } // namespace detail | |||
555 | ||||
556 | // std::swap uses a stack temporary, which prevents classes like Heap<T> | |||
557 | // from being declared MOZ_HEAP_CLASS. | |||
558 | template <typename T> | |||
559 | void swap(TenuredHeap<T>& aX, TenuredHeap<T>& aY) { | |||
560 | T tmp = aX; | |||
561 | aX = aY; | |||
562 | aY = tmp; | |||
563 | } | |||
564 | ||||
565 | template <typename T> | |||
566 | void swap(Heap<T>& aX, Heap<T>& aY) { | |||
567 | T tmp = aX; | |||
568 | aX = aY; | |||
569 | aY = tmp; | |||
570 | } | |||
571 | ||||
572 | static MOZ_ALWAYS_INLINEinline bool ObjectIsMarkedGray( | |||
573 | const JS::TenuredHeap<JSObject*>& obj) { | |||
574 | return ObjectIsMarkedGray(obj.unbarrieredGetPtr()); | |||
575 | } | |||
576 | ||||
577 | template <typename T> | |||
578 | class MutableHandle; | |||
579 | template <typename T> | |||
580 | class Rooted; | |||
581 | template <typename T, size_t N = SIZE_MAX(18446744073709551615UL)> | |||
582 | class RootedField; | |||
583 | template <typename T> | |||
584 | class PersistentRooted; | |||
585 | ||||
586 | /** | |||
587 | * Reference to a T that has been rooted elsewhere. This is most useful | |||
588 | * as a parameter type, which guarantees that the T lvalue is properly | |||
589 | * rooted. See "Move GC Stack Rooting" above. | |||
590 | * | |||
591 | * If you want to add additional methods to Handle for a specific | |||
592 | * specialization, define a HandleOperations<T> specialization containing them. | |||
593 | */ | |||
594 | template <typename T> | |||
595 | class MOZ_NONHEAP_CLASS Handle : public js::HandleOperations<T, Handle<T>> { | |||
596 | friend class MutableHandle<T>; | |||
597 | ||||
598 | public: | |||
599 | using ElementType = T; | |||
600 | ||||
601 | Handle(const Handle<T>&) = default; | |||
602 | ||||
603 | /* Creates a handle from a handle of a type convertible to T. */ | |||
604 | template <typename S> | |||
605 | MOZ_IMPLICIT Handle( | |||
606 | Handle<S> handle, | |||
607 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy = 0) { | |||
608 | static_assert(sizeof(Handle<T>) == sizeof(T*), | |||
609 | "Handle must be binary compatible with T*."); | |||
610 | ptr = reinterpret_cast<const T*>(handle.address()); | |||
611 | } | |||
612 | ||||
613 | MOZ_IMPLICIT Handle(decltype(nullptr)) { | |||
614 | static_assert(std::is_pointer_v<T>, | |||
615 | "nullptr_t overload not valid for non-pointer types"); | |||
616 | static void* const ConstNullValue = nullptr; | |||
617 | ptr = reinterpret_cast<const T*>(&ConstNullValue); | |||
618 | } | |||
619 | ||||
620 | MOZ_IMPLICIT Handle(MutableHandle<T> handle) { ptr = handle.address(); } | |||
621 | ||||
622 | /* | |||
623 | * Take care when calling this method! | |||
624 | * | |||
625 | * This creates a Handle from the raw location of a T. | |||
626 | * | |||
627 | * It should be called only if the following conditions hold: | |||
628 | * | |||
629 | * 1) the location of the T is guaranteed to be marked (for some reason | |||
630 | * other than being a Rooted), e.g., if it is guaranteed to be reachable | |||
631 | * from an implicit root. | |||
632 | * | |||
633 | * 2) the contents of the location are immutable, or at least cannot change | |||
634 | * for the lifetime of the handle, as its users may not expect its value | |||
635 | * to change underneath them. | |||
636 | */ | |||
637 | static constexpr Handle fromMarkedLocation(const T* p) { | |||
638 | return Handle(p, DeliberatelyChoosingThisOverload, | |||
639 | ImUsingThisOnlyInFromFromMarkedLocation); | |||
640 | } | |||
641 | ||||
642 | /* | |||
643 | * Construct a handle from an explicitly rooted location. This is the | |||
644 | * normal way to create a handle, and normally happens implicitly. | |||
645 | */ | |||
646 | template <typename S> | |||
647 | inline MOZ_IMPLICIT Handle( | |||
648 | const Rooted<S>& root, | |||
649 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy = 0); | |||
650 | ||||
651 | template <typename S> | |||
652 | inline MOZ_IMPLICIT Handle( | |||
653 | const PersistentRooted<S>& root, | |||
654 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy = 0); | |||
655 | ||||
656 | /* Construct a read only handle from a mutable handle. */ | |||
657 | template <typename S> | |||
658 | inline MOZ_IMPLICIT Handle( | |||
659 | MutableHandle<S>& root, | |||
660 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy = 0); | |||
661 | ||||
662 | template <size_t N, typename S> | |||
663 | inline MOZ_IMPLICIT Handle( | |||
664 | const RootedField<S, N>& rootedField, | |||
665 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy = 0); | |||
666 | ||||
667 | DECLARE_POINTER_CONSTREF_OPS(T)operator const T&() const { return get(); } const T& operator ->() const { return get(); }; | |||
668 | DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr)const T* address() const { return &(*ptr); } const T& get() const { return (*ptr); }; | |||
669 | ||||
670 | private: | |||
671 | Handle() = default; | |||
672 | DELETE_ASSIGNMENT_OPS(Handle, T)template <typename S> Handle<T>& operator=(S) = delete; Handle<T>& operator=(const Handle<T> &) = delete;; | |||
673 | ||||
674 | enum Disambiguator { DeliberatelyChoosingThisOverload = 42 }; | |||
675 | enum CallerIdentity { ImUsingThisOnlyInFromFromMarkedLocation = 17 }; | |||
676 | constexpr Handle(const T* p, Disambiguator, CallerIdentity) : ptr(p) {} | |||
677 | ||||
678 | const T* ptr; | |||
679 | }; | |||
680 | ||||
681 | namespace detail { | |||
682 | ||||
683 | template <typename T> | |||
684 | struct DefineComparisonOps<Handle<T>> : std::true_type { | |||
685 | static const T& get(const Handle<T>& v) { return v.get(); } | |||
686 | }; | |||
687 | ||||
688 | } // namespace detail | |||
689 | ||||
690 | /** | |||
691 | * Similar to a handle, but the underlying storage can be changed. This is | |||
692 | * useful for outparams. | |||
693 | * | |||
694 | * If you want to add additional methods to MutableHandle for a specific | |||
695 | * specialization, define a MutableHandleOperations<T> specialization containing | |||
696 | * them. | |||
697 | */ | |||
698 | template <typename T> | |||
699 | class MOZ_STACK_CLASS MutableHandle | |||
700 | : public js::MutableHandleOperations<T, MutableHandle<T>> { | |||
701 | public: | |||
702 | using ElementType = T; | |||
703 | ||||
704 | inline MOZ_IMPLICIT MutableHandle(Rooted<T>* root); | |||
705 | template <size_t N> | |||
706 | inline MOZ_IMPLICIT MutableHandle(RootedField<T, N>* root); | |||
707 | inline MOZ_IMPLICIT MutableHandle(PersistentRooted<T>* root); | |||
708 | ||||
709 | private: | |||
710 | // Disallow nullptr for overloading purposes. | |||
711 | MutableHandle(decltype(nullptr)) = delete; | |||
712 | ||||
713 | public: | |||
714 | MutableHandle(const MutableHandle<T>&) = default; | |||
715 | void set(const T& v) { | |||
716 | *ptr = v; | |||
717 | MOZ_ASSERT(GCPolicy<T>::isValid(*ptr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(GCPolicy<T>::isValid(*ptr))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(GCPolicy<T>::isValid(* ptr)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("GCPolicy<T>::isValid(*ptr)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 717); AnnotateMozCrashReason("MOZ_ASSERT" "(" "GCPolicy<T>::isValid(*ptr)" ")"); do { *((volatile int*)__null) = 717; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
718 | } | |||
719 | void set(T&& v) { | |||
720 | *ptr = std::move(v); | |||
721 | MOZ_ASSERT(GCPolicy<T>::isValid(*ptr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(GCPolicy<T>::isValid(*ptr))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(GCPolicy<T>::isValid(* ptr)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("GCPolicy<T>::isValid(*ptr)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 721); AnnotateMozCrashReason("MOZ_ASSERT" "(" "GCPolicy<T>::isValid(*ptr)" ")"); do { *((volatile int*)__null) = 721; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
722 | } | |||
723 | ||||
724 | /* | |||
725 | * This may be called only if the location of the T is guaranteed | |||
726 | * to be marked (for some reason other than being a Rooted), | |||
727 | * e.g., if it is guaranteed to be reachable from an implicit root. | |||
728 | * | |||
729 | * Create a MutableHandle from a raw location of a T. | |||
730 | */ | |||
731 | static MutableHandle fromMarkedLocation(T* p) { | |||
732 | MutableHandle h; | |||
733 | h.ptr = p; | |||
734 | return h; | |||
735 | } | |||
736 | ||||
737 | DECLARE_POINTER_CONSTREF_OPS(T)operator const T&() const { return get(); } const T& operator ->() const { return get(); }; | |||
738 | DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr)const T* address() const { return &(*ptr); } const T& get() const { return (*ptr); }; | |||
739 | DECLARE_NONPOINTER_MUTABLE_ACCESSOR_METHODS(*ptr)T* address() { return &(*ptr); } T& get() { return (* ptr); }; | |||
740 | ||||
741 | private: | |||
742 | MutableHandle() = default; | |||
743 | DELETE_ASSIGNMENT_OPS(MutableHandle, T)template <typename S> MutableHandle<T>& operator =(S) = delete; MutableHandle<T>& operator=(const MutableHandle <T>&) = delete;; | |||
744 | ||||
745 | T* ptr; | |||
746 | }; | |||
747 | ||||
748 | namespace detail { | |||
749 | ||||
750 | template <typename T> | |||
751 | struct DefineComparisonOps<MutableHandle<T>> : std::true_type { | |||
752 | static const T& get(const MutableHandle<T>& v) { return v.get(); } | |||
753 | }; | |||
754 | ||||
755 | } // namespace detail | |||
756 | ||||
757 | } /* namespace JS */ | |||
758 | ||||
759 | namespace js { | |||
760 | ||||
761 | namespace detail { | |||
762 | ||||
763 | // Default implementations for barrier methods on GC thing pointers. | |||
764 | template <typename T> | |||
765 | struct PtrBarrierMethodsBase { | |||
766 | static T* initial() { return nullptr; } | |||
767 | static gc::Cell* asGCThingOrNull(T* v) { | |||
768 | if (!v) { | |||
769 | return nullptr; | |||
770 | } | |||
771 | MOZ_ASSERT(uintptr_t(v) > 32)do { static_assert( mozilla::detail::AssertionConditionType< decltype(uintptr_t(v) > 32)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(uintptr_t(v) > 32))), 0)) ) { do { } while (false); MOZ_ReportAssertionFailure("uintptr_t(v) > 32" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 771); AnnotateMozCrashReason("MOZ_ASSERT" "(" "uintptr_t(v) > 32" ")"); do { *((volatile int*)__null) = 771; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
772 | return reinterpret_cast<gc::Cell*>(v); | |||
773 | } | |||
774 | static void exposeToJS(T* t) { | |||
775 | if (t) { | |||
776 | js::gc::ExposeGCThingToActiveJS(JS::GCCellPtr(t)); | |||
777 | } | |||
778 | } | |||
779 | static void readBarrier(T* t) { | |||
780 | if (t) { | |||
781 | js::gc::IncrementalReadBarrier(JS::GCCellPtr(t)); | |||
782 | } | |||
783 | } | |||
784 | }; | |||
785 | ||||
786 | } // namespace detail | |||
787 | ||||
788 | template <typename T> | |||
789 | struct BarrierMethods<T*> : public detail::PtrBarrierMethodsBase<T> { | |||
790 | static void writeBarriers(T** vp, T* prev, T* next) { | |||
791 | if (prev) { | |||
792 | JS::IncrementalPreWriteBarrier(JS::GCCellPtr(prev)); | |||
793 | } | |||
794 | if (next) { | |||
795 | JS::AssertGCThingIsNotNurseryAllocable( | |||
796 | reinterpret_cast<js::gc::Cell*>(next)); | |||
797 | } | |||
798 | } | |||
799 | }; | |||
800 | ||||
801 | template <> | |||
802 | struct BarrierMethods<JSObject*> | |||
803 | : public detail::PtrBarrierMethodsBase<JSObject> { | |||
804 | static void writeBarriers(JSObject** vp, JSObject* prev, JSObject* next) { | |||
805 | JS::HeapObjectWriteBarriers(vp, prev, next); | |||
806 | } | |||
807 | static void postWriteBarrier(JSObject** vp, JSObject* prev, JSObject* next) { | |||
808 | JS::HeapObjectPostWriteBarrier(vp, prev, next); | |||
809 | } | |||
810 | static void exposeToJS(JSObject* obj) { | |||
811 | if (obj) { | |||
812 | JS::ExposeObjectToActiveJS(obj); | |||
813 | } | |||
814 | } | |||
815 | }; | |||
816 | ||||
817 | template <> | |||
818 | struct BarrierMethods<JSFunction*> | |||
819 | : public detail::PtrBarrierMethodsBase<JSFunction> { | |||
820 | static void writeBarriers(JSFunction** vp, JSFunction* prev, | |||
821 | JSFunction* next) { | |||
822 | JS::HeapObjectWriteBarriers(reinterpret_cast<JSObject**>(vp), | |||
823 | reinterpret_cast<JSObject*>(prev), | |||
824 | reinterpret_cast<JSObject*>(next)); | |||
825 | } | |||
826 | static void exposeToJS(JSFunction* fun) { | |||
827 | if (fun) { | |||
828 | JS::ExposeObjectToActiveJS(reinterpret_cast<JSObject*>(fun)); | |||
829 | } | |||
830 | } | |||
831 | }; | |||
832 | ||||
833 | template <> | |||
834 | struct BarrierMethods<JSString*> | |||
835 | : public detail::PtrBarrierMethodsBase<JSString> { | |||
836 | static void writeBarriers(JSString** vp, JSString* prev, JSString* next) { | |||
837 | JS::HeapStringWriteBarriers(vp, prev, next); | |||
838 | } | |||
839 | }; | |||
840 | ||||
841 | template <> | |||
842 | struct BarrierMethods<JSScript*> | |||
843 | : public detail::PtrBarrierMethodsBase<JSScript> { | |||
844 | static void writeBarriers(JSScript** vp, JSScript* prev, JSScript* next) { | |||
845 | JS::HeapScriptWriteBarriers(vp, prev, next); | |||
846 | } | |||
847 | }; | |||
848 | ||||
849 | template <> | |||
850 | struct BarrierMethods<JS::BigInt*> | |||
851 | : public detail::PtrBarrierMethodsBase<JS::BigInt> { | |||
852 | static void writeBarriers(JS::BigInt** vp, JS::BigInt* prev, | |||
853 | JS::BigInt* next) { | |||
854 | JS::HeapBigIntWriteBarriers(vp, prev, next); | |||
855 | } | |||
856 | }; | |||
857 | ||||
858 | // Provide hash codes for Cell kinds that may be relocated and, thus, not have | |||
859 | // a stable address to use as the base for a hash code. Instead of the address, | |||
860 | // this hasher uses Cell::getUniqueId to provide exact matches and as a base | |||
861 | // for generating hash codes. | |||
862 | // | |||
863 | // Note: this hasher, like PointerHasher can "hash" a nullptr. While a nullptr | |||
864 | // would not likely be a useful key, there are some cases where being able to | |||
865 | // hash a nullptr is useful, either on purpose or because of bugs: | |||
866 | // (1) existence checks where the key may happen to be null and (2) some | |||
867 | // aggregate Lookup kinds embed a JSObject* that is frequently null and do not | |||
868 | // null test before dispatching to the hasher. | |||
869 | template <typename T> | |||
870 | struct JS_PUBLIC_API StableCellHasher { | |||
871 | using Key = T; | |||
872 | using Lookup = T; | |||
873 | ||||
874 | static bool maybeGetHash(const Lookup& l, mozilla::HashNumber* hashOut); | |||
875 | static bool ensureHash(const Lookup& l, HashNumber* hashOut); | |||
876 | static HashNumber hash(const Lookup& l); | |||
877 | static bool match(const Key& k, const Lookup& l); | |||
878 | // The rekey hash policy method is not provided since you dont't need to | |||
879 | // rekey any more when using this policy. | |||
880 | }; | |||
881 | ||||
882 | template <typename T> | |||
883 | struct JS_PUBLIC_API StableCellHasher<JS::Heap<T>> { | |||
884 | using Key = JS::Heap<T>; | |||
885 | using Lookup = T; | |||
886 | ||||
887 | static bool maybeGetHash(const Lookup& l, HashNumber* hashOut) { | |||
888 | return StableCellHasher<T>::maybeGetHash(l, hashOut); | |||
889 | } | |||
890 | static bool ensureHash(const Lookup& l, HashNumber* hashOut) { | |||
891 | return StableCellHasher<T>::ensureHash(l, hashOut); | |||
892 | } | |||
893 | static HashNumber hash(const Lookup& l) { | |||
894 | return StableCellHasher<T>::hash(l); | |||
895 | } | |||
896 | static bool match(const Key& k, const Lookup& l) { | |||
897 | return StableCellHasher<T>::match(k.unbarrieredGet(), l); | |||
898 | } | |||
899 | }; | |||
900 | ||||
901 | } // namespace js | |||
902 | ||||
903 | namespace mozilla { | |||
904 | ||||
905 | template <typename T> | |||
906 | struct FallibleHashMethods<js::StableCellHasher<T>> { | |||
907 | template <typename Lookup> | |||
908 | static bool maybeGetHash(Lookup&& l, HashNumber* hashOut) { | |||
909 | return js::StableCellHasher<T>::maybeGetHash(std::forward<Lookup>(l), | |||
910 | hashOut); | |||
911 | } | |||
912 | template <typename Lookup> | |||
913 | static bool ensureHash(Lookup&& l, HashNumber* hashOut) { | |||
914 | return js::StableCellHasher<T>::ensureHash(std::forward<Lookup>(l), | |||
915 | hashOut); | |||
916 | } | |||
917 | }; | |||
918 | ||||
919 | } // namespace mozilla | |||
920 | ||||
921 | namespace js { | |||
922 | ||||
923 | struct VirtualTraceable { | |||
924 | virtual ~VirtualTraceable() = default; | |||
925 | virtual void trace(JSTracer* trc, const char* name) = 0; | |||
926 | }; | |||
927 | ||||
928 | class StackRootedBase { | |||
929 | public: | |||
930 | StackRootedBase* previous() { return prev; } | |||
931 | ||||
932 | protected: | |||
933 | StackRootedBase** stack; | |||
934 | StackRootedBase* prev; | |||
935 | ||||
936 | template <typename T> | |||
937 | auto* derived() { | |||
938 | return static_cast<JS::Rooted<T>*>(this); | |||
939 | } | |||
940 | }; | |||
941 | ||||
942 | class PersistentRootedBase | |||
943 | : protected mozilla::LinkedListElement<PersistentRootedBase> { | |||
944 | protected: | |||
945 | friend class mozilla::LinkedList<PersistentRootedBase>; | |||
946 | friend class mozilla::LinkedListElement<PersistentRootedBase>; | |||
947 | ||||
948 | template <typename T> | |||
949 | auto* derived() { | |||
950 | return static_cast<JS::PersistentRooted<T>*>(this); | |||
951 | } | |||
952 | }; | |||
953 | ||||
954 | struct StackRootedTraceableBase : public StackRootedBase, | |||
955 | public VirtualTraceable {}; | |||
956 | ||||
957 | class PersistentRootedTraceableBase : public PersistentRootedBase, | |||
958 | public VirtualTraceable {}; | |||
959 | ||||
960 | template <typename Base, typename T> | |||
961 | class TypedRootedGCThingBase : public Base { | |||
962 | public: | |||
963 | void trace(JSTracer* trc, const char* name); | |||
964 | }; | |||
965 | ||||
966 | template <typename Base, typename T> | |||
967 | class TypedRootedTraceableBase : public Base { | |||
968 | public: | |||
969 | void trace(JSTracer* trc, const char* name) override { | |||
970 | auto* self = this->template derived<T>(); | |||
971 | JS::GCPolicy<T>::trace(trc, self->address(), name); | |||
972 | } | |||
973 | }; | |||
974 | ||||
975 | template <typename T> | |||
976 | struct RootedTraceableTraits { | |||
977 | using StackBase = TypedRootedTraceableBase<StackRootedTraceableBase, T>; | |||
978 | using PersistentBase = | |||
979 | TypedRootedTraceableBase<PersistentRootedTraceableBase, T>; | |||
980 | }; | |||
981 | ||||
982 | template <typename T> | |||
983 | struct RootedGCThingTraits { | |||
984 | using StackBase = TypedRootedGCThingBase<StackRootedBase, T>; | |||
985 | using PersistentBase = TypedRootedGCThingBase<PersistentRootedBase, T>; | |||
986 | }; | |||
987 | ||||
988 | } /* namespace js */ | |||
989 | ||||
990 | namespace JS { | |||
991 | ||||
992 | class JS_PUBLIC_API AutoGCRooter; | |||
993 | ||||
994 | enum class AutoGCRooterKind : uint8_t { | |||
995 | WrapperVector, /* js::AutoWrapperVector */ | |||
996 | Wrapper, /* js::AutoWrapperRooter */ | |||
997 | Custom, /* js::CustomAutoRooter */ | |||
998 | ||||
999 | Limit | |||
1000 | }; | |||
1001 | ||||
1002 | using RootedListHeads = mozilla::EnumeratedArray<RootKind, js::StackRootedBase*, | |||
1003 | size_t(RootKind::Limit)>; | |||
1004 | ||||
1005 | using AutoRooterListHeads = | |||
1006 | mozilla::EnumeratedArray<AutoGCRooterKind, AutoGCRooter*, | |||
1007 | size_t(AutoGCRooterKind::Limit)>; | |||
1008 | ||||
1009 | // Superclass of JSContext which can be used for rooting data in use by the | |||
1010 | // current thread but that does not provide all the functions of a JSContext. | |||
1011 | class RootingContext { | |||
1012 | // Stack GC roots for Rooted GC heap pointers. | |||
1013 | RootedListHeads stackRoots_; | |||
1014 | template <typename T> | |||
1015 | friend class Rooted; | |||
1016 | ||||
1017 | // Stack GC roots for AutoFooRooter classes. | |||
1018 | AutoRooterListHeads autoGCRooters_; | |||
1019 | friend class AutoGCRooter; | |||
1020 | ||||
1021 | // Gecko profiling metadata. | |||
1022 | // This isn't really rooting related. It's only here because we want | |||
1023 | // GetContextProfilingStackIfEnabled to be inlineable into non-JS code, and | |||
1024 | // we didn't want to add another superclass of JSContext just for this. | |||
1025 | js::GeckoProfilerThread geckoProfiler_; | |||
1026 | ||||
1027 | public: | |||
1028 | explicit RootingContext(js::Nursery* nursery); | |||
1029 | ||||
1030 | void traceStackRoots(JSTracer* trc); | |||
1031 | ||||
1032 | /* Implemented in gc/RootMarking.cpp. */ | |||
1033 | void traceAllGCRooters(JSTracer* trc); | |||
1034 | void traceWrapperGCRooters(JSTracer* trc); | |||
1035 | static void traceGCRooterList(JSTracer* trc, AutoGCRooter* head); | |||
1036 | ||||
1037 | void checkNoGCRooters(); | |||
1038 | ||||
1039 | js::GeckoProfilerThread& geckoProfiler() { return geckoProfiler_; } | |||
1040 | ||||
1041 | js::Nursery& nursery() const { | |||
1042 | MOZ_ASSERT(nursery_)do { static_assert( mozilla::detail::AssertionConditionType< decltype(nursery_)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(nursery_))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("nursery_", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1042); AnnotateMozCrashReason("MOZ_ASSERT" "(" "nursery_" ")" ); do { *((volatile int*)__null) = 1042; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1043 | return *nursery_; | |||
1044 | } | |||
1045 | ||||
1046 | protected: | |||
1047 | // The remaining members in this class should only be accessed through | |||
1048 | // JSContext pointers. They are unrelated to rooting and are in place so | |||
1049 | // that inlined API functions can directly access the data. | |||
1050 | ||||
1051 | /* The nursery. Null for non-main-thread contexts. */ | |||
1052 | js::Nursery* nursery_; | |||
1053 | ||||
1054 | /* The current zone. */ | |||
1055 | Zone* zone_; | |||
1056 | ||||
1057 | /* The current realm. */ | |||
1058 | Realm* realm_; | |||
1059 | ||||
1060 | public: | |||
1061 | /* Limit pointer for checking native stack consumption. */ | |||
1062 | JS::NativeStackLimit nativeStackLimit[StackKindCount]; | |||
1063 | ||||
1064 | #ifdef __wasi__ | |||
1065 | // For WASI we can't catch call-stack overflows with stack-pointer checks, so | |||
1066 | // we count recursion depth with RAII based AutoCheckRecursionLimit. | |||
1067 | uint32_t wasiRecursionDepth = 0u; | |||
1068 | ||||
1069 | static constexpr uint32_t wasiRecursionDepthLimit = 350u; | |||
1070 | #endif // __wasi__ | |||
1071 | ||||
1072 | static const RootingContext* get(const JSContext* cx) { | |||
1073 | return reinterpret_cast<const RootingContext*>(cx); | |||
1074 | } | |||
1075 | ||||
1076 | static RootingContext* get(JSContext* cx) { | |||
1077 | return reinterpret_cast<RootingContext*>(cx); | |||
1078 | } | |||
1079 | ||||
1080 | friend JS::Realm* js::GetContextRealm(const JSContext* cx); | |||
1081 | friend JS::Zone* js::GetContextZone(const JSContext* cx); | |||
1082 | }; | |||
1083 | ||||
1084 | class JS_PUBLIC_API AutoGCRooter { | |||
1085 | public: | |||
1086 | using Kind = AutoGCRooterKind; | |||
1087 | ||||
1088 | AutoGCRooter(JSContext* cx, Kind kind) | |||
1089 | : AutoGCRooter(JS::RootingContext::get(cx), kind) {} | |||
1090 | AutoGCRooter(RootingContext* cx, Kind kind) | |||
1091 | : down(cx->autoGCRooters_[kind]), | |||
1092 | stackTop(&cx->autoGCRooters_[kind]), | |||
1093 | kind_(kind) { | |||
1094 | MOZ_ASSERT(this != *stackTop)do { static_assert( mozilla::detail::AssertionConditionType< decltype(this != *stackTop)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(this != *stackTop))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("this != *stackTop" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1094); AnnotateMozCrashReason("MOZ_ASSERT" "(" "this != *stackTop" ")"); do { *((volatile int*)__null) = 1094; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1095 | *stackTop = this; | |||
1096 | } | |||
1097 | ||||
1098 | ~AutoGCRooter() { | |||
1099 | MOZ_ASSERT(this == *stackTop)do { static_assert( mozilla::detail::AssertionConditionType< decltype(this == *stackTop)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(this == *stackTop))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("this == *stackTop" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1099); AnnotateMozCrashReason("MOZ_ASSERT" "(" "this == *stackTop" ")"); do { *((volatile int*)__null) = 1099; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
| ||||
1100 | *stackTop = down; | |||
1101 | } | |||
1102 | ||||
1103 | void trace(JSTracer* trc); | |||
1104 | ||||
1105 | private: | |||
1106 | friend class RootingContext; | |||
1107 | ||||
1108 | AutoGCRooter* const down; | |||
1109 | AutoGCRooter** const stackTop; | |||
1110 | ||||
1111 | /* | |||
1112 | * Discriminates actual subclass of this being used. The meaning is | |||
1113 | * indicated by the corresponding value in the Kind enum. | |||
1114 | */ | |||
1115 | Kind kind_; | |||
1116 | ||||
1117 | /* No copy or assignment semantics. */ | |||
1118 | AutoGCRooter(AutoGCRooter& ida) = delete; | |||
1119 | void operator=(AutoGCRooter& ida) = delete; | |||
1120 | } JS_HAZ_ROOTED_BASE; | |||
1121 | ||||
1122 | /** | |||
1123 | * Custom rooting behavior for internal and external clients. | |||
1124 | * | |||
1125 | * Deprecated. Where possible, use Rooted<> instead. | |||
1126 | */ | |||
1127 | class MOZ_RAII JS_PUBLIC_API CustomAutoRooter : private AutoGCRooter { | |||
1128 | public: | |||
1129 | template <typename CX> | |||
1130 | explicit CustomAutoRooter(const CX& cx) | |||
1131 | : AutoGCRooter(cx, AutoGCRooter::Kind::Custom) {} | |||
1132 | ||||
1133 | friend void AutoGCRooter::trace(JSTracer* trc); | |||
1134 | ||||
1135 | protected: | |||
1136 | virtual ~CustomAutoRooter() = default; | |||
1137 | ||||
1138 | /** Supplied by derived class to trace roots. */ | |||
1139 | virtual void trace(JSTracer* trc) = 0; | |||
1140 | }; | |||
1141 | ||||
1142 | namespace detail { | |||
1143 | ||||
1144 | template <typename T> | |||
1145 | constexpr bool IsTraceable_v = | |||
1146 | MapTypeToRootKind<T>::kind == JS::RootKind::Traceable; | |||
1147 | ||||
1148 | template <typename T> | |||
1149 | using RootedTraits = | |||
1150 | std::conditional_t<IsTraceable_v<T>, js::RootedTraceableTraits<T>, | |||
1151 | js::RootedGCThingTraits<T>>; | |||
1152 | ||||
1153 | } /* namespace detail */ | |||
1154 | ||||
1155 | /** | |||
1156 | * Local variable of type T whose value is always rooted. This is typically | |||
1157 | * used for local variables, or for non-rooted values being passed to a | |||
1158 | * function that requires a handle, e.g. Foo(Root<T>(cx, x)). | |||
1159 | * | |||
1160 | * If you want to add additional methods to Rooted for a specific | |||
1161 | * specialization, define a RootedOperations<T> specialization containing them. | |||
1162 | */ | |||
1163 | template <typename T> | |||
1164 | class MOZ_RAII Rooted : public detail::RootedTraits<T>::StackBase, | |||
1165 | public js::RootedOperations<T, Rooted<T>> { | |||
1166 | inline void registerWithRootLists(RootedListHeads& roots) { | |||
1167 | this->stack = &roots[JS::MapTypeToRootKind<T>::kind]; | |||
1168 | this->prev = *this->stack; | |||
1169 | *this->stack = this; | |||
1170 | } | |||
1171 | ||||
1172 | inline RootedListHeads& rootLists(RootingContext* cx) { | |||
1173 | return cx->stackRoots_; | |||
1174 | } | |||
1175 | inline RootedListHeads& rootLists(JSContext* cx) { | |||
1176 | return rootLists(RootingContext::get(cx)); | |||
1177 | } | |||
1178 | ||||
1179 | public: | |||
1180 | using ElementType = T; | |||
1181 | ||||
1182 | // Construct an empty Rooted holding a safely initialized but empty T. | |||
1183 | // Requires T to have a copy constructor in order to copy the safely | |||
1184 | // initialized value. | |||
1185 | // | |||
1186 | // Note that for SFINAE to reject this method, the 2nd template parameter must | |||
1187 | // depend on RootingContext somehow even though we really only care about T. | |||
1188 | template <typename RootingContext, | |||
1189 | typename = std::enable_if_t<std::is_copy_constructible_v<T>, | |||
1190 | RootingContext>> | |||
1191 | explicit Rooted(const RootingContext& cx) | |||
1192 | : ptr(SafelyInitialized<T>::create()) { | |||
1193 | registerWithRootLists(rootLists(cx)); | |||
1194 | } | |||
1195 | ||||
1196 | // Provide an initial value. Requires T to be constructible from the given | |||
1197 | // argument. | |||
1198 | template <typename RootingContext, typename S> | |||
1199 | Rooted(const RootingContext& cx, S&& initial) | |||
1200 | : ptr(std::forward<S>(initial)) { | |||
1201 | MOZ_ASSERT(GCPolicy<T>::isValid(ptr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(GCPolicy<T>::isValid(ptr))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(GCPolicy<T>::isValid(ptr )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("GCPolicy<T>::isValid(ptr)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1201); AnnotateMozCrashReason("MOZ_ASSERT" "(" "GCPolicy<T>::isValid(ptr)" ")"); do { *((volatile int*)__null) = 1201; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1202 | registerWithRootLists(rootLists(cx)); | |||
1203 | } | |||
1204 | ||||
1205 | // (Traceables only) Construct the contained value from the given arguments. | |||
1206 | // Constructs in-place, so T does not need to be copyable or movable. | |||
1207 | // | |||
1208 | // Note that a copyable Traceable passed only a RootingContext will | |||
1209 | // choose the above SafelyInitialized<T> constructor, because otherwise | |||
1210 | // identical functions with parameter packs are considered less specialized. | |||
1211 | // | |||
1212 | // The SFINAE type must again depend on an inferred template parameter. | |||
1213 | template < | |||
1214 | typename RootingContext, typename... CtorArgs, | |||
1215 | typename = std::enable_if_t<detail::IsTraceable_v<T>, RootingContext>> | |||
1216 | explicit Rooted(const RootingContext& cx, CtorArgs... args) | |||
1217 | : ptr(std::forward<CtorArgs>(args)...) { | |||
1218 | MOZ_ASSERT(GCPolicy<T>::isValid(ptr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(GCPolicy<T>::isValid(ptr))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(GCPolicy<T>::isValid(ptr )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("GCPolicy<T>::isValid(ptr)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1218); AnnotateMozCrashReason("MOZ_ASSERT" "(" "GCPolicy<T>::isValid(ptr)" ")"); do { *((volatile int*)__null) = 1218; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1219 | registerWithRootLists(rootLists(cx)); | |||
1220 | } | |||
1221 | ||||
1222 | ~Rooted() { | |||
1223 | MOZ_ASSERT(*this->stack == this)do { static_assert( mozilla::detail::AssertionConditionType< decltype(*this->stack == this)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(*this->stack == this))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("*this->stack == this" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1223); AnnotateMozCrashReason("MOZ_ASSERT" "(" "*this->stack == this" ")"); do { *((volatile int*)__null) = 1223; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1224 | *this->stack = this->prev; | |||
1225 | } | |||
1226 | ||||
1227 | /* | |||
1228 | * This method is public for Rooted so that Codegen.py can use a Rooted | |||
1229 | * interchangeably with a MutableHandleValue. | |||
1230 | */ | |||
1231 | void set(const T& value) { | |||
1232 | ptr = value; | |||
1233 | MOZ_ASSERT(GCPolicy<T>::isValid(ptr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(GCPolicy<T>::isValid(ptr))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(GCPolicy<T>::isValid(ptr )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("GCPolicy<T>::isValid(ptr)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1233); AnnotateMozCrashReason("MOZ_ASSERT" "(" "GCPolicy<T>::isValid(ptr)" ")"); do { *((volatile int*)__null) = 1233; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1234 | } | |||
1235 | void set(T&& value) { | |||
1236 | ptr = std::move(value); | |||
1237 | MOZ_ASSERT(GCPolicy<T>::isValid(ptr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(GCPolicy<T>::isValid(ptr))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(GCPolicy<T>::isValid(ptr )))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("GCPolicy<T>::isValid(ptr)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1237); AnnotateMozCrashReason("MOZ_ASSERT" "(" "GCPolicy<T>::isValid(ptr)" ")"); do { *((volatile int*)__null) = 1237; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1238 | } | |||
1239 | ||||
1240 | DECLARE_POINTER_CONSTREF_OPS(T)operator const T&() const { return get(); } const T& operator ->() const { return get(); }; | |||
1241 | DECLARE_POINTER_ASSIGN_OPS(Rooted<T>, T)Rooted<T>& operator=(const T& p) { set(p); return *this; } Rooted<T>& operator=(T&& p) { set (std::move(p)); return *this; } Rooted<T>& operator =(const Rooted<T>& other) { set(other.get()); return *this; }; | |||
1242 | ||||
1243 | T& get() { return ptr; } | |||
1244 | const T& get() const { return ptr; } | |||
1245 | ||||
1246 | T* address() { return &ptr; } | |||
1247 | const T* address() const { return &ptr; } | |||
1248 | ||||
1249 | private: | |||
1250 | T ptr; | |||
1251 | ||||
1252 | Rooted(const Rooted&) = delete; | |||
1253 | } JS_HAZ_ROOTED; | |||
1254 | ||||
1255 | namespace detail { | |||
1256 | ||||
1257 | template <typename T> | |||
1258 | struct DefineComparisonOps<Rooted<T>> : std::true_type { | |||
1259 | static const T& get(const Rooted<T>& v) { return v.get(); } | |||
1260 | }; | |||
1261 | ||||
1262 | } // namespace detail | |||
1263 | ||||
1264 | template <typename... Fs> | |||
1265 | using RootedTuple = Rooted<std::tuple<Fs...>>; | |||
1266 | ||||
1267 | // Reference to a field in a RootedTuple. This is a drop-in replacement for an | |||
1268 | // individual Rooted. | |||
1269 | // | |||
1270 | // This is very similar to a MutableHandle but with two differences: it has an | |||
1271 | // assignment operator so doesn't require set() to be called and its address | |||
1272 | // converts to a MutableHandle in the same way as a Rooted. | |||
1273 | // | |||
1274 | // The field is specified by the type parameter, optionally disambiguated by | |||
1275 | // supplying the field index too. | |||
1276 | // | |||
1277 | // Used like this: | |||
1278 | // | |||
1279 | // RootedTuple<JSObject*, JSString*> roots(cx); | |||
1280 | // RootedField<JSObject*> obj(roots); | |||
1281 | // RootedField<JSString*> str(roots); | |||
1282 | // | |||
1283 | // or: | |||
1284 | // | |||
1285 | // RootedTuple<JString*, JSObject*, JSObject*> roots(cx); | |||
1286 | // RootedField<JString*, 0> str(roots); | |||
1287 | // RootedField<JSObject*, 1> obj1(roots); | |||
1288 | // RootedField<JSObject*, 2> obj2(roots); | |||
1289 | template <typename T, size_t N /* = SIZE_MAX */> | |||
1290 | class MOZ_RAII RootedField : public js::RootedOperations<T, RootedField<T, N>> { | |||
1291 | T* ptr; | |||
1292 | friend class Handle<T>; | |||
1293 | friend class MutableHandle<T>; | |||
1294 | ||||
1295 | public: | |||
1296 | using ElementType = T; | |||
1297 | ||||
1298 | template <typename... Fs> | |||
1299 | explicit RootedField(RootedTuple<Fs...>& rootedTuple) { | |||
1300 | using Tuple = std::tuple<Fs...>; | |||
1301 | if constexpr (N == SIZE_MAX(18446744073709551615UL)) { | |||
1302 | ptr = &std::get<T>(rootedTuple.get()); | |||
1303 | } else { | |||
1304 | static_assert(N < std::tuple_size_v<Tuple>); | |||
1305 | static_assert(std::is_same_v<T, std::tuple_element_t<N, Tuple>>); | |||
1306 | ptr = &std::get<N>(rootedTuple.get()); | |||
1307 | } | |||
1308 | } | |||
1309 | template <typename... Fs, typename S> | |||
1310 | explicit RootedField(RootedTuple<Fs...>& rootedTuple, S&& value) | |||
1311 | : RootedField(rootedTuple) { | |||
1312 | *ptr = std::forward<S>(value); | |||
1313 | } | |||
1314 | ||||
1315 | T& get() { return *ptr; } | |||
1316 | const T& get() const { return *ptr; } | |||
1317 | void set(const T& value) { | |||
1318 | *ptr = value; | |||
1319 | MOZ_ASSERT(GCPolicy<T>::isValid(*ptr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(GCPolicy<T>::isValid(*ptr))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(GCPolicy<T>::isValid(* ptr)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("GCPolicy<T>::isValid(*ptr)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1319); AnnotateMozCrashReason("MOZ_ASSERT" "(" "GCPolicy<T>::isValid(*ptr)" ")"); do { *((volatile int*)__null) = 1319; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1320 | } | |||
1321 | void set(T&& value) { | |||
1322 | *ptr = std::move(value); | |||
1323 | MOZ_ASSERT(GCPolicy<T>::isValid(*ptr))do { static_assert( mozilla::detail::AssertionConditionType< decltype(GCPolicy<T>::isValid(*ptr))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(GCPolicy<T>::isValid(* ptr)))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("GCPolicy<T>::isValid(*ptr)", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1323); AnnotateMozCrashReason("MOZ_ASSERT" "(" "GCPolicy<T>::isValid(*ptr)" ")"); do { *((volatile int*)__null) = 1323; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1324 | } | |||
1325 | ||||
1326 | using WrapperT = RootedField<T, N>; | |||
1327 | DECLARE_POINTER_CONSTREF_OPS(T)operator const T&() const { return get(); } const T& operator ->() const { return get(); }; | |||
1328 | DECLARE_POINTER_ASSIGN_OPS(WrapperT, T)WrapperT& operator=(const T& p) { set(p); return *this ; } WrapperT& operator=(T&& p) { set(std::move(p) ); return *this; } WrapperT& operator=(const WrapperT& other) { set(other.get()); return *this; }; | |||
1329 | // DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr); | |||
1330 | // DECLARE_NONPOINTER_MUTABLE_ACCESSOR_METHODS(*ptr); | |||
1331 | ||||
1332 | private: | |||
1333 | RootedField() = delete; | |||
1334 | RootedField(const RootedField& other) = delete; | |||
1335 | }; | |||
1336 | ||||
1337 | namespace detail { | |||
1338 | template <size_t N, typename T> | |||
1339 | struct DefineComparisonOps<JS::RootedField<T, N>> : std::true_type { | |||
1340 | static const T& get(const JS::RootedField<T, N>& v) { return v.get(); } | |||
1341 | }; | |||
1342 | } // namespace detail | |||
1343 | ||||
1344 | } /* namespace JS */ | |||
1345 | ||||
1346 | namespace js { | |||
1347 | ||||
1348 | /* | |||
1349 | * Inlinable accessors for JSContext. | |||
1350 | * | |||
1351 | * - These must not be available on the more restricted superclasses of | |||
1352 | * JSContext, so we can't simply define them on RootingContext. | |||
1353 | * | |||
1354 | * - They're perfectly ordinary JSContext functionality, so ought to be | |||
1355 | * usable without resorting to jsfriendapi.h, and when JSContext is an | |||
1356 | * incomplete type. | |||
1357 | */ | |||
1358 | inline JS::Realm* GetContextRealm(const JSContext* cx) { | |||
1359 | return JS::RootingContext::get(cx)->realm_; | |||
1360 | } | |||
1361 | ||||
1362 | inline JS::Compartment* GetContextCompartment(const JSContext* cx) { | |||
1363 | if (JS::Realm* realm = GetContextRealm(cx)) { | |||
1364 | return GetCompartmentForRealm(realm); | |||
1365 | } | |||
1366 | return nullptr; | |||
1367 | } | |||
1368 | ||||
1369 | inline JS::Zone* GetContextZone(const JSContext* cx) { | |||
1370 | return JS::RootingContext::get(cx)->zone_; | |||
1371 | } | |||
1372 | ||||
1373 | inline ProfilingStack* GetContextProfilingStackIfEnabled(JSContext* cx) { | |||
1374 | return JS::RootingContext::get(cx) | |||
1375 | ->geckoProfiler() | |||
1376 | .getProfilingStackIfEnabled(); | |||
1377 | } | |||
1378 | ||||
1379 | /** | |||
1380 | * Augment the generic Rooted<T> interface when T = JSObject* with | |||
1381 | * class-querying and downcasting operations. | |||
1382 | * | |||
1383 | * Given a Rooted<JSObject*> obj, one can view | |||
1384 | * Handle<StringObject*> h = obj.as<StringObject*>(); | |||
1385 | * as an optimization of | |||
1386 | * Rooted<StringObject*> rooted(cx, &obj->as<StringObject*>()); | |||
1387 | * Handle<StringObject*> h = rooted; | |||
1388 | */ | |||
1389 | template <typename Container> | |||
1390 | class RootedOperations<JSObject*, Container> | |||
1391 | : public MutableWrappedPtrOperations<JSObject*, Container> { | |||
1392 | public: | |||
1393 | template <class U> | |||
1394 | JS::Handle<U*> as() const; | |||
1395 | }; | |||
1396 | ||||
1397 | /** | |||
1398 | * Augment the generic Handle<T> interface when T = JSObject* with | |||
1399 | * downcasting operations. | |||
1400 | * | |||
1401 | * Given a Handle<JSObject*> obj, one can view | |||
1402 | * Handle<StringObject*> h = obj.as<StringObject*>(); | |||
1403 | * as an optimization of | |||
1404 | * Rooted<StringObject*> rooted(cx, &obj->as<StringObject*>()); | |||
1405 | * Handle<StringObject*> h = rooted; | |||
1406 | */ | |||
1407 | template <typename Container> | |||
1408 | class HandleOperations<JSObject*, Container> | |||
1409 | : public WrappedPtrOperations<JSObject*, Container> { | |||
1410 | public: | |||
1411 | template <class U> | |||
1412 | JS::Handle<U*> as() const; | |||
1413 | }; | |||
1414 | ||||
1415 | } /* namespace js */ | |||
1416 | ||||
1417 | namespace JS { | |||
1418 | ||||
1419 | template <typename T> | |||
1420 | template <typename S> | |||
1421 | inline Handle<T>::Handle( | |||
1422 | const Rooted<S>& root, | |||
1423 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy) { | |||
1424 | ptr = reinterpret_cast<const T*>(root.address()); | |||
1425 | } | |||
1426 | ||||
1427 | template <typename T> | |||
1428 | template <typename S> | |||
1429 | inline Handle<T>::Handle( | |||
1430 | const PersistentRooted<S>& root, | |||
1431 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy) { | |||
1432 | ptr = reinterpret_cast<const T*>(root.address()); | |||
1433 | } | |||
1434 | ||||
1435 | template <typename T> | |||
1436 | template <typename S> | |||
1437 | inline Handle<T>::Handle( | |||
1438 | MutableHandle<S>& root, | |||
1439 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy) { | |||
1440 | ptr = reinterpret_cast<const T*>(root.address()); | |||
1441 | } | |||
1442 | ||||
1443 | template <typename T> | |||
1444 | template <size_t N, typename S> | |||
1445 | inline Handle<T>::Handle( | |||
1446 | const RootedField<S, N>& rootedField, | |||
1447 | std::enable_if_t<std::is_convertible_v<S, T>, int> dummy) { | |||
1448 | ptr = reinterpret_cast<const T*>(rootedField.ptr); | |||
1449 | } | |||
1450 | ||||
1451 | template <typename T> | |||
1452 | inline MutableHandle<T>::MutableHandle(Rooted<T>* root) { | |||
1453 | static_assert(sizeof(MutableHandle<T>) == sizeof(T*), | |||
1454 | "MutableHandle must be binary compatible with T*."); | |||
1455 | ptr = root->address(); | |||
1456 | } | |||
1457 | ||||
1458 | template <typename T> | |||
1459 | template <size_t N> | |||
1460 | inline MutableHandle<T>::MutableHandle(RootedField<T, N>* rootedField) { | |||
1461 | ptr = rootedField->ptr; | |||
1462 | } | |||
1463 | ||||
1464 | template <typename T> | |||
1465 | inline MutableHandle<T>::MutableHandle(PersistentRooted<T>* root) { | |||
1466 | static_assert(sizeof(MutableHandle<T>) == sizeof(T*), | |||
1467 | "MutableHandle must be binary compatible with T*."); | |||
1468 | ptr = root->address(); | |||
1469 | } | |||
1470 | ||||
1471 | JS_PUBLIC_API void AddPersistentRoot(RootingContext* cx, RootKind kind, | |||
1472 | js::PersistentRootedBase* root); | |||
1473 | ||||
1474 | JS_PUBLIC_API void AddPersistentRoot(JSRuntime* rt, RootKind kind, | |||
1475 | js::PersistentRootedBase* root); | |||
1476 | ||||
1477 | /** | |||
1478 | * A copyable, assignable global GC root type with arbitrary lifetime, an | |||
1479 | * infallible constructor, and automatic unrooting on destruction. | |||
1480 | * | |||
1481 | * These roots can be used in heap-allocated data structures, so they are not | |||
1482 | * associated with any particular JSContext or stack. They are registered with | |||
1483 | * the JSRuntime itself, without locking. Initialization may take place on | |||
1484 | * construction, or in two phases if the no-argument constructor is called | |||
1485 | * followed by init(). | |||
1486 | * | |||
1487 | * Note that you must not use an PersistentRooted in an object owned by a JS | |||
1488 | * object: | |||
1489 | * | |||
1490 | * Whenever one object whose lifetime is decided by the GC refers to another | |||
1491 | * such object, that edge must be traced only if the owning JS object is traced. | |||
1492 | * This applies not only to JS objects (which obviously are managed by the GC) | |||
1493 | * but also to C++ objects owned by JS objects. | |||
1494 | * | |||
1495 | * If you put a PersistentRooted in such a C++ object, that is almost certainly | |||
1496 | * a leak. When a GC begins, the referent of the PersistentRooted is treated as | |||
1497 | * live, unconditionally (because a PersistentRooted is a *root*), even if the | |||
1498 | * JS object that owns it is unreachable. If there is any path from that | |||
1499 | * referent back to the JS object, then the C++ object containing the | |||
1500 | * PersistentRooted will not be destructed, and the whole blob of objects will | |||
1501 | * not be freed, even if there are no references to them from the outside. | |||
1502 | * | |||
1503 | * In the context of Firefox, this is a severe restriction: almost everything in | |||
1504 | * Firefox is owned by some JS object or another, so using PersistentRooted in | |||
1505 | * such objects would introduce leaks. For these kinds of edges, Heap<T> or | |||
1506 | * TenuredHeap<T> would be better types. It's up to the implementor of the type | |||
1507 | * containing Heap<T> or TenuredHeap<T> members to make sure their referents get | |||
1508 | * marked when the object itself is marked. | |||
1509 | */ | |||
1510 | template <typename T> | |||
1511 | class PersistentRooted : public detail::RootedTraits<T>::PersistentBase, | |||
1512 | public js::RootedOperations<T, PersistentRooted<T>> { | |||
1513 | void registerWithRootLists(RootingContext* cx) { | |||
1514 | MOZ_ASSERT(!initialized())do { static_assert( mozilla::detail::AssertionConditionType< decltype(!initialized())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!initialized()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!initialized()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1514); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!initialized()" ")"); do { *((volatile int*)__null) = 1514; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1515 | JS::RootKind kind = JS::MapTypeToRootKind<T>::kind; | |||
1516 | AddPersistentRoot(cx, kind, this); | |||
1517 | } | |||
1518 | ||||
1519 | void registerWithRootLists(JSRuntime* rt) { | |||
1520 | MOZ_ASSERT(!initialized())do { static_assert( mozilla::detail::AssertionConditionType< decltype(!initialized())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!initialized()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!initialized()" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1520); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!initialized()" ")"); do { *((volatile int*)__null) = 1520; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1521 | JS::RootKind kind = JS::MapTypeToRootKind<T>::kind; | |||
1522 | AddPersistentRoot(rt, kind, this); | |||
1523 | } | |||
1524 | ||||
1525 | // Used when JSContext type is incomplete and so it is not known to inherit | |||
1526 | // from RootingContext. | |||
1527 | void registerWithRootLists(JSContext* cx) { | |||
1528 | registerWithRootLists(RootingContext::get(cx)); | |||
1529 | } | |||
1530 | ||||
1531 | public: | |||
1532 | using ElementType = T; | |||
1533 | ||||
1534 | PersistentRooted() : ptr(SafelyInitialized<T>::create()) {} | |||
1535 | ||||
1536 | template < | |||
1537 | typename RootHolder, | |||
1538 | typename = std::enable_if_t<std::is_copy_constructible_v<T>, RootHolder>> | |||
1539 | explicit PersistentRooted(const RootHolder& cx) | |||
1540 | : ptr(SafelyInitialized<T>::create()) { | |||
1541 | registerWithRootLists(cx); | |||
1542 | } | |||
1543 | ||||
1544 | template < | |||
1545 | typename RootHolder, typename U, | |||
1546 | typename = std::enable_if_t<std::is_constructible_v<T, U>, RootHolder>> | |||
1547 | PersistentRooted(const RootHolder& cx, U&& initial) | |||
1548 | : ptr(std::forward<U>(initial)) { | |||
1549 | registerWithRootLists(cx); | |||
1550 | } | |||
1551 | ||||
1552 | template <typename RootHolder, typename... CtorArgs, | |||
1553 | typename = std::enable_if_t<detail::IsTraceable_v<T>, RootHolder>> | |||
1554 | explicit PersistentRooted(const RootHolder& cx, CtorArgs... args) | |||
1555 | : ptr(std::forward<CtorArgs>(args)...) { | |||
1556 | registerWithRootLists(cx); | |||
1557 | } | |||
1558 | ||||
1559 | PersistentRooted(const PersistentRooted& rhs) : ptr(rhs.ptr) { | |||
1560 | /* | |||
1561 | * Copy construction takes advantage of the fact that the original | |||
1562 | * is already inserted, and simply adds itself to whatever list the | |||
1563 | * original was on - no JSRuntime pointer needed. | |||
1564 | * | |||
1565 | * This requires mutating rhs's links, but those should be 'mutable' | |||
1566 | * anyway. C++ doesn't let us declare mutable base classes. | |||
1567 | */ | |||
1568 | const_cast<PersistentRooted&>(rhs).setNext(this); | |||
1569 | } | |||
1570 | ||||
1571 | bool initialized() const { return this->isInList(); } | |||
1572 | ||||
1573 | void init(RootingContext* cx) { init(cx, SafelyInitialized<T>::create()); } | |||
1574 | void init(JSContext* cx) { init(RootingContext::get(cx)); } | |||
1575 | ||||
1576 | template <typename U> | |||
1577 | void init(RootingContext* cx, U&& initial) { | |||
1578 | ptr = std::forward<U>(initial); | |||
1579 | registerWithRootLists(cx); | |||
1580 | } | |||
1581 | template <typename U> | |||
1582 | void init(JSContext* cx, U&& initial) { | |||
1583 | ptr = std::forward<U>(initial); | |||
1584 | registerWithRootLists(RootingContext::get(cx)); | |||
1585 | } | |||
1586 | ||||
1587 | void reset() { | |||
1588 | if (initialized()) { | |||
1589 | set(SafelyInitialized<T>::create()); | |||
1590 | this->remove(); | |||
1591 | } | |||
1592 | } | |||
1593 | ||||
1594 | DECLARE_POINTER_CONSTREF_OPS(T)operator const T&() const { return get(); } const T& operator ->() const { return get(); }; | |||
1595 | DECLARE_POINTER_ASSIGN_OPS(PersistentRooted<T>, T)PersistentRooted<T>& operator=(const T& p) { set (p); return *this; } PersistentRooted<T>& operator= (T&& p) { set(std::move(p)); return *this; } PersistentRooted <T>& operator=(const PersistentRooted<T>& other) { set(other.get()); return *this; }; | |||
1596 | ||||
1597 | T& get() { return ptr; } | |||
1598 | const T& get() const { return ptr; } | |||
1599 | ||||
1600 | T* address() { | |||
1601 | MOZ_ASSERT(initialized())do { static_assert( mozilla::detail::AssertionConditionType< decltype(initialized())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(initialized()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("initialized()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1601); AnnotateMozCrashReason("MOZ_ASSERT" "(" "initialized()" ")"); do { *((volatile int*)__null) = 1601; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1602 | return &ptr; | |||
1603 | } | |||
1604 | const T* address() const { return &ptr; } | |||
1605 | ||||
1606 | template <typename U> | |||
1607 | void set(U&& value) { | |||
1608 | MOZ_ASSERT(initialized())do { static_assert( mozilla::detail::AssertionConditionType< decltype(initialized())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(initialized()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("initialized()", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1608); AnnotateMozCrashReason("MOZ_ASSERT" "(" "initialized()" ")"); do { *((volatile int*)__null) = 1608; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1609 | ptr = std::forward<U>(value); | |||
1610 | } | |||
1611 | ||||
1612 | private: | |||
1613 | T ptr; | |||
1614 | } JS_HAZ_ROOTED; | |||
1615 | ||||
1616 | namespace detail { | |||
1617 | ||||
1618 | template <typename T> | |||
1619 | struct DefineComparisonOps<PersistentRooted<T>> : std::true_type { | |||
1620 | static const T& get(const PersistentRooted<T>& v) { return v.get(); } | |||
1621 | }; | |||
1622 | ||||
1623 | } // namespace detail | |||
1624 | ||||
1625 | } /* namespace JS */ | |||
1626 | ||||
1627 | namespace js { | |||
1628 | ||||
1629 | template <typename T, typename D, typename Container> | |||
1630 | class WrappedPtrOperations<UniquePtr<T, D>, Container> { | |||
1631 | const UniquePtr<T, D>& uniquePtr() const { | |||
1632 | return static_cast<const Container*>(this)->get(); | |||
1633 | } | |||
1634 | ||||
1635 | public: | |||
1636 | explicit operator bool() const { return !!uniquePtr(); } | |||
1637 | T* get() const { return uniquePtr().get(); } | |||
1638 | T* operator->() const { return get(); } | |||
1639 | T& operator*() const { return *uniquePtr(); } | |||
1640 | }; | |||
1641 | ||||
1642 | template <typename T, typename D, typename Container> | |||
1643 | class MutableWrappedPtrOperations<UniquePtr<T, D>, Container> | |||
1644 | : public WrappedPtrOperations<UniquePtr<T, D>, Container> { | |||
1645 | UniquePtr<T, D>& uniquePtr() { return static_cast<Container*>(this)->get(); } | |||
1646 | ||||
1647 | public: | |||
1648 | [[nodiscard]] typename UniquePtr<T, D>::Pointer release() { | |||
1649 | return uniquePtr().release(); | |||
1650 | } | |||
1651 | void reset(T* ptr = T()) { uniquePtr().reset(ptr); } | |||
1652 | }; | |||
1653 | ||||
1654 | template <typename T, typename Container> | |||
1655 | class WrappedPtrOperations<mozilla::Maybe<T>, Container> { | |||
1656 | const mozilla::Maybe<T>& maybe() const { | |||
1657 | return static_cast<const Container*>(this)->get(); | |||
1658 | } | |||
1659 | ||||
1660 | public: | |||
1661 | // This only supports a subset of Maybe's interface. | |||
1662 | bool isSome() const { return maybe().isSome(); } | |||
1663 | bool isNothing() const { return maybe().isNothing(); } | |||
1664 | const T value() const { return maybe().value(); } | |||
1665 | const T* operator->() const { return maybe().ptr(); } | |||
1666 | const T& operator*() const { return maybe().ref(); } | |||
1667 | }; | |||
1668 | ||||
1669 | template <typename T, typename Container> | |||
1670 | class MutableWrappedPtrOperations<mozilla::Maybe<T>, Container> | |||
1671 | : public WrappedPtrOperations<mozilla::Maybe<T>, Container> { | |||
1672 | mozilla::Maybe<T>& maybe() { return static_cast<Container*>(this)->get(); } | |||
1673 | ||||
1674 | public: | |||
1675 | // This only supports a subset of Maybe's interface. | |||
1676 | T* operator->() { return maybe().ptr(); } | |||
1677 | T& operator*() { return maybe().ref(); } | |||
1678 | void reset() { return maybe().reset(); } | |||
1679 | }; | |||
1680 | ||||
1681 | namespace gc { | |||
1682 | ||||
1683 | template <typename T, typename TraceCallbacks> | |||
1684 | void CallTraceCallbackOnNonHeap(T* v, const TraceCallbacks& aCallbacks, | |||
1685 | const char* aName, void* aClosure) { | |||
1686 | static_assert(sizeof(T) == sizeof(JS::Heap<T>), | |||
1687 | "T and Heap<T> must be compatible."); | |||
1688 | MOZ_ASSERT(v)do { static_assert( mozilla::detail::AssertionConditionType< decltype(v)>::isValid, "invalid assertion condition"); if ( (__builtin_expect(!!(!(!!(v))), 0))) { do { } while (false); MOZ_ReportAssertionFailure ("v", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1688); AnnotateMozCrashReason("MOZ_ASSERT" "(" "v" ")"); do { *((volatile int*)__null) = 1688; __attribute__((nomerge)) :: abort(); } while (false); } } while (false); | |||
1689 | mozilla::DebugOnly<Cell*> cell = BarrierMethods<T>::asGCThingOrNull(*v); | |||
1690 | MOZ_ASSERT(cell)do { static_assert( mozilla::detail::AssertionConditionType< decltype(cell)>::isValid, "invalid assertion condition"); if ((__builtin_expect(!!(!(!!(cell))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("cell", "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1690); AnnotateMozCrashReason("MOZ_ASSERT" "(" "cell" ")"); do { *((volatile int*)__null) = 1690; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1691 | MOZ_ASSERT(!IsInsideNursery(cell))do { static_assert( mozilla::detail::AssertionConditionType< decltype(!IsInsideNursery(cell))>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!IsInsideNursery(cell)))), 0 ))) { do { } while (false); MOZ_ReportAssertionFailure("!IsInsideNursery(cell)" , "/var/lib/jenkins/workspace/firefox-scan-build/obj-x86_64-pc-linux-gnu/dist/include/js/RootingAPI.h" , 1691); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!IsInsideNursery(cell)" ")"); do { *((volatile int*)__null) = 1691; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); | |||
1692 | JS::Heap<T>* asHeapT = reinterpret_cast<JS::Heap<T>*>(v); | |||
1693 | aCallbacks.Trace(asHeapT, aName, aClosure); | |||
1694 | } | |||
1695 | ||||
1696 | } /* namespace gc */ | |||
1697 | ||||
1698 | template <typename Wrapper, typename T1, typename T2> | |||
1699 | class WrappedPtrOperations<std::pair<T1, T2>, Wrapper> { | |||
1700 | const std::pair<T1, T2>& pair() const { | |||
1701 | return static_cast<const Wrapper*>(this)->get(); | |||
1702 | } | |||
1703 | ||||
1704 | public: | |||
1705 | const T1& first() const { return pair().first; } | |||
1706 | const T2& second() const { return pair().second; } | |||
1707 | }; | |||
1708 | ||||
1709 | template <typename Wrapper, typename T1, typename T2> | |||
1710 | class MutableWrappedPtrOperations<std::pair<T1, T2>, Wrapper> | |||
1711 | : public WrappedPtrOperations<std::pair<T1, T2>, Wrapper> { | |||
1712 | std::pair<T1, T2>& pair() { return static_cast<Wrapper*>(this)->get(); } | |||
1713 | ||||
1714 | public: | |||
1715 | T1& first() { return pair().first; } | |||
1716 | T2& second() { return pair().second; } | |||
1717 | }; | |||
1718 | ||||
1719 | } /* namespace js */ | |||
1720 | ||||
1721 | #endif /* js_RootingAPI_h */ |