From 31b2f81bc6eecf513d4f694304311eda0bf0f527 Mon Sep 17 00:00:00 2001 From: Yerkebulan Tulibergenov Date: Tue, 25 Feb 2025 05:21:59 -0800 Subject: [PATCH] refactor: add CanGc as argument to exception_to_promise (#35647) Signed-off-by: Yerkebulan Tulibergenov --- components/script/dom/bindings/utils.rs | 23 +++++++++++-------- .../script_bindings/codegen/CodegenRust.py | 4 ++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs index 2fc47b09403..5eab6c6a701 100644 --- a/components/script/dom/bindings/utils.rs +++ b/components/script/dom/bindings/utils.rs @@ -482,6 +482,7 @@ unsafe fn generic_call( u32, *mut JSVal, ) -> bool, + can_gc: CanGc, ) -> bool { let args = CallArgs::from_vp(vp, argc); @@ -493,7 +494,7 @@ unsafe fn generic_call( if !thisobj.get().is_null_or_undefined() && !thisobj.get().is_object() { throw_invalid_this(cx, proto_id); return if EXCEPTION_TO_REJECTION { - exception_to_promise(*cx, args.rval()) + exception_to_promise(*cx, args.rval(), can_gc) } else { false }; @@ -516,7 +517,7 @@ unsafe fn generic_call( } else { throw_invalid_this(cx, proto_id); return if EXCEPTION_TO_REJECTION { - exception_to_promise(*cx, args.rval()) + exception_to_promise(*cx, args.rval(), can_gc) } else { false }; @@ -539,7 +540,7 @@ pub(crate) unsafe extern "C" fn generic_method bool { - generic_call::(cx, argc, vp, false, CallJitMethodOp) + generic_call::(cx, argc, vp, false, CallJitMethodOp, CanGc::note()) } /// Generic getter of IDL interface. @@ -548,7 +549,7 @@ pub(crate) unsafe extern "C" fn generic_getter bool { - generic_call::(cx, argc, vp, false, CallJitGetterOp) + generic_call::(cx, argc, vp, false, CallJitGetterOp, CanGc::note()) } /// Generic lenient getter of IDL interface. @@ -557,7 +558,7 @@ pub(crate) unsafe extern "C" fn generic_lenient_getter bool { - generic_call::(cx, argc, vp, true, CallJitGetterOp) + generic_call::(cx, argc, vp, true, CallJitGetterOp, CanGc::note()) } unsafe extern "C" fn call_setter( @@ -581,7 +582,7 @@ pub(crate) unsafe extern "C" fn generic_setter( argc: libc::c_uint, vp: *mut JSVal, ) -> bool { - generic_call::(cx, argc, vp, false, call_setter) + generic_call::(cx, argc, vp, false, call_setter, CanGc::note()) } /// Generic lenient setter of IDL interface. @@ -590,7 +591,7 @@ pub(crate) unsafe extern "C" fn generic_lenient_setter( argc: libc::c_uint, vp: *mut JSVal, ) -> bool { - generic_call::(cx, argc, vp, true, call_setter) + generic_call::(cx, argc, vp, true, call_setter, CanGc::note()) } unsafe extern "C" fn instance_class_has_proto_at_depth( @@ -645,13 +646,17 @@ pub(crate) unsafe extern "C" fn generic_static_promise_method( if static_fn(cx, argc, vp) { return true; } - exception_to_promise(cx, args.rval()) + exception_to_promise(cx, args.rval(), CanGc::note()) } /// Coverts exception to promise rejection /// /// -pub(crate) unsafe fn exception_to_promise(cx: *mut JSContext, rval: RawMutableHandleValue) -> bool { +pub(crate) unsafe fn exception_to_promise( + cx: *mut JSContext, + rval: RawMutableHandleValue, + _can_gc: CanGc, +) -> bool { rooted!(in(cx) let mut exception = UndefinedValue()); if !JS_GetPendingException(cx, exception.handle_mut()) { return false; diff --git a/components/script_bindings/codegen/CodegenRust.py b/components/script_bindings/codegen/CodegenRust.py index 170ad5c20cc..8ad55f4657e 100644 --- a/components/script_bindings/codegen/CodegenRust.py +++ b/components/script_bindings/codegen/CodegenRust.py @@ -4249,7 +4249,7 @@ class CGMethodPromiseWrapper(CGAbstractExternMethod): if ok { return true; } - return exception_to_promise(cx, (*args).rval()); + return exception_to_promise(cx, (*args).rval(), CanGc::note()); """, methodName=self.method.identifier.name, args=", ".join(arg.name for arg in self.args), @@ -4284,7 +4284,7 @@ class CGGetterPromiseWrapper(CGAbstractExternMethod): if ok { return true; } - return exception_to_promise(cx, args.rval()); + return exception_to_promise(cx, args.rval(), CanGc::note()); """, methodName=self.method_call, args=", ".join(arg.name for arg in self.args),