Index: src/OFDictionary_hashtable.m ================================================================== --- src/OFDictionary_hashtable.m +++ src/OFDictionary_hashtable.m @@ -87,31 +87,21 @@ size = hashtable->size; count = hashtable->count; for (i = 0; i < size; i++) { - id key; struct of_dictionary_hashtable_bucket *bucket; if (hashtable->data[i] == NULL || hashtable->data[i] == DELETED) continue; bucket = [self allocMemoryWithSize: sizeof(*bucket)]; - key = (copyKeys + bucket->key = (copyKeys ? [hashtable->data[i]->key copy] : [hashtable->data[i]->key retain]); - - @try { - [hashtable->data[i]->object retain]; - } @catch (id e) { - [key release]; - @throw e; - } - - bucket->key = key; - bucket->object = hashtable->data[i]->object; + bucket->object = [hashtable->data[i]->object retain]; bucket->hash = hashtable->data[i]->hash; data[i] = bucket; } } @catch (id e) { @@ -179,22 +169,15 @@ if (data[i] != NULL) @throw [OFOutOfRangeException newWithClass: isa]; bucket = [self allocMemoryWithSize: sizeof(*bucket)]; - key = [key copy]; - - @try { - object = [dictionary objectForKey: key]; - [object retain]; - } @catch (id e) { - [key release]; - @throw e; - } - - bucket->key = key; - bucket->object = object; + + object = [dictionary objectForKey: key]; + + bucket->key = [key copy]; + bucket->object = [object retain]; bucket->hash = hash; data[i] = bucket; } @@ -226,22 +209,14 @@ size = 2; for (i = 0; i < size; i++) data[i] = NULL; i = [key hash] & 1; + bucket = [self allocMemoryWithSize: sizeof(*bucket)]; - key = [key copy]; - - @try { - [object retain]; - } @catch (id e) { - [key release]; - @throw e; - } - - bucket->key = key; - bucket->object = object; + bucket->key = [key copy]; + bucket->object = [object retain]; bucket->hash = [key hash]; data[i] = bucket; count = 1; } @catch (id e) { @@ -327,19 +302,12 @@ bucket = [self allocMemoryWithSize: sizeof(*bucket)]; key = [keysCArray[i] copy]; - @try { - [objectsCArray[i] retain]; - } @catch (id e) { - [key release]; - @throw e; - } - bucket->key = key; - bucket->object = objectsCArray[i]; + bucket->object = [objectsCArray[i] retain]; bucket->hash = hash; data[j] = bucket; continue; @@ -350,18 +318,11 @@ * just replace it so that the programmer gets the same * behavior as if he'd call setObject:forKey: for each * key/object pair. */ [objectsCArray[i] retain]; - - @try { - [data[j]->object release]; - } @catch (id e) { - [objectsCArray[i] release]; - @throw e; - } - + [data[j]->object release]; data[j]->object = objectsCArray[i]; } } @catch (id e) { [self release]; @throw e; @@ -416,21 +377,12 @@ /* Add first key / object pair */ hash = [key hash]; j = hash & (size - 1); bucket = [self allocMemoryWithSize: sizeof(*bucket)]; - key = [key copy]; - - @try { - [object retain]; - } @catch (id e) { - [key release]; - @throw e; - } - - bucket->key = key; - bucket->object = object; + bucket->key = [key copy]; + bucket->object = [object retain]; bucket->hash = hash; data[j] = bucket; for (i = 1; i < count; i++) { @@ -481,21 +433,12 @@ @throw [OFOutOfRangeException newWithClass: isa]; bucket = [self allocMemoryWithSize: sizeof(*bucket)]; - key = [key copy]; - - @try { - [object retain]; - } @catch (id e) { - [key release]; - @throw e; - } - - bucket->key = key; - bucket->object = object; + bucket->key = [key copy]; + bucket->object = [object retain]; bucket->hash = hash; data[j] = bucket; continue; @@ -506,18 +449,11 @@ * just replace it so that the programmer gets the same * behavior as if he'd call setObject:forKey: for each * key/object pair. */ [object retain]; - - @try { - [data[j]->object release]; - } @catch (id e) { - [object release]; - @throw e; - } - + [data[j]->object release]; data[j]->object = object; count--; } } @catch (id e) { [self release]; Index: src/OFMutableDictionary_hashtable.m ================================================================== --- src/OFMutableDictionary_hashtable.m +++ src/OFMutableDictionary_hashtable.m @@ -157,28 +157,23 @@ if (i >= last) @throw [OFOutOfRangeException newWithClass: isa]; bucket = [self allocMemoryWithSize: sizeof(*bucket)]; - @try { - key = (copyKey ? [key copy] : [key retain]); - } @catch (id e) { - [self freeMemory: bucket]; - @throw e; - } - - @try { - [object retain]; - } @catch (id e) { - [self freeMemory: bucket]; - [key release]; - @throw e; - } - - bucket->key = key; - bucket->object = object; + if (copyKey) { + @try { + bucket->key = [key copy]; + } @catch (id e) { + [self freeMemory: bucket]; + @throw e; + } + } else + bucket->key = [key retain]; + + bucket->object = [object retain]; bucket->hash = hash; + data[i] = bucket; count++; return; } Index: src/OFStreamSelectObserver.m ================================================================== --- src/OFStreamSelectObserver.m +++ src/OFStreamSelectObserver.m @@ -41,20 +41,15 @@ @implementation OFStreamSelectObserver - init { self = [super init]; - @try { - FD_ZERO(&readFDs); - FD_ZERO(&writeFDs); - - FD_SET(cancelFD[0], &readFDs); - nFDs = cancelFD[0] + 1; - } @catch (id e) { - [self release]; - @throw e; - } + FD_ZERO(&readFDs); + FD_ZERO(&writeFDs); + + FD_SET(cancelFD[0], &readFDs); + nFDs = cancelFD[0] + 1; return self; } - (void)_addStream: (OFStream*)stream Index: src/OFThread.m ================================================================== --- src/OFThread.m +++ src/OFThread.m @@ -259,16 +259,11 @@ - initWithObject: (id)object_ { self = [super init]; - @try { - object = [object_ retain]; - } @catch (id e) { - [self release]; - @throw e; - } + object = [object_ retain]; return self; } #ifdef OF_HAVE_BLOCKS @@ -281,17 +276,12 @@ - initWithBlock: (of_thread_block_t)block_ object: (id)object_ { self = [super init]; - @try { - block = [block_ retain]; - object = [object_ retain]; - } @catch (id e) { - [self release]; - @throw e; - } + block = [block_ retain]; + object = [object_ retain]; return self; } #endif Index: src/OFXMLElement.m ================================================================== --- src/OFXMLElement.m +++ src/OFXMLElement.m @@ -278,16 +278,11 @@ @throw [OFMalformedXMLException newWithClass: c parser: parser]; self = [delegate->element retain]; - @try { - [pool release]; - } @catch (id e) { - [self release]; - @throw e; - } + [pool release]; return self; } - initWithFile: (OFString*)path @@ -317,16 +312,11 @@ @throw [OFMalformedXMLException newWithClass: c parser: parser]; self = [delegate->element retain]; - @try { - [pool release]; - } @catch (id e) { - [self release]; - @throw e; - } + [pool release]; return self; } - initWithSerialization: (OFXMLElement*)element @@ -425,18 +415,11 @@ } - (void)setChildren: (OFArray*)children_ { OFMutableArray *new = [children_ mutableCopy]; - - @try { - [children release]; - } @catch (id e) { - [new release]; - @throw e; - } - + [children release]; children = new; } - (OFArray*)children {