refactor: add CanGc as argument to Promise::reject (#35622)

Signed-off-by: Yerkebulan Tulibergenov <yerkebulan@gmail.com>
This commit is contained in:
Yerkebulan Tulibergenov 2025-02-23 14:32:13 -08:00 committed by GitHub
parent 678f0c9fdc
commit 47f6c50dd9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 10 additions and 10 deletions

View file

@ -600,8 +600,8 @@ impl Callback for ConsumeBodyPromiseRejectionHandler {
/// Continuing Step 4 of <https://fetch.spec.whatwg.org/#concept-body-consume-body> /// Continuing Step 4 of <https://fetch.spec.whatwg.org/#concept-body-consume-body>
/// Step 3 of <https://fetch.spec.whatwg.org/#concept-read-all-bytes-from-readablestream>, /// Step 3 of <https://fetch.spec.whatwg.org/#concept-read-all-bytes-from-readablestream>,
// the rejection steps. // the rejection steps.
fn callback(&self, cx: JSContext, v: HandleValue, _realm: InRealm, _can_gc: CanGc) { fn callback(&self, cx: JSContext, v: HandleValue, _realm: InRealm, can_gc: CanGc) {
self.result_promise.reject(cx, v); self.result_promise.reject(cx, v, can_gc);
} }
} }

View file

@ -218,7 +218,7 @@ impl Promise {
unsafe { unsafe {
val.to_jsval(*cx, v.handle_mut()); val.to_jsval(*cx, v.handle_mut());
} }
self.reject(cx, v.handle()); self.reject(cx, v.handle(), CanGc::note());
} }
pub(crate) fn reject_error(&self, error: Error) { pub(crate) fn reject_error(&self, error: Error) {
@ -226,12 +226,12 @@ impl Promise {
let _ac = enter_realm(self); let _ac = enter_realm(self);
rooted!(in(*cx) let mut v = UndefinedValue()); rooted!(in(*cx) let mut v = UndefinedValue());
error.to_jsval(cx, &self.global(), v.handle_mut()); error.to_jsval(cx, &self.global(), v.handle_mut());
self.reject(cx, v.handle()); self.reject(cx, v.handle(), CanGc::note());
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
#[cfg_attr(crown, allow(crown::unrooted_must_root))] #[cfg_attr(crown, allow(crown::unrooted_must_root))]
pub(crate) fn reject(&self, cx: SafeJSContext, value: HandleValue) { pub(crate) fn reject(&self, cx: SafeJSContext, value: HandleValue, _can_gc: CanGc) {
unsafe { unsafe {
if !RejectPromise(*cx, self.promise_obj(), value) { if !RejectPromise(*cx, self.promise_obj(), value) {
JS_ClearPendingException(*cx); JS_ClearPendingException(*cx);

View file

@ -984,8 +984,8 @@ impl TestBindingMethods<crate::DomTypeHolder> for TestBinding {
p.resolve(cx, v, can_gc); p.resolve(cx, v, can_gc);
} }
fn PromiseRejectNative(&self, cx: SafeJSContext, p: &Promise, v: HandleValue) { fn PromiseRejectNative(&self, cx: SafeJSContext, p: &Promise, v: HandleValue, can_gc: CanGc) {
p.reject(cx, v); p.reject(cx, v, can_gc);
} }
fn PromiseRejectWithTypeError(&self, p: &Promise, s: USVString) { fn PromiseRejectWithTypeError(&self, p: &Promise, s: USVString) {

View file

@ -263,7 +263,7 @@ impl WritableStream {
let write_requests = mem::take(&mut *self.write_requests.borrow_mut()); let write_requests = mem::take(&mut *self.write_requests.borrow_mut());
for request in write_requests { for request in write_requests {
// Reject writeRequest with storedError. // Reject writeRequest with storedError.
request.reject(cx, stored_error.handle()); request.reject(cx, stored_error.handle(), can_gc);
} }
// Set stream.[[writeRequests]] to an empty list. // Set stream.[[writeRequests]] to an empty list.
@ -287,7 +287,7 @@ impl WritableStream {
// Reject abortRequests promise with storedError. // Reject abortRequests promise with storedError.
pending_abort_request pending_abort_request
.promise .promise
.reject(cx, stored_error.handle()); .reject(cx, stored_error.handle(), can_gc);
// Perform ! WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream). // Perform ! WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream).
self.reject_close_and_closed_promise_if_needed(cx); self.reject_close_and_closed_promise_if_needed(cx);

View file

@ -485,7 +485,7 @@ DOMInterfaces = {
#FIXME(jdm): This should be 'register': False, but then we don't generate enum types #FIXME(jdm): This should be 'register': False, but then we don't generate enum types
'TestBinding': { 'TestBinding': {
'inRealms': ['PromiseAttribute', 'PromiseNativeHandler'], 'inRealms': ['PromiseAttribute', 'PromiseNativeHandler'],
'canGc': ['InterfaceAttribute', 'GetInterfaceAttributeNullable', 'ReceiveInterface', 'ReceiveInterfaceSequence', 'ReceiveNullableInterface', 'PromiseAttribute', 'PromiseNativeHandler', 'PromiseResolveNative'], 'canGc': ['InterfaceAttribute', 'GetInterfaceAttributeNullable', 'ReceiveInterface', 'ReceiveInterfaceSequence', 'ReceiveNullableInterface', 'PromiseAttribute', 'PromiseNativeHandler', 'PromiseResolveNative', 'PromiseRejectNative'],
}, },
'TestWorklet': { 'TestWorklet': {