Updates for MacOS-X compatibility

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@26690 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2008-06-23 07:15:10 +00:00
parent 3bbf4ce6d8
commit 924fcadb91
5 changed files with 34 additions and 15 deletions

View file

@ -1,3 +1,10 @@
2008-06-21 Richard Frith-Macdonald <rfm@gnu.org>
* Headers/Foundation/NSException.h
* Source/NSException.h
Change macros for setting uncaught handler to be functions (to match
MacOS-X) and make the pointer itsself be private.
2008-06-18 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSConnection.m: Fix error getting run loop for current

View file

@ -251,12 +251,6 @@ typedef struct _NSHandler
*/
typedef void NSUncaughtExceptionHandler(NSException *exception);
/**
* Variable used to hold the current uncaught exception handler. Use the
* function NSSetUncaughtExceptionHandler() to set this.
*/
GS_EXPORT NSUncaughtExceptionHandler *_NSUncaughtExceptionHandler;
/**
* Returns the exception handler called when an exception is generated and
* not caught by the programmer (by enclosing in <code>NS_DURING</code> and
@ -264,7 +258,8 @@ GS_EXPORT NSUncaughtExceptionHandler *_NSUncaughtExceptionHandler;
* an error message and exits the program. You can change this behavior by
* calling NSSetUncaughtExceptionHandler().
*/
#define NSGetUncaughtExceptionHandler() _NSUncaughtExceptionHandler
GS_EXPORT NSUncaughtExceptionHandler *
NSGetUncaughtExceptionHandler();
/**
* <p>Sets the exception handler called when an exception is generated and
@ -290,8 +285,8 @@ GS_EXPORT NSUncaughtExceptionHandler *_NSUncaughtExceptionHandler;
* [NSException] instance as an argument.
* </p>
*/
#define NSSetUncaughtExceptionHandler(proc) \
(_NSUncaughtExceptionHandler = (proc))
GS_EXPORT void
NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler *handler);
/* NS_DURING, NS_HANDLER and NS_ENDHANDLER are always used like:

View file

@ -42,6 +42,8 @@
#include <stdio.h>
static NSUncaughtExceptionHandler *_NSUncaughtExceptionHandler;
#define _e_info (((id*)_reserved)[0])
#define _e_stack (((id*)_reserved)[1])
@ -1051,3 +1053,15 @@ _NSRemoveHandler (NSHandler* handler)
#endif
thread->_exception_handler = handler->next;
}
NSUncaughtExceptionHandler *
NSGetUncaughtExceptionHandler()
{
return _NSUncaughtExceptionHandler;
}
void
NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler *handler)
{
_NSUncaughtExceptionHandler = handler;
}

View file

@ -104,12 +104,6 @@ NSString *const NSIsNotNilTransformerName
NSString *const NSUnarchiveFromDataTransformerName
= @"NSUnarchiveFromData";
/**
* Last-resort exception handler, a function taking an NSException and
* returning void. Set with NSSetUncaughtExceptionHandler().
*/
NSUncaughtExceptionHandler *_NSUncaughtExceptionHandler;
/* NSBundle */
NSString *NSBundleDidLoadNotification = @"NSBundleDidLoadNotification";

View file

@ -2,6 +2,12 @@
#include "Foundation/Foundation.h"
static void
handler(NSException *e)
{
NSLog(@"Caught %@", e);
}
int main()
{
CREATE_AUTORELEASE_POOL(arp);
@ -43,6 +49,9 @@ int main()
printf("Second task has completed\n");
NSSetUncaughtExceptionHandler(handler);
[NSException raise: NSGenericException format: @"an exception"];
DESTROY(arp);
return 0;
}