| /* APPLE LOCAL file radar 4582997 */ |
| /* Test that property need not be declared in @implementation for it to be used. */ |
| /* APPLE LOCAL radar 4899595 */ |
| /* { dg-options "-fno-objc-new-property -mmacosx-version-min=10.5 -framework Cocoa" } */ |
| /* { dg-do run { target *-*-darwin* } } */ |
| #include <Foundation/Foundation.h> |
| |
| @interface Foo : NSObject |
| { |
| @private |
| int _userDefined; |
| } |
| @property (ivar) int bar; |
| @property int userDefined; |
| @end |
| |
| @implementation Foo |
| @property int bar; |
| |
| - (void)setUserDefined:(int)f |
| { |
| _userDefined = f; |
| if (self.userDefined != _userDefined) |
| abort (); |
| } |
| - (int)userDefined |
| { |
| return _userDefined; |
| } |
| @end |
| |
| @interface MyObserver : NSObject |
| @end |
| |
| @implementation MyObserver |
| |
| -(void)observeValueForKeyPath:(NSString*)keypath ofObject:obj change:(NSDictionary *)change context:(void *) context |
| { |
| # if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 || __OBJC2__) |
| printf("observing %s is now %d\n", [keypath UTF8String], ((Foo *)obj).bar); |
| #else |
| printf("observing %s is now %d\n", [keypath cString], ((Foo *)obj).bar); |
| #endif |
| } |
| @end |
| |
| int main (int argc, const char * argv[]) { |
| NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; |
| |
| Foo *f = [[Foo alloc] init]; |
| [f addObserver:[[MyObserver alloc] init] forKeyPath:@"bar" options:NSKeyValueObservingOptionNew context:0]; |
| f.bar = 707; |
| f.bar = 808; |
| f.bar = 909; |
| f.userDefined = 707; |
| f.userDefined = 808; |
| f.userDefined = 909; |
| [pool release]; |
| return 0; |
| } |
| |