script: Take away Fallible from new_resolved and new_rejected (#35473)

* script: Take away Fallible from new_resolved and new_rejected

Both Promise::new_resolved and new_rejected only return `Ok`. We don't
need them to be fallible. Simply return `Rc<Promise>`, instead of
`Fallible<Rc<Promise>>`. Also, clean up relevant code.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>

* script: pull_algorithm becomes infallible

The method pull_algorithm only returns `Some(Ok(_))`, which means it is
infallible. Clean up the returned type.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>

* script: generic_initialize becomes infallible

The method generic_initialize only returns `Ok(())`, which means it is
infallible. Clean up the returned type.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
This commit is contained in:
Kingsley Yung 2025-02-16 05:29:34 +08:00 committed by GitHub
parent 3421185737
commit b4f48c561b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 23 additions and 44 deletions

View file

@ -107,7 +107,7 @@ impl DefaultTeeUnderlyingSource {
/// <https://streams.spec.whatwg.org/#abstract-opdef-readablestreamdefaulttee>
/// Let pullAlgorithm be the following steps:
#[cfg_attr(crown, allow(crown::unrooted_must_root))]
pub(crate) fn pull_algorithm(&self, can_gc: CanGc) -> Option<Result<Rc<Promise>, Error>> {
pub(crate) fn pull_algorithm(&self, can_gc: CanGc) -> Rc<Promise> {
// If reading is true,
if self.reading.get() {
// Set readAgain to true.
@ -115,11 +115,7 @@ impl DefaultTeeUnderlyingSource {
// Return a promise resolved with undefined.
let cx = GlobalScope::get_cx();
rooted!(in(*cx) let mut rval = UndefinedValue());
return Some(Promise::new_resolved(
&self.stream.global(),
cx,
rval.handle(),
));
return Promise::new_resolved(&self.stream.global(), cx, rval.handle());
}
// Set reading to true.
@ -151,11 +147,7 @@ impl DefaultTeeUnderlyingSource {
// Return a promise resolved with undefined.
let cx = GlobalScope::get_cx();
rooted!(in(*cx) let mut rval = UndefinedValue());
Some(Promise::new_resolved(
&self.stream.global(),
GlobalScope::get_cx(),
rval.handle(),
))
Promise::new_resolved(&self.stream.global(), GlobalScope::get_cx(), rval.handle())
}
/// <https://streams.spec.whatwg.org/#abstract-opdef-readablestreamdefaulttee>

View file

@ -31,7 +31,7 @@ use js::rust::wrappers::{
use js::rust::{HandleObject, HandleValue, MutableHandleObject, Runtime};
use crate::dom::bindings::conversions::root_from_object;
use crate::dom::bindings::error::{Error, Fallible};
use crate::dom::bindings::error::Error;
use crate::dom::bindings::reflector::{DomGlobal, DomObject, MutDomObject, Reflector};
use crate::dom::bindings::settings_stack::AutoEntryScript;
use crate::dom::globalscope::GlobalScope;
@ -153,14 +153,14 @@ impl Promise {
global: &GlobalScope,
cx: SafeJSContext,
value: impl ToJSValConvertible,
) -> Fallible<Rc<Promise>> {
) -> Rc<Promise> {
let _ac = JSAutoRealm::new(*cx, global.reflector().get_jsobject().get());
unsafe {
rooted!(in(*cx) let mut rval = UndefinedValue());
value.to_jsval(*cx, rval.handle_mut());
rooted!(in(*cx) let p = CallOriginalPromiseResolve(*cx, rval.handle()));
assert!(!p.handle().is_null());
Ok(Promise::new_with_js_promise(p.handle(), cx))
Promise::new_with_js_promise(p.handle(), cx)
}
}
@ -170,14 +170,14 @@ impl Promise {
global: &GlobalScope,
cx: SafeJSContext,
value: impl ToJSValConvertible,
) -> Fallible<Rc<Promise>> {
) -> Rc<Promise> {
let _ac = JSAutoRealm::new(*cx, global.reflector().get_jsobject().get());
unsafe {
rooted!(in(*cx) let mut rval = UndefinedValue());
value.to_jsval(*cx, rval.handle_mut());
rooted!(in(*cx) let p = CallOriginalPromiseReject(*cx, rval.handle()));
assert!(!p.handle().is_null());
Ok(Promise::new_with_js_promise(p.handle(), cx))
Promise::new_with_js_promise(p.handle(), cx)
}
}

View file

@ -144,7 +144,7 @@ impl ReadableStreamBYOBReader {
}
// Perform ! ReadableStreamReaderGenericInitialize(reader, stream).
self.generic_initialize(global, stream, can_gc)?;
self.generic_initialize(global, stream, can_gc);
// Set reader.[[readIntoRequests]] to a new empty list.
self.read_into_requests.borrow_mut().clear();

View file

@ -189,7 +189,7 @@ impl ReadableStreamDefaultReader {
}
// Perform ! ReadableStreamReaderGenericInitialize(reader, stream).
self.generic_initialize(global, stream, can_gc)?;
self.generic_initialize(global, stream, can_gc);
// Set reader.[[readRequests]] to a new empty list.
self.read_requests.borrow_mut().clear();
@ -370,7 +370,7 @@ impl ReadableStreamDefaultReaderMethods<crate::DomTypeHolder> for ReadableStream
&self.global(),
error.handle_mut(),
);
return Promise::new_rejected(&self.global(), cx, error.handle()).unwrap();
return Promise::new_rejected(&self.global(), cx, error.handle());
}
// Let promise be a new promise.
let promise = Promise::new(&self.reflector_.global(), can_gc);

View file

@ -23,12 +23,7 @@ use crate::script_runtime::CanGc;
pub(crate) trait ReadableStreamGenericReader {
/// <https://streams.spec.whatwg.org/#readable-stream-reader-generic-initialize>
#[cfg_attr(crown, allow(crown::unrooted_must_root))]
fn generic_initialize(
&self,
global: &GlobalScope,
stream: &ReadableStream,
can_gc: CanGc,
) -> Fallible<()> {
fn generic_initialize(&self, global: &GlobalScope, stream: &ReadableStream, can_gc: CanGc) {
// Set reader.[[stream]] to stream.
self.set_stream(Some(stream));
@ -50,7 +45,7 @@ pub(crate) trait ReadableStreamGenericReader {
// Otherwise, if stream.[[state]] is "closed",
// Set reader.[[closedPromise]] to a promise resolved with undefined.
let cx = GlobalScope::get_cx();
self.set_closed_promise(Promise::new_resolved(global, cx, ())?);
self.set_closed_promise(Promise::new_resolved(global, cx, ()));
} else {
// Assert: stream.[[state]] is "errored"
assert!(stream.is_errored());
@ -59,13 +54,11 @@ pub(crate) trait ReadableStreamGenericReader {
let cx = GlobalScope::get_cx();
rooted!(in(*cx) let mut error = UndefinedValue());
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()));
// Set reader.[[closedPromise]].[[PromiseIsHandled]] to true
self.get_closed_promise().set_promise_is_handled();
}
Ok(())
}
/// <https://streams.spec.whatwg.org/#readable-stream-reader-generic-cancel>
@ -107,9 +100,11 @@ pub(crate) trait ReadableStreamGenericReader {
error.handle_mut(),
);
self.set_closed_promise(
Promise::new_rejected(&stream.global(), cx, error.handle()).unwrap(),
);
self.set_closed_promise(Promise::new_rejected(
&stream.global(),
cx,
error.handle(),
));
}
// Set reader.[[closedPromise]].[[PromiseIsHandled]] to true.
self.get_closed_promise().set_promise_is_handled();

View file

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

View file

@ -154,7 +154,7 @@ impl UnderlyingSourceContainer {
},
UnderlyingSourceType::Tee(tee_underlyin_source) => {
// Call the pull algorithm for the appropriate branch.
tee_underlyin_source.pull_algorithm(can_gc)
Some(Ok(tee_underlyin_source.pull_algorithm(can_gc)))
},
// Note: other source type have no pull steps for now.
_ => None,

View file

@ -807,13 +807,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
if !JS_WrapValue(*cx, valueToResolve.handle_mut()) {
$*{exceptionCode}
}
match Promise::new_resolved(&promiseGlobal, cx, valueToResolve.handle()) {
Ok(value) => value,
Err(error) => {
throw_dom_exception(cx, &promiseGlobal, error);
$*{exceptionCode}
}
}
Promise::new_resolved(&promiseGlobal, cx, valueToResolve.handle())
}
""",
exceptionCode=exceptionCode)

View file

@ -562,9 +562,7 @@ interface TestBinding {
[Func="TestBinding::condition_satisfied"]
const unsigned short funcControlledConstEnabled = 0;
[Throws]
Promise<any> returnResolvedPromise(any value);
[Throws]
Promise<any> returnRejectedPromise(any value);
readonly attribute Promise<boolean> promiseAttribute;
undefined acceptPromise(Promise<DOMString> string);