Commit 2023bba8 by Nicola Pero Committed by Nicola Pero

throw-nil.m: New test.

	* objc/execute/exceptions/throw-nil.m: New test.
	* objc/execute/exceptions/handler-1.m: Updated to use the new
	objc_set_uncaught_exception_handler() function.
	* objc/execute/exceptions/matcher-1.m: New test.

From-SVN: r164024
parent e30511ed
2010-09-08 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/execute/exceptions/throw-nil.m: New test.
* objc/execute/exceptions/handler-1.m: Updated to use the new
objc_set_uncaught_exception_handler() function.
* objc/execute/exceptions/matcher-1.m: New test.
2010-09-08 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> 2010-09-08 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/38282 PR fortran/38282
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
/* Author: David Ayers */ /* Author: David Ayers */
#ifdef __NEXT_RUNTIME__ #ifdef __NEXT_RUNTIME__
/* This test only runs for the GNU runtime. */ /* This test only runs for the GNU runtime. TODO: It should work on
the NEXT runtime as well (needs testing).
*/
int main(void) int main(void)
{ {
...@@ -12,8 +14,8 @@ int main(void) ...@@ -12,8 +14,8 @@ int main(void)
#else #else
#include <objc/objc-api.h> #include <objc/objc-api.h>
#include <objc/objc-exception.h>
#include <objc/Object.h> #include <objc/Object.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
static unsigned int handlerExpected = 0; static unsigned int handlerExpected = 0;
...@@ -31,7 +33,7 @@ my_exception_handler(id excp) ...@@ -31,7 +33,7 @@ my_exception_handler(id excp)
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
_objc_unexpected_exception = my_exception_handler; objc_setUncaughtExceptionHandler (my_exception_handler);
@try @try
{ {
......
/* Test custom exception matchers */
/* Author: Nicola Pero */
#ifdef __NEXT_RUNTIME__
/* This test only runs for the GNU runtime. TODO: It should work on
the NEXT runtime as well (needs testing).
*/
int main(void)
{
return 0;
}
#else
#include <objc/objc-api.h>
#include <objc/objc-exception.h>
#include <objc/Object.h>
#include <stdlib.h>
static unsigned int handlerExpected = 0;
void
my_exception_matcher(Class match_class, id exception)
{
/* Always matches. */
return 1;
}
@interface A : Object
@end
@implementation A
@end
@interface B : Object
@end
@implementation B
@end
int
main(int argc, char *argv[])
{
objc_setExceptionMatcher (my_exception_matcher);
@try
{
@throw [A new];
}
@catch (B *exception)
{
/* Since we installed an exception matcher that always matches,
the exception should be sent here even if it's of class A and
this is looking for exceptions of class B.
*/
return 0;
}
@catch (id exception)
{
abort ();
}
abort ();
}
#endif
#include <objc/objc.h>
#include <objc/Object.h>
/* Test throwing a nil exception. A 'nil' exception can only be
* caugth by a generic exception handler.
*/
int main (void)
{
int exception_catched = 0;
int finally_called = 0;
@try
{
@throw nil;
}
@catch (Object *exc)
{
abort ();
}
@catch (id exc)
{
exception_catched = 1;
}
@finally
{
finally_called = 1;
}
if (exception_catched != 1
|| finally_called != 1)
{
abort ();
}
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment