mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-31 00:30:53 +00:00
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:
parent
9aa534aee8
commit
6c5e0d54bb
6 changed files with 91 additions and 44 deletions
|
@ -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];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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*)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue