Use NSException instead of sending -error: in all methods.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1273 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
mccallum 1996-03-26 19:35:47 +00:00
parent 9aa534aee8
commit 6c5e0d54bb
6 changed files with 91 additions and 44 deletions

View file

@ -341,8 +341,10 @@
withName: NULL]; withName: NULL];
ret = (id) [self _coderConstPtrAtReference: xref]; ret = (id) [self _coderConstPtrAtReference: xref];
if (!ret) if (!ret)
[self error:"repeated class cross-reference number %u not found", [NSException
xref]; raise: NSGenericException
format: @"repeated class cross-reference number %u not found",
xref];
break; break;
} }
case CODER_CLASS: case CODER_CLASS:
@ -359,10 +361,13 @@
ret = objc_lookup_class (class_name); ret = objc_lookup_class (class_name);
if (ret == Nil) if (ret == Nil)
[self error:"Couldn't find class `%s'", class_name]; [NSException raise: NSGenericException
format: @"Couldn't find class `%s'", class_name];
if (class_get_version(ret) != class_version) if (class_get_version(ret) != class_version)
[self error:"Class version mismatch, executable %d != encoded %d", [NSException
class_get_version(ret), class_version]; raise: NSGenericException
format: @"Class version mismatch, executable %d != encoded %d",
class_get_version(ret), class_version];
{ {
unsigned xref; unsigned xref;
@ -374,7 +379,8 @@
break; break;
} }
default: default:
[self error:"unrecognized class tag = %d", (int)tag]; [NSException raise: NSGenericException
format: @"unrecognized class tag = %d", (int)tag];
} }
[self decodeUnindent]; [self decodeUnindent];
return ret; return ret;
@ -409,7 +415,9 @@
withName: NULL]; withName: NULL];
ret = (SEL) [self _coderConstPtrAtReference: xref]; ret = (SEL) [self _coderConstPtrAtReference: xref];
if (!ret) if (!ret)
[self error:"repeated selector cross-reference number %u not found", [NSException
raise: NSGenericException
format: @"repeated selector cross-reference number %u not found",
xref]; xref];
break; break;
} }
@ -433,12 +441,15 @@
ret = sel_get_typed_uid(sel_name, sel_types); ret = sel_get_typed_uid(sel_name, sel_types);
#endif #endif
if (!ret) if (!ret)
[self error:"Could not find selector (%s) with types [%s]", [NSException raise: NSGenericException
sel_name, sel_types]; format: @"Could not find selector (%s) with types [%s]",
sel_name, sel_types];
#if ! NeXT_runtime #if ! NeXT_runtime
if (strcmp(sel_types, NO_SEL_TYPES) if (strcmp(sel_types, NO_SEL_TYPES)
&& !(sel_types_match(sel_types, ret->sel_types))) && !(sel_types_match(sel_types, ret->sel_types)))
[self error:"ObjC runtime didn't provide SEL with matching type"]; [NSException
raise: NSGenericException
format: @"ObjC runtime didn't provide SEL with matching type"];
#endif #endif
{ {
unsigned xref; unsigned xref;
@ -451,7 +462,8 @@
break; break;
} }
default: default:
[self error:"unrecognized selector tag = %d", (int)tag]; [NSException raise: NSGenericException
format: @"unrecognized selector tag = %d", (int)tag];
} }
[self decodeUnindent]; [self decodeUnindent];
return ret; return ret;
@ -563,8 +575,10 @@
unsigned fref; unsigned fref;
if (!DOING_ROOT_OBJECT) if (!DOING_ROOT_OBJECT)
[self error:"can't decode forward reference when not decoding " [NSException
"a root object"]; raise: NSGenericException
format: @"can't decode forward reference when not decoding "
"a root object"];
[self decodeValueOfCType: @encode(unsigned) [self decodeValueOfCType: @encode(unsigned)
at: &fref at: &fref
withName: NULL]; withName: NULL];
@ -637,12 +651,15 @@
withName: NULL]; withName: NULL];
*anObjPtr = [self _coderObjectAtReference: xref]; *anObjPtr = [self _coderObjectAtReference: xref];
if (!*anObjPtr) if (!*anObjPtr)
[self error: "repeated object cross-reference number %u not found", [NSException
xref]; raise: NSGenericException
format: @ "repeated object cross-reference number %u not found",
xref];
break; break;
} }
default: default:
[self error:"unrecognized object tag = %d", (int)tag]; [NSException raise: NSGenericException
format: @"unrecognized object tag = %d", (int)tag];
} }
[self decodeUnindent]; [self decodeUnindent];
} }

View file

@ -454,10 +454,12 @@ my_object_is_class(id object)
sel_types = sel_types =
sel_get_type (sel_get_any_typed_uid (sel_get_name (sel))); sel_get_type (sel_get_any_typed_uid (sel_get_name (sel)));
#endif #endif
if (!sel_name) [self error:"ObjC runtime didn't provide SEL name"]; if (!sel_name || !*sel_name)
if (!*sel_name) [self error:"ObjC runtime didn't provide SEL name"]; [NSException raise: NSGenericException
if (!sel_types) [self error:"ObjC runtime didn't provide SEL type"]; format: @"ObjC runtime didn't provide SEL name"];
if (!*sel_types) [self error:"ObjC runtime didn't provide SEL type"]; if (!sel_types || !*sel_types)
[NSException raise: NSGenericException
format: @"ObjC runtime didn't provide SEL type"];
[self _coderCreateReferenceForConstPtr: sel]; [self _coderCreateReferenceForConstPtr: sel];
[self encodeValueOfCType: @encode(char*) [self encodeValueOfCType: @encode(char*)

View file

@ -41,9 +41,7 @@ static NSAutoreleasePool *current_pool = nil;
`release' message. Memory use grows, and grows, and... */ `release' message. Memory use grows, and grows, and... */
static BOOL autorelease_enabled = YES; static BOOL autorelease_enabled = YES;
/* When the released_count gets over this value, we call error:. /* When the released_count gets over this value, we raise an exception. */
In the future, I may change this to raise an exception or call
a function instead. */
static unsigned pool_count_warning_threshhold = UINT_MAX; static unsigned pool_count_warning_threshhold = UINT_MAX;
#define DEFAULT_SIZE 64 #define DEFAULT_SIZE 64
@ -103,7 +101,8 @@ static unsigned pool_count_warning_threshhold = UINT_MAX;
return; return;
if (released_count >= pool_count_warning_threshhold) if (released_count >= pool_count_warning_threshhold)
[self error:"AutoreleasePool count threshhold exceeded."]; [NSException raise: NSGenericException
format: @"AutoreleasePool count threshhold exceeded."];
if (released_count == released_size) if (released_count == released_size)
{ {
@ -126,7 +125,8 @@ static unsigned pool_count_warning_threshhold = UINT_MAX;
- (id) retain - (id) retain
{ {
[self error:"Don't call `-retain' on a NSAutoreleasePool"]; [NSException raise: NSGenericException
format: @"Don't call `-retain' on a NSAutoreleasePool"];
return self; return self;
} }
@ -148,7 +148,11 @@ static unsigned pool_count_warning_threshhold = UINT_MAX;
{ {
id anObject = released[i]; id anObject = released[i];
if (object_get_class(anObject) == (void*) 0xdeadface) if (object_get_class(anObject) == (void*) 0xdeadface)
[self error:"Autoreleasing deallocated object. Debug after setting [NSObject enableDoubleReleaseCheck:YES] to check for release errors."]; [NSException
raise: NSGenericException
format: @"Autoreleasing deallocated object.\n"
@"Suggest you debug after setting [NSObject "
@"enableDoubleReleaseCheck:YES]\nto check for release errors."];
released[i]=0; released[i]=0;
[anObject release]; [anObject release];
} }
@ -159,7 +163,8 @@ static unsigned pool_count_warning_threshhold = UINT_MAX;
- autorelease - autorelease
{ {
[self error:"Don't call `-autorelease' on a NSAutoreleasePool"]; [NSException raise: NSGenericException
format: @"Don't call `-autorelease' on a NSAutoreleasePool"];
return self; return self;
} }

View file

@ -148,7 +148,8 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
- free - free
{ {
[self error:"Use `dealloc' instead of `free'."]; [NSException raise: NSGenericException
format: @"Use `dealloc' instead of `free'."];
return nil; return nil;
} }
@ -244,8 +245,9 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
- (void) doesNotRecognizeSelector: (SEL)aSelector - (void) doesNotRecognizeSelector: (SEL)aSelector
{ {
[self error:"%s does not recognize %s", [NSException raise: NSGenericException
object_get_class_name(self), sel_get_name(aSelector)]; format: @"%s does not recognize %s",
object_get_class_name(self), sel_get_name(aSelector)];
} }
- (retval_t) forward:(SEL)aSel :(arglist_t)argFrame - (retval_t) forward:(SEL)aSel :(arglist_t)argFrame
@ -299,7 +301,9 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
unsigned retain_count = [self retainCount]; unsigned retain_count = [self retainCount];
release_count = [autorelease_class autoreleaseCountForObject:self]; release_count = [autorelease_class autoreleaseCountForObject:self];
if (release_count > retain_count) if (release_count > retain_count)
[self error:"Autorelease would release object too many times.\n" [NSException
raise: NSGenericException
format: @"Autorelease would release object too many times.\n"
"%d release(s) versus %d retain(s)", release_count, retain_count]; "%d release(s) versus %d retain(s)", release_count, retain_count];
} }
@ -351,7 +355,9 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
{ {
IMP msg = objc_msg_lookup(self, aSelector); IMP msg = objc_msg_lookup(self, aSelector);
if (!msg) if (!msg)
return [self error:"invalid selector passed to %s", sel_get_name(_cmd)]; return [NSException
raise: NSGenericException
format: @"invalid selector passed to %s", sel_get_name(_cmd)];
return (*msg)(self, aSelector); return (*msg)(self, aSelector);
} }
@ -359,7 +365,9 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
{ {
IMP msg = objc_msg_lookup(self, aSelector); IMP msg = objc_msg_lookup(self, aSelector);
if (!msg) if (!msg)
return [self error:"invalid selector passed to %s", sel_get_name(_cmd)]; return [NSException
raise: NSGenericException
format: @"invalid selector passed to %s", sel_get_name(_cmd)];
return (*msg)(self, aSelector, anObject); return (*msg)(self, aSelector, anObject);
} }
@ -367,7 +375,9 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
{ {
IMP msg = objc_msg_lookup(self, aSelector); IMP msg = objc_msg_lookup(self, aSelector);
if (!msg) if (!msg)
return [self error:"invalid selector passed to %s", sel_get_name(_cmd)]; return [NSException
raise: NSGenericException
format: @"invalid selector passed to %s", sel_get_name(_cmd)];
return (*msg)(self, aSelector, object1, object2); return (*msg)(self, aSelector, object1, object2);
} }
@ -379,7 +389,8 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
unsigned retain_count = [self retainCount]; unsigned retain_count = [self retainCount];
release_count = [autorelease_class autoreleaseCountForObject:self]; release_count = [autorelease_class autoreleaseCountForObject:self];
if (release_count > retain_count) if (release_count > retain_count)
[self error:"Release would release object too many times."]; [NSException raise: NSGenericException
format: @"Release would release object too many times."];
} }
if (NSDecrementExtraRefCountWasZero(self)) if (NSDecrementExtraRefCountWasZero(self))
@ -534,13 +545,16 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
- notImplemented:(SEL)aSel - notImplemented:(SEL)aSel
{ {
return [self error:"method %s not implemented", sel_get_name(aSel)]; return [NSException
raise: NSGenericException
format: @"method %s not implemented", sel_get_name(aSel)];
} }
- doesNotRecognize:(SEL)aSel - doesNotRecognize:(SEL)aSel
{ {
return [self error:"%s does not recognize %s", return [NSException raise: NSGenericException
object_get_class_name(self), sel_get_name(aSel)]; format: @"%s does not recognize %s",
object_get_class_name(self), sel_get_name(aSel)];
} }
- perform: (SEL)sel with: anObject - perform: (SEL)sel with: anObject
@ -637,13 +651,17 @@ BOOL NSDecrementExtraRefCountWasZero (id anObject)
- subclassResponsibility:(SEL)aSel - subclassResponsibility:(SEL)aSel
{ {
return [self error:"subclass should override %s", sel_get_name(aSel)]; return [NSException
raise: NSGenericException
format: @"subclass should override %s", sel_get_name(aSel)];
} }
- shouldNotImplement:(SEL)aSel - shouldNotImplement:(SEL)aSel
{ {
return [self error:"%s should not implement %s", return [NSException
object_get_class_name(self), sel_get_name(aSel)]; raise: NSGenericException
format: @"%s should not implement %s",
object_get_class_name(self), sel_get_name(aSel)];
} }
+ (int)streamVersion: (TypedStream*)aStream + (int)streamVersion: (TypedStream*)aStream

View file

@ -37,6 +37,7 @@
#include <Foundation/NSString.h> #include <Foundation/NSString.h>
#include <Foundation/NSArray.h> #include <Foundation/NSArray.h>
#include <Foundation/NSCharacterSet.h> #include <Foundation/NSCharacterSet.h>
#include <Foundation/NSException.h>
#include <Foundation/NSValue.h> #include <Foundation/NSValue.h>
#include <objects/IndexedCollection.h> #include <objects/IndexedCollection.h>
#include <objects/IndexedCollectionPrivate.h> #include <objects/IndexedCollectionPrivate.h>
@ -133,7 +134,8 @@ handle_printf_atsign (FILE *stream,
if (register_printf_function ('@', if (register_printf_function ('@',
(printf_function)handle_printf_atsign, (printf_function)handle_printf_atsign,
NULL)) NULL))
[self error: "register printf handling of %%@ failed"]; [NSException raise: NSGenericException
format: @"register printf handling of %%@ failed"];
#endif /* HAVE_REGISTER_PRINTF_FUNCTION */ #endif /* HAVE_REGISTER_PRINTF_FUNCTION */
} }
} }

View file

@ -97,7 +97,8 @@ static id tmp_kludge_protocol = nil;
- notImplemented: (SEL)aSel - notImplemented: (SEL)aSel
{ {
[Object error:"Proxy notImplemented %s", sel_get_name(aSel)]; [NSException raise: NSGenericException
format: @"Proxy notImplemented %s", sel_get_name(aSel)];
return self; return self;
} }
@ -349,7 +350,9 @@ enum
connection: proxy_connection]; connection: proxy_connection];
} }
default: default:
[self error: "Bad proxy tag"]; /* xxx This should be something different than NSGenericException. */
[NSException raise: NSGenericException
format: @"Bad proxy tag"];
} }
/* Not reached. */ /* Not reached. */
return nil; return nil;