beeware / beeware/rubicon-objc

Objective-C exception handling support

Open
#73 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Python
Stars
301
Forks
70
Avg merge
1d 8h
Merged PRs (30d)
18

Description

This one is a bit tricky. On all modern architectures, Objective-C exceptions are implemented using [libunwind](http://www.nongnu.org/libunwind/), the same system as C++ exceptions. Unfortunately it's not possible to handle these exceptions using only `ctypes`. We would need a small C helper function, something like `bool callAndCatchException(void *(*func)(void *), void **outRetval, id *outException)` that calls the function pointer, catches any exception that comes out, and reports success/failure as well as the return value or exception.

The other question is how we should expose Objective-C exceptions on the Python side. Should we route every Objective-C method call through our helper function, and automatically wrap any Objective-C exceptions in Python exceptions? Or should we provide an extra function to allow the user to do this on demand? I would be in favor of the latter option, because using `callAndCatchException` adds extra overhead even when no exceptions are caught (not just the call, but also the creation of the wrapper `func`). There's also not that much benefit in converting Objective-C exceptions to Python exceptions if they won't be handled anyway - in fact it's probably more useful *not* to convert them, to get a proper crash report with the native stack trace and debugging info.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.