This is NSException.m in view mode; [Download] [Up]
/*
Copyright (C) 1996
Ovidiu Predescu <ovidiu@bx.logicnet.ro>
Mircea Oancea <mircea@jupiter.elcom.pub.ro>
Author: Ovidiu Predescu <ovidiu@bx.logicnet.ro>
This file is part of the FoundationExtensions 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; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <config.h>
#include <stdarg.h>
#if HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <Foundation/NSString.h>
#include <extensions/NSException.h>
#include <extensions/exceptions/GeneralExceptions.h>
#include <extensions/exceptions/NSCoderExceptions.h>
#include <Foundation/NSArray.h>
#include "MissingMethods.h"
@implementation NSException (Extensions)
#if GNUSTEP_BASE_LIBRARY
# define name_ivar e_name
# define reason_ivar e_reason
# define userInfo_ivar e_info
#else
# define name_ivar name
# define reason_ivar reason
# define userInfo_ivar userInfo
#endif
#if NeXT_foundation_LIBRARY
NSString *NSMallocException = @"NSMallocException";
#endif
void __NSException_dummy_function_for_stupid_linkers()
{
extern void __MissingMethods_dummy_function_for_stupid_linkers();
__MissingMethods_dummy_function_for_stupid_linkers();
}
- (BOOL)exceptionIsKindOfClass:(Class)class
{
return [self isKindOfClass:class];
}
- (BOOL)exceptionIsIn:(NSArray*)exceptions
{
int i, n = [exceptions count];
for(i = 0; i < n; i++)
if([self exceptionIsKindOfClass:[[exceptions objectAtIndex:i] class]])
return YES;
return NO;
}
- (NSString*)errorString
{
NSString* message;
if(reason_ivar)
message = [NSString stringWithFormat:@"%s: caught %s exception "
@"object.\nReason: %s\n",
"Error", [[isa description] cString],
[reason_ivar cString]];
else message = [NSString stringWithFormat:@"%s: caught %s exception object.\n",
"Error", [[isa description] cString]];
return message;
}
- initWithFormat:(NSString*)format, ...
{
va_list ap;
va_start(ap, format);
reason_ivar = [[NSString alloc] initWithFormat:format arguments:ap];
va_end(ap);
return self;
}
- setName:(NSString*)_name
{
[_name retain];
[name_ivar release];
name_ivar = _name;
return self;
}
- setReason:(NSString*)_reason
{
[_reason retain];
[reason_ivar release];
reason_ivar = _reason;
return self;
}
- setUserInfo:(NSDictionary*)_userInfo
{
[_userInfo retain];
[userInfo_ivar release];
userInfo_ivar = _userInfo;
return self;
}
@end /* NSException (Extensions) */
#if NeXT_foundation_LIBRARY
@implementation NSException (MissingMethods)
- (NSString*)name { return name_ivar; }
- (NSString*)reason { return reason_ivar; }
- (NSDictionary*)userInfo { return userInfo_ivar; }
@end /* NSException (MissingMethods) */
#endif /* NeXT_foundation_LIBRARY */
@implementation NSException (ExceptionClassesMapping)
#ifndef GNUSTEP_BASE_LIBRARY
- initWithName:(NSString*)_name
reason:(NSString*)_reason
userInfo:(NSDictionary*)_userInfo
{
NSDictionary* exceptionMapping = nil;
Class exceptionClass;
if(!exceptionMapping) {
exceptionMapping = [NSDictionary dictionaryWithObjectsAndKeys:
[FoundationException class], NSGenericException,
[RangeException class], NSRangeException,
[InvalidArgumentException class], NSInvalidArgumentException,
[InternalInconsistencyException class], NSInternalInconsistencyException,
#if NeXT_foundation_LIBRARY
[SyntaxErrorException class], NSParseErrorException,
[NSException class], NSObjCInadequateRuntimeInformation,
[NSCoderException class], NSCodingException,
[NSException class], NSObjectInaccessibleException,
[NSException class], NSObjectNotAvailableException,
[NSException class], NSDestinationInvalidException,
[NSException class], NSOwnershipTransferException,
[NSException class], NSPortTimoutException,
[NSException class], NSInvalidSendPort,
[NSException class], NSInvalidReceivePort,
[NSException class], NSPortSendError,
[NSException class], NSPortReceiveError,
[NSException class], NSPortNameRegistrationError,
[NSException class], NSArchiverArchiveInconsistency,
[NSException class], NSArchiverClassError,
[NSException class], NSArchiverDescriptorError,
[NSException class], NSArchiverWriteReferenceError,
[NSException class], NSDateMissingTimeZone,
#endif
nil];
}
[_name retain];
[_reason retain];
[_userInfo retain];
exceptionClass = [exceptionMapping objectForKey:_name];
if(exceptionClass && ![isa isKindOfClass:exceptionClass]) {
[self autorelease];
self = [exceptionClass alloc];
}
[self->name_ivar release];
[self->reason_ivar release];
[self->userInfo_ivar release];
self->name_ivar = _name;
self->reason_ivar = _reason;
self->userInfo_ivar = _userInfo;
return self;
}
#endif
@end /* NSException (ExceptionClassesMapping) */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.