Skip to content

Support error return and out parameters in define_class! #283

@madsmtm

Description

@madsmtm

Add the equivalent of #276 and #277 to define_class!.

Effectively the implementation is:

// Result<(), Retained<NSError>> -> Bool
match res {
    Ok(()) => Bool::YES,
    Err(err) => {
        // Intentionally not objc_autoreleaseReturnValue, since the optimization that enables will not be able to kick in
        *__err_param = objc_autorelease(err);
        Bool::NO
    },
}

// Result<Retained<T, O>, Retained<NSError>> -> *mut T
match res {
    Ok(obj) => obj.release_according_to_memory_management_rules(sel), // See #282
    Err(err) => {
        // Intentionally not objc_autoreleaseReturnValue
        *__err_param = objc_autorelease(err);
        ptr::null_mut()
    },
}

See #277 (comment) for further ABI details.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-objc2Affects the `objc2`, `objc2-exception-helper` and/or `objc2-encode` cratesenhancementNew feature or request

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions