You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
929 B
Plaintext

#import "Test.h"
#import "stdio.h"
#ifdef __unix__
// Declare these inline. The libsupc++ version of cxxabi.h does not include
// __cxa_eh_globls, even though it's mandated by the ABI.
namespace __cxxabiv1
{
struct __cxa_exception;
struct __cxa_eh_globals
{
__cxa_exception *caughtExceptions;
unsigned int uncaughtExceptions;
};
extern "C" __cxa_eh_globals *__cxa_get_globals();
}
extern "C" void check_uncaught_count(void)
{
assert(__cxxabiv1::__cxa_get_globals()->uncaughtExceptions == 0);
}
#else
extern "C" void check_uncaught_count(void) {}
#endif
extern "C" void rethrow(id);
extern "C" void poke_objcxx(void)
{
@try {
printf("Raising MyException\n");
Test *e = [Test new];
@throw e;
} @catch (Test *localException) {
printf("Caught - re-raising\n");
[localException retain];
localException = [localException autorelease];;
rethrow(localException);
}
}