quakeforge/ruamoko/lib/AutoreleasePool.r
Bill Currie 1f8b453d58 Add some return statments for now.
At the moment, qfcc has no way of knowing that a function will never
return. This is needed until the time qfcc can know that.
2011-02-10 14:48:06 +09:00

63 lines
971 B
R

#include "AutoreleasePool.h"
#include "Array+Private.h"
#include "Array.h"
#include "Array+Private.h"
@static Array *poolStack;
@implementation AutoreleasePool
- (id) init
{
if (!(self = [super init]))
return nil;
if (!poolStack)
poolStack = [[Array alloc] initWithCapacity: 1];
[poolStack addObjectNoRetain: self];
array = [Array new];
return self;
}
+ (void) addObject: (id)anObject
{
if (!poolStack || [poolStack count])
[[AutoreleasePool alloc] init];
[[poolStack lastObject] addObject: anObject];
}
- (void) addObject: (id)anObject
{
[array addObjectNoRetain: anObject];
}
- (id) retain
{
[self error: "Don't send -retain to an autorelease pool."];
return self;
}
- (id) autorelease
{
[self error: "Don't send -autorelease to an autorelease pool."];
return self;
}
- (void) dealloc
{
[array release];
[poolStack removeObjectNoRelease: self];
[super dealloc];
}
@end
void
ARP_FreeAllPools (void)
{
[poolStack removeAllObjects];
}