blob: cf7aee651776db011b270f76e1805078d0e08998 [file] [log] [blame]
/* APPLE LOCAL file radar 4436866, modified due to radar 4625635 */
/* This program tests use of properties . */
/* APPLE LOCAL radar 4899595 */
/* { dg-options "-fno-objc-new-property -mmacosx-version-min=10.5 -framework Foundation -fobjc-exceptions" } */
/* { dg-do run { target *-*-darwin* } } */
#include <Foundation/Foundation.h>
static id
object_getProperty_byref (id self, SEL _cmd, unsigned int offset)
{
id *slot = (id*) ((char*)self + offset);
return *slot;
}
static void
object_setProperty_byref (id self, SEL _cmd, id value, unsigned int offset)
{
id *slot = (id*) ((char*)self + offset);
id oldValue = *slot;
if (oldValue != value)
*slot = value;
}
@interface Person : NSObject
{
}
@property (ivar) NSString *firstName, *lastName;
@property(readonly, ivar) NSString *fullName;
@end
@interface Group : NSObject
{
}
@property (ivar) Person *techLead, *runtimeGuru, *propertiesMaven;
@end
@implementation Group
@property Person *techLead, *runtimeGuru, *propertiesMaven;
- init {
self.techLead = [[Person alloc] init];
self.runtimeGuru = [[Person alloc] init];
self.propertiesMaven = [[Person alloc] init];
return self;
}
@end
@implementation Person
@property NSString *firstName, *lastName;
@property(readonly, getter = fullName) NSString *fullName;
- (NSString*)fullName { // computed getter
return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
}
@end
NSString *playWithProperties()
{
Group *g = [[Group alloc] init] ;
g.techLead.firstName = @"Blaine";
g.techLead.lastName = @"Garst";
g.runtimeGuru.firstName = @"Greg";
g.runtimeGuru.lastName = @"Parker";
g.propertiesMaven.firstName = @"Patrick";
g.propertiesMaven.lastName = @"Beard";
return [NSString stringWithFormat:@"techlead %@ runtimeGuru %@ propertiesMaven %@",
g.techLead.fullName, g.runtimeGuru.fullName, g.propertiesMaven.fullName];
}
main()
{
char buf [256];
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
# if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 || __OBJC2__)
sprintf(buf, "%s", [playWithProperties() UTF8String]);
#else
sprintf(buf, "%s", [playWithProperties() cString]);
#endif
[pool release];
return strcmp (buf, "techlead Blaine Garst runtimeGuru Greg Parker propertiesMaven Patrick Beard");
}