script: add CanGc argument to Promise::new_resolved and Promise::new_rejected (#35605)

* add CanGc to new_resolved and use it where possible

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>

* add CanGc to new_rejected

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
This commit is contained in:
Gae24 2025-02-23 05:45:47 +01:00 committed by GitHub
parent dd13342f18
commit adb831eefe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 23 additions and 29 deletions

View file

@ -115,7 +115,7 @@ impl DefaultTeeUnderlyingSource {
// Return a promise resolved with undefined. // Return a promise resolved with undefined.
let cx = GlobalScope::get_cx(); let cx = GlobalScope::get_cx();
rooted!(in(*cx) let mut rval = UndefinedValue()); rooted!(in(*cx) let mut rval = UndefinedValue());
return Promise::new_resolved(&self.stream.global(), cx, rval.handle()); return Promise::new_resolved(&self.stream.global(), cx, rval.handle(), can_gc);
} }
// Set reading to true. // Set reading to true.
@ -147,7 +147,12 @@ impl DefaultTeeUnderlyingSource {
// Return a promise resolved with undefined. // Return a promise resolved with undefined.
let cx = GlobalScope::get_cx(); let cx = GlobalScope::get_cx();
rooted!(in(*cx) let mut rval = UndefinedValue()); rooted!(in(*cx) let mut rval = UndefinedValue());
Promise::new_resolved(&self.stream.global(), GlobalScope::get_cx(), rval.handle()) Promise::new_resolved(
&self.stream.global(),
GlobalScope::get_cx(),
rval.handle(),
can_gc,
)
} }
/// <https://streams.spec.whatwg.org/#abstract-opdef-readablestreamdefaulttee> /// <https://streams.spec.whatwg.org/#abstract-opdef-readablestreamdefaulttee>

View file

@ -153,6 +153,7 @@ impl Promise {
global: &GlobalScope, global: &GlobalScope,
cx: SafeJSContext, cx: SafeJSContext,
value: impl ToJSValConvertible, value: impl ToJSValConvertible,
_can_gc: CanGc,
) -> Rc<Promise> { ) -> Rc<Promise> {
let _ac = JSAutoRealm::new(*cx, global.reflector().get_jsobject().get()); let _ac = JSAutoRealm::new(*cx, global.reflector().get_jsobject().get());
unsafe { unsafe {
@ -170,6 +171,7 @@ impl Promise {
global: &GlobalScope, global: &GlobalScope,
cx: SafeJSContext, cx: SafeJSContext,
value: impl ToJSValConvertible, value: impl ToJSValConvertible,
_can_gc: CanGc,
) -> Rc<Promise> { ) -> Rc<Promise> {
let _ac = JSAutoRealm::new(*cx, global.reflector().get_jsobject().get()); let _ac = JSAutoRealm::new(*cx, global.reflector().get_jsobject().get());
unsafe { unsafe {
@ -400,6 +402,6 @@ impl PromiseHelpers<crate::DomTypeHolder> for Promise {
cx: SafeJSContext, cx: SafeJSContext,
value: impl ToJSValConvertible, value: impl ToJSValConvertible,
) -> Rc<Promise> { ) -> Rc<Promise> {
Promise::new_resolved(global, cx, value) Promise::new_resolved(global, cx, value, CanGc::note())
} }
} }

View file

@ -666,9 +666,7 @@ impl ReadableStream {
// If stream.[[state]] is "closed", return a promise resolved with undefined. // If stream.[[state]] is "closed", return a promise resolved with undefined.
if self.is_closed() { if self.is_closed() {
let promise = Promise::new(&self.global(), can_gc); return Promise::new_resolved(&self.global(), GlobalScope::get_cx(), (), can_gc);
promise.resolve_native(&());
return promise;
} }
// If stream.[[state]] is "errored", return a promise rejected with stream.[[storedError]]. // If stream.[[state]] is "errored", return a promise rejected with stream.[[storedError]].
if self.is_errored() { if self.is_errored() {

View file

@ -371,7 +371,7 @@ impl ReadableStreamDefaultReaderMethods<crate::DomTypeHolder> for ReadableStream
&self.global(), &self.global(),
error.handle_mut(), error.handle_mut(),
); );
return Promise::new_rejected(&self.global(), cx, error.handle()); return Promise::new_rejected(&self.global(), cx, error.handle(), can_gc);
} }
// Let promise be a new promise. // Let promise be a new promise.
let promise = Promise::new(&self.global(), can_gc); let promise = Promise::new(&self.global(), can_gc);

View file

@ -45,7 +45,7 @@ pub(crate) trait ReadableStreamGenericReader {
// Otherwise, if stream.[[state]] is "closed", // Otherwise, if stream.[[state]] is "closed",
// Set reader.[[closedPromise]] to a promise resolved with undefined. // Set reader.[[closedPromise]] to a promise resolved with undefined.
let cx = GlobalScope::get_cx(); let cx = GlobalScope::get_cx();
self.set_closed_promise(Promise::new_resolved(global, cx, ())); self.set_closed_promise(Promise::new_resolved(global, cx, (), can_gc));
} else { } else {
// Assert: stream.[[state]] is "errored" // Assert: stream.[[state]] is "errored"
assert!(stream.is_errored()); assert!(stream.is_errored());
@ -54,7 +54,7 @@ pub(crate) trait ReadableStreamGenericReader {
let cx = GlobalScope::get_cx(); let cx = GlobalScope::get_cx();
rooted!(in(*cx) let mut error = UndefinedValue()); rooted!(in(*cx) let mut error = UndefinedValue());
stream.get_stored_error(error.handle_mut()); stream.get_stored_error(error.handle_mut());
self.set_closed_promise(Promise::new_rejected(global, cx, error.handle())); self.set_closed_promise(Promise::new_rejected(global, cx, error.handle(), can_gc));
// Set reader.[[closedPromise]].[[PromiseIsHandled]] to true // Set reader.[[closedPromise]].[[PromiseIsHandled]] to true
self.get_closed_promise().set_promise_is_handled(); self.get_closed_promise().set_promise_is_handled();
@ -104,6 +104,7 @@ pub(crate) trait ReadableStreamGenericReader {
&stream.global(), &stream.global(),
cx, cx,
error.handle(), error.handle(),
CanGc::note(),
)); ));
} }
// Set reader.[[closedPromise]].[[PromiseIsHandled]] to true. // Set reader.[[closedPromise]].[[PromiseIsHandled]] to true.

View file

@ -972,12 +972,12 @@ impl TestBindingMethods<crate::DomTypeHolder> for TestBinding {
#[cfg_attr(crown, allow(crown::unrooted_must_root))] #[cfg_attr(crown, allow(crown::unrooted_must_root))]
fn ReturnResolvedPromise(&self, cx: SafeJSContext, v: HandleValue) -> Rc<Promise> { fn ReturnResolvedPromise(&self, cx: SafeJSContext, v: HandleValue) -> Rc<Promise> {
Promise::new_resolved(&self.global(), cx, v) Promise::new_resolved(&self.global(), cx, v, CanGc::note())
} }
#[cfg_attr(crown, allow(crown::unrooted_must_root))] #[cfg_attr(crown, allow(crown::unrooted_must_root))]
fn ReturnRejectedPromise(&self, cx: SafeJSContext, v: HandleValue) -> Rc<Promise> { fn ReturnRejectedPromise(&self, cx: SafeJSContext, v: HandleValue) -> Rc<Promise> {
Promise::new_rejected(&self.global(), cx, v) Promise::new_rejected(&self.global(), cx, v, CanGc::note())
} }
fn PromiseResolveNative(&self, cx: SafeJSContext, p: &Promise, v: HandleValue) { fn PromiseResolveNative(&self, cx: SafeJSContext, p: &Promise, v: HandleValue) {

View file

@ -650,9 +650,7 @@ impl WritableStream {
// If stream.[[state]] is "closed" or "errored", // If stream.[[state]] is "closed" or "errored",
if self.is_closed() || self.is_errored() { if self.is_closed() || self.is_errored() {
// return a promise resolved with undefined. // return a promise resolved with undefined.
let promise = Promise::new(global, can_gc); return Promise::new_resolved(global, cx, (), can_gc);
promise.resolve_native(&());
return promise;
} }
// TODO: Signal abort on stream.[[controller]].[[abortController]] with reason. // TODO: Signal abort on stream.[[controller]].[[abortController]] with reason.

View file

@ -386,14 +386,10 @@ impl WritableStreamDefaultController {
let promise = Promise::new_with_js_promise(result_object.handle(), cx); let promise = Promise::new_with_js_promise(result_object.handle(), cx);
promise promise
} else { } else {
let promise = Promise::new(global, can_gc); Promise::new_resolved(global, cx, result.get(), can_gc)
promise.resolve_native(&result.get());
promise
} }
} else { } else {
let promise = Promise::new(global, can_gc); Promise::new_resolved(global, cx, (), can_gc)
promise.resolve_native(&());
promise
}; };
let rooted_default_controller = DomRoot::from_ref(self); let rooted_default_controller = DomRoot::from_ref(self);
@ -451,9 +447,7 @@ impl WritableStreamDefaultController {
ExceptionHandling::Rethrow, ExceptionHandling::Rethrow,
) )
} else { } else {
let promise = Promise::new(global, can_gc); Ok(Promise::new_resolved(global, cx, (), can_gc))
promise.resolve_native(&());
Ok(promise)
}; };
result.unwrap_or_else(|e| { result.unwrap_or_else(|e| {
let promise = Promise::new(global, can_gc); let promise = Promise::new(global, can_gc);
@ -479,9 +473,7 @@ impl WritableStreamDefaultController {
ExceptionHandling::Rethrow, ExceptionHandling::Rethrow,
) )
} else { } else {
let promise = Promise::new(global, can_gc); Ok(Promise::new_resolved(global, cx, (), can_gc))
promise.resolve_native(&());
Ok(promise)
}; };
result.unwrap_or_else(|e| { result.unwrap_or_else(|e| {
let promise = Promise::new(global, can_gc); let promise = Promise::new(global, can_gc);
@ -502,9 +494,7 @@ impl WritableStreamDefaultController {
let result = if let Some(algo) = algo { let result = if let Some(algo) = algo {
algo.Call_(&this_object.handle(), ExceptionHandling::Rethrow) algo.Call_(&this_object.handle(), ExceptionHandling::Rethrow)
} else { } else {
let promise = Promise::new(global, can_gc); Ok(Promise::new_resolved(global, cx, (), can_gc))
promise.resolve_native(&());
Ok(promise)
}; };
result.unwrap_or_else(|e| { result.unwrap_or_else(|e| {
let promise = Promise::new(global, can_gc); let promise = Promise::new(global, can_gc);