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

source

pub fn ok(&self) -> bool

source

pub fn succeed(&mut self) -> bool

Set this ObjectOpResult to true and return true.

source

pub fn fail(&mut self, code: JSErrNum) -> bool

source

pub fn fail_cant_redefine_prop(&mut self) -> bool

source

pub fn fail_read_only(&mut self) -> bool

source

pub fn fail_getter_only(&mut self) -> bool

source

pub fn fail_cant_delete(&mut self) -> bool

source

pub fn fail_cant_set_interposed(&mut self) -> bool

source

pub fn fail_cant_define_window_element(&mut self) -> bool

source

pub fn fail_cant_delete_window_element(&mut self) -> bool

source

pub fn fail_cant_define_window_named_property(&mut self) -> bool

source

pub fn fail_cant_delete_window_named_property(&mut self) -> bool

source

pub fn fail_cant_define_window_non_configurable(&mut self) -> bool

source

pub fn fail_cant_prevent_extensions(&mut self) -> bool

source

pub fn fail_cant_set_proto(&mut self) -> bool

source

pub fn fail_no_named_setter(&mut self) -> bool

source

pub fn fail_no_indexed_setter(&mut self) -> bool

source

pub fn fail_not_data_descriptor(&mut self) -> bool

source

pub fn fail_invalid_descriptor(&mut self) -> bool

source

pub fn fail_bad_array_length(&mut self) -> bool

source

pub fn fail_bad_index(&mut self) -> bool

source

pub fn failure_code(&self) -> u32

source

pub fn failNoNamedSetter(&mut self) -> bool

👎Deprecated

Trait Implementations§

source§

impl Clone for ObjectOpResult

source§

fn clone(&self) -> ObjectOpResult

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ObjectOpResult

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Default for ObjectOpResult

source§

fn default() -> ObjectOpResult

Returns the “default value” for a type. Read more
source§

impl PartialEq<ObjectOpResult> for ObjectOpResult

source§

fn eq(&self, other: &ObjectOpResult) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for ObjectOpResult

source§

impl StructuralPartialEq for ObjectOpResult

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.