From 618cd00c855608b8c4c41380cab40fed1adb260d Mon Sep 17 00:00:00 2001 From: Andrew McCallum Date: Mon, 10 Apr 1995 00:10:51 +0000 Subject: [PATCH] Initial revision git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@342 72102866-910b-0410-8b05-ffd578937521 --- Source/NSAssertionHandler.m | 81 +++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Source/NSAssertionHandler.m diff --git a/Source/NSAssertionHandler.m b/Source/NSAssertionHandler.m new file mode 100644 index 000000000..71a6a3c56 --- /dev/null +++ b/Source/NSAssertionHandler.m @@ -0,0 +1,81 @@ +/* NSAssertionHandler - Object encapsulation of assertions + Copyright (C) 1993,1994 Free Software Foundation, Inc. + + Written by: Adam Fedor + Date: Apr 1995 + + This file is part of the GNU Objective C Class Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ +#include +#include + +@implementation NSAssertionHandler + ++ (NSAssertionHandler *)currentHandler +{ + // FIXME: current handler should come from current thread dictionary + static NSAssertionHandler *only_one = nil; + + if (!only_one) + only_one = [NSAssertionHandler new]; + return only_one; +} + +- (void)handleFailureInFunction:(NSString *)functionName + file:(NSString *)fileName + lineNumber:(int)line + description:(NSString *)format,... +{ + va_list ap; + + va_start(ap, format); + // FIXME: should be NSLog + fprintf(stderr, "Assertion failed in %s, file %s:%d. ", + [functionName cString], [fileName cString], line); + vfprintf(stderr, [format cString], ap); + fprintf(stderr, "\n"); + va_end(ap); + + [NSException raise:NSInternalInconsistencyException + format:@"Assertion failed in %s", [functionName cString]]; + /* NOT REACHED */ +} + +- (void)handleFailureInMethod:(SEL)aSelector + object:object + file:(NSString *)fileName + lineNumber:(int)line + description:(NSString *)format,... +{ + va_list ap; + + va_start(ap, format); + // FIXME: should be NSLog + fprintf(stderr, "Assertion failed in %s, method %s, file %s:%d. ", + object_get_class_name(object), sel_get_name(aSelector), + [fileName cString], line); + vfprintf(stderr, [format cString], ap); + fprintf(stderr, "\n"); + va_end(ap); + + [NSException raise:NSInternalInconsistencyException + format:@"Assertion failed in %s, method %s", + object_get_class_name(object), sel_get_name(aSelector)]; + /* NOT REACHED */ +} + +@end