Make sure the unwind state is synchronised between the Objective-C
and C++ exception objects.
Reintroduce the is-pointer callback so that __cxa_begin_catch
adjusts the pointer correctly. Objective-C++ code uses
__cxa_begin_catch without the objc_begin_catch wrapper and the
runtime does not call the __do_catch method on the type info if the
type info is an exact match, so the caught object ended up being a
pointer to the object. This also meant that we needed to remove the
double dereference in the __do_catch methods.
Introduce a subclass of std::type_info for all Objective-C types
and move the virtual functions there. This should simplify
supporting libc++abi.
__cxa_begin_catch
adjusts the pointer correctly. Objective-C++ code uses__cxa_begin_catch
without theobjc_begin_catch
wrapper and the runtime does not call the__do_catch
method on the type info if the type info is an exact match, so the caught object ended up being a pointer to the object. This also meant that we needed to remove the double dereference in the__do_catch
methods.std::type_info
for all Objective-C types and move thevirtual
functions there. This should simplify supporting libc++abi.