//
// byrefgc.m
// testObjects
//
// Created by Blaine Garst on 5/16/08.
// Copyright 2008 __MyCompanyName__. All rights reserved.
//
// CONFIG GC -C99
#import <Foundation/Foundation.h>
#include <stdio.h>
#include <Block.h>
int DidFinalize = 0;
int GotHi = 0;
int VersionCounter = 0;
@interface TestObject : NSObject {
int version;
}
- (void) hi;
@end
@implementation TestObject
- init {
version = VersionCounter++;
return self;
}
- (void)finalize {
DidFinalize++;
[super finalize];
}
- (void) hi {
GotHi++;
}
@end
void (^get_block(void))(void) {
__block TestObject * to = [[TestObject alloc] init];
return [^{ [to hi]; to = [[TestObject alloc] init]; } copy];
}
int main(int argc, char *argv[]) {
void (^voidvoid)(void) = get_block();
voidvoid();
voidvoid();
voidvoid();
voidvoid();
voidvoid();
voidvoid();
voidvoid = nil;
for (int i = 0; i < 8000; ++i) {
[NSObject new];
}
[[NSGarbageCollector defaultCollector] collectIfNeeded];
if ((DidFinalize + 2) < VersionCounter) {
printf("*** return 1;
}
printf(" return 0;
}