Struct mozjs_sys::jsapi::JS::ObjectOpResult
source · #[repr(C)]pub struct ObjectOpResult {
pub code_: usize,
}
Expand description
Per ES6, the [[DefineOwnProperty]] internal method has three different possible outcomes:
-
It can throw an exception (which we indicate by returning false).
-
It can return true, indicating unvarnished success.
-
It can return false, indicating “strict failure”. The property could not be defined. It’s an error, but no exception was thrown.
It’s not just [[DefineOwnProperty]]: all the mutating internal methods have the same three outcomes. (The other affected internal methods are [[Set]], [[Delete]], [[SetPrototypeOf]], and [[PreventExtensions]].)
If you think this design is awful, you’re not alone. But as it’s the standard, we must represent these boolean “success” values somehow. ObjectOpSuccess is the class for this. It’s like a bool, but when it’s false it also stores an error code.
Typical usage:
ObjectOpResult result;
if (!DefineProperty(cx, obj, id, ..., result)) {
return false;
}
if (!result) {
return result.reportError(cx, obj, id);
}
Users don’t have to call result.report()
; another possible ending is:
argv.rval().setBoolean(result.ok());
return true;
Fields§
§code_: usize
code_ is either one of the special codes OkCode or Uninitialized, or an error code. For now the error codes are JS friend API and are defined in js/public/friend/ErrorNumbers.msg.
code_ is uintptr_t (rather than uint32_t) for the convenience of the JITs, which would otherwise have to deal with either padding or stack alignment on 64-bit platforms.
Implementations§
source§impl ObjectOpResult
impl ObjectOpResult
pub fn ok(&self) -> bool
pub fn fail(&mut self, code: JSErrNum) -> bool
pub fn fail_cant_redefine_prop(&mut self) -> bool
pub fn fail_read_only(&mut self) -> bool
pub fn fail_getter_only(&mut self) -> bool
pub fn fail_cant_delete(&mut self) -> bool
pub fn fail_cant_set_interposed(&mut self) -> bool
pub fn fail_cant_define_window_element(&mut self) -> bool
pub fn fail_cant_delete_window_element(&mut self) -> bool
pub fn fail_cant_define_window_named_property(&mut self) -> bool
pub fn fail_cant_delete_window_named_property(&mut self) -> bool
pub fn fail_cant_define_window_non_configurable(&mut self) -> bool
pub fn fail_cant_prevent_extensions(&mut self) -> bool
pub fn fail_cant_set_proto(&mut self) -> bool
pub fn fail_no_named_setter(&mut self) -> bool
pub fn fail_no_indexed_setter(&mut self) -> bool
pub fn fail_not_data_descriptor(&mut self) -> bool
pub fn fail_invalid_descriptor(&mut self) -> bool
pub fn fail_bad_array_length(&mut self) -> bool
pub fn fail_bad_index(&mut self) -> bool
pub fn failure_code(&self) -> u32
pub fn failNoNamedSetter(&mut self) -> bool
Trait Implementations§
source§impl Clone for ObjectOpResult
impl Clone for ObjectOpResult
source§fn clone(&self) -> ObjectOpResult
fn clone(&self) -> ObjectOpResult
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for ObjectOpResult
impl Debug for ObjectOpResult
source§impl Default for ObjectOpResult
impl Default for ObjectOpResult
source§fn default() -> ObjectOpResult
fn default() -> ObjectOpResult
source§impl PartialEq for ObjectOpResult
impl PartialEq for ObjectOpResult
impl Copy for ObjectOpResult
impl StructuralPartialEq for ObjectOpResult
Auto Trait Implementations§
impl Freeze for ObjectOpResult
impl RefUnwindSafe for ObjectOpResult
impl Send for ObjectOpResult
impl Sync for ObjectOpResult
impl Unpin for ObjectOpResult
impl UnwindSafe for ObjectOpResult
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more