Struct mozjs::jsapi::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<ObjectOpResult> for ObjectOpResult
impl PartialEq<ObjectOpResult> for ObjectOpResult
source§fn eq(&self, other: &ObjectOpResult) -> bool
fn eq(&self, other: &ObjectOpResult) -> bool
self
and other
values to be equal, and is used
by ==
.