mirror of
https://github.com/servo/servo.git
synced 2025-07-31 19:20:22 +01:00
refactor: add CanGc as argument to exception_to_promise (#35647)
Signed-off-by: Yerkebulan Tulibergenov <yerkebulan@gmail.com>
This commit is contained in:
parent
754b117011
commit
31b2f81bc6
2 changed files with 16 additions and 11 deletions
|
@ -482,6 +482,7 @@ unsafe fn generic_call<const EXCEPTION_TO_REJECTION: bool>(
|
||||||
u32,
|
u32,
|
||||||
*mut JSVal,
|
*mut JSVal,
|
||||||
) -> bool,
|
) -> bool,
|
||||||
|
can_gc: CanGc,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let args = CallArgs::from_vp(vp, argc);
|
let args = CallArgs::from_vp(vp, argc);
|
||||||
|
|
||||||
|
@ -493,7 +494,7 @@ unsafe fn generic_call<const EXCEPTION_TO_REJECTION: bool>(
|
||||||
if !thisobj.get().is_null_or_undefined() && !thisobj.get().is_object() {
|
if !thisobj.get().is_null_or_undefined() && !thisobj.get().is_object() {
|
||||||
throw_invalid_this(cx, proto_id);
|
throw_invalid_this(cx, proto_id);
|
||||||
return if EXCEPTION_TO_REJECTION {
|
return if EXCEPTION_TO_REJECTION {
|
||||||
exception_to_promise(*cx, args.rval())
|
exception_to_promise(*cx, args.rval(), can_gc)
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
};
|
};
|
||||||
|
@ -516,7 +517,7 @@ unsafe fn generic_call<const EXCEPTION_TO_REJECTION: bool>(
|
||||||
} else {
|
} else {
|
||||||
throw_invalid_this(cx, proto_id);
|
throw_invalid_this(cx, proto_id);
|
||||||
return if EXCEPTION_TO_REJECTION {
|
return if EXCEPTION_TO_REJECTION {
|
||||||
exception_to_promise(*cx, args.rval())
|
exception_to_promise(*cx, args.rval(), can_gc)
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
};
|
};
|
||||||
|
@ -539,7 +540,7 @@ pub(crate) unsafe extern "C" fn generic_method<const EXCEPTION_TO_REJECTION: boo
|
||||||
argc: libc::c_uint,
|
argc: libc::c_uint,
|
||||||
vp: *mut JSVal,
|
vp: *mut JSVal,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
generic_call::<EXCEPTION_TO_REJECTION>(cx, argc, vp, false, CallJitMethodOp)
|
generic_call::<EXCEPTION_TO_REJECTION>(cx, argc, vp, false, CallJitMethodOp, CanGc::note())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generic getter of IDL interface.
|
/// Generic getter of IDL interface.
|
||||||
|
@ -548,7 +549,7 @@ pub(crate) unsafe extern "C" fn generic_getter<const EXCEPTION_TO_REJECTION: boo
|
||||||
argc: libc::c_uint,
|
argc: libc::c_uint,
|
||||||
vp: *mut JSVal,
|
vp: *mut JSVal,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
generic_call::<EXCEPTION_TO_REJECTION>(cx, argc, vp, false, CallJitGetterOp)
|
generic_call::<EXCEPTION_TO_REJECTION>(cx, argc, vp, false, CallJitGetterOp, CanGc::note())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generic lenient getter of IDL interface.
|
/// Generic lenient getter of IDL interface.
|
||||||
|
@ -557,7 +558,7 @@ pub(crate) unsafe extern "C" fn generic_lenient_getter<const EXCEPTION_TO_REJECT
|
||||||
argc: libc::c_uint,
|
argc: libc::c_uint,
|
||||||
vp: *mut JSVal,
|
vp: *mut JSVal,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
generic_call::<EXCEPTION_TO_REJECTION>(cx, argc, vp, true, CallJitGetterOp)
|
generic_call::<EXCEPTION_TO_REJECTION>(cx, argc, vp, true, CallJitGetterOp, CanGc::note())
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe extern "C" fn call_setter(
|
unsafe extern "C" fn call_setter(
|
||||||
|
@ -581,7 +582,7 @@ pub(crate) unsafe extern "C" fn generic_setter(
|
||||||
argc: libc::c_uint,
|
argc: libc::c_uint,
|
||||||
vp: *mut JSVal,
|
vp: *mut JSVal,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
generic_call::<false>(cx, argc, vp, false, call_setter)
|
generic_call::<false>(cx, argc, vp, false, call_setter, CanGc::note())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Generic lenient setter of IDL interface.
|
/// Generic lenient setter of IDL interface.
|
||||||
|
@ -590,7 +591,7 @@ pub(crate) unsafe extern "C" fn generic_lenient_setter(
|
||||||
argc: libc::c_uint,
|
argc: libc::c_uint,
|
||||||
vp: *mut JSVal,
|
vp: *mut JSVal,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
generic_call::<false>(cx, argc, vp, true, call_setter)
|
generic_call::<false>(cx, argc, vp, true, call_setter, CanGc::note())
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe extern "C" fn instance_class_has_proto_at_depth(
|
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) {
|
if static_fn(cx, argc, vp) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
exception_to_promise(cx, args.rval())
|
exception_to_promise(cx, args.rval(), CanGc::note())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Coverts exception to promise rejection
|
/// Coverts exception to promise rejection
|
||||||
///
|
///
|
||||||
/// <https://searchfox.org/mozilla-central/rev/b220e40ff2ee3d10ce68e07d8a8a577d5558e2a2/dom/bindings/BindingUtils.cpp#3315>
|
/// <https://searchfox.org/mozilla-central/rev/b220e40ff2ee3d10ce68e07d8a8a577d5558e2a2/dom/bindings/BindingUtils.cpp#3315>
|
||||||
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());
|
rooted!(in(cx) let mut exception = UndefinedValue());
|
||||||
if !JS_GetPendingException(cx, exception.handle_mut()) {
|
if !JS_GetPendingException(cx, exception.handle_mut()) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -4249,7 +4249,7 @@ class CGMethodPromiseWrapper(CGAbstractExternMethod):
|
||||||
if ok {
|
if ok {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return exception_to_promise(cx, (*args).rval());
|
return exception_to_promise(cx, (*args).rval(), CanGc::note());
|
||||||
""",
|
""",
|
||||||
methodName=self.method.identifier.name,
|
methodName=self.method.identifier.name,
|
||||||
args=", ".join(arg.name for arg in self.args),
|
args=", ".join(arg.name for arg in self.args),
|
||||||
|
@ -4284,7 +4284,7 @@ class CGGetterPromiseWrapper(CGAbstractExternMethod):
|
||||||
if ok {
|
if ok {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return exception_to_promise(cx, args.rval());
|
return exception_to_promise(cx, args.rval(), CanGc::note());
|
||||||
""",
|
""",
|
||||||
methodName=self.method_call,
|
methodName=self.method_call,
|
||||||
args=", ".join(arg.name for arg in self.args),
|
args=", ".join(arg.name for arg in self.args),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue