1#import <Foundation/Foundation.h>
2#include <stdio.h>
3
4@interface MyString : NSObject {
5    NSString *str;
6    NSDate *date;
7    BOOL _is_valid;
8}
9
10- (id)initWithNSString:(NSString *)string;
11- (BOOL)isValid;
12@end
13
14@implementation MyString
15- (id)initWithNSString:(NSString *)string
16{
17    if (self = [super init])
18    {
19        str = [NSString stringWithString:string];
20        date = [NSDate date];
21    }
22    _is_valid = YES;
23    return self;
24}
25
26- (BOOL)isValid
27{
28    return _is_valid;
29}
30
31- (void)dealloc
32{
33    [date release];
34    [str release];
35    [super dealloc];
36}
37
38- (NSString *)description
39{
40    return [str stringByAppendingFormat:@" with timestamp: %@", date];
41}
42@end
43
44void
45Test_MyString (const char *program)
46{
47    NSString *str = [NSString stringWithFormat:@"Hello from '%s'", program];
48    MyString *my = [[MyString alloc] initWithNSString:str];
49    if ([my isValid])
50        printf("my is valid!\n");
51
52    NSLog(@"NSString instance: %@", [str description]); // Set breakpoint here.
53                                                        // Test 'p (int)[my isValid]'.
54                                                        // The expression parser should not crash -- rdar://problem/9691614.
55
56    NSLog(@"MyString instance: %@", [my description]);
57}
58
59int main (int argc, char const *argv[])
60{
61    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
62
63    Test_MyString (argv[0]);
64
65    [pool release];
66    return 0;
67}
68