@@ -21,17 +21,17 @@ #import "OFArray.h" #import "OFArray_subarray.h" #import "OFArray_adjacent.h" #import "OFString.h" #import "OFXMLElement.h" -#import "OFAutoreleasePool.h" #import "OFEnumerationMutationException.h" #import "OFInvalidArgumentException.h" #import "OFNotImplementedException.h" #import "OFOutOfRangeException.h" +#import "autorelease.h" #import "macros.h" static struct { Class isa; } placeholder; @@ -358,11 +358,11 @@ } - (OFString*)componentsJoinedByString: (OFString*)separator usingSelector: (SEL)selector { - OFAutoreleasePool *pool, *pool2; + void *pool; OFMutableString *ret; id *objects; size_t i, count = [self count]; IMP append; @@ -372,28 +372,28 @@ return [[self firstObject] performSelector: selector]; ret = [OFMutableString string]; append = [ret methodForSelector: @selector(appendString:)]; - pool = [[OFAutoreleasePool alloc] init]; + pool = objc_autoreleasePoolPush(); objects = [self objects]; - pool2 = [[OFAutoreleasePool alloc] init]; - for (i = 0; i < count - 1; i++) { + void *pool2 = objc_autoreleasePoolPush(); + append(ret, @selector(appendString:), [objects[i] performSelector: selector]); append(ret, @selector(appendString:), separator); - [pool2 releaseObjects]; + objc_autoreleasePoolPop(pool2); } append(ret, @selector(appendString:), [objects[i] performSelector: selector]); [ret makeImmutable]; - [pool release]; + objc_autoreleasePoolPop(pool); return ret; } - (BOOL)isEqual: (id)object @@ -442,17 +442,17 @@ return hash; } - (OFString*)description { - OFAutoreleasePool *pool; + void *pool; OFMutableString *ret; if ([self count] == 0) return @"()"; - pool = [[OFAutoreleasePool alloc] init]; + pool = objc_autoreleasePoolPush(); ret = [[self componentsJoinedByString: @",\n"] mutableCopy]; @try { [ret prependString: @"(\n"]; [ret replaceOccurrencesOfString: @"\n" @@ -461,22 +461,20 @@ } @catch (id e) { [ret release]; @throw e; } - [pool release]; + objc_autoreleasePoolPop(pool); [ret makeImmutable]; - [ret autorelease]; - return ret; + return [ret autorelease]; } - (OFXMLElement*)XMLElementBySerializing { - OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; - OFAutoreleasePool *pool2; + void *pool = objc_autoreleasePoolPush(); OFXMLElement *element; id *objects = [self objects]; size_t i, count = [self count]; if ([self isKindOfClass: [OFMutableArray class]]) @@ -484,42 +482,42 @@ namespace: OF_SERIALIZATION_NS]; else element = [OFXMLElement elementWithName: @"OFArray" namespace: OF_SERIALIZATION_NS]; - pool2 = [[OFAutoreleasePool alloc] init]; - for (i = 0; i < count; i++) { + void *pool2 = objc_autoreleasePoolPush(); + [element addChild: [objects[i] XMLElementBySerializing]]; - [pool2 releaseObjects]; + objc_autoreleasePoolPop(pool2); } [element retain]; - [pool release]; - [element autorelease]; + + objc_autoreleasePoolPop(pool); - return element; + return [element autorelease]; } - (OFString*)JSONRepresentation { - OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; + void *pool = objc_autoreleasePoolPush(); OFMutableString *JSON; JSON = [[self componentsJoinedByString: @"," usingSelector: @selector(JSONRepresentation)] mutableCopy]; - [pool release]; - [JSON autorelease]; [JSON prependString: @"["]; [JSON appendString: @"]"]; [JSON makeImmutable]; - return JSON; + objc_autoreleasePoolPop(pool); + + return [JSON autorelease]; } - (void)makeObjectsPerformSelector: (SEL)selector { id *objects = [self objects];