1417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar//-*- ObjC -*- 2417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 3417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@protocol P0; 4417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 5417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@protocol P1 6417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar-(void) fm0; 7417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end 8417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 9417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@class B; 10417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 11417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@interface Root 126fc9e7ad3576dcbee3028a42ef5dac931df8754cFariborz Jahanian@property(readonly) int p0; 13417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end 14417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 15417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@interface A : Root <P1> { 16417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar int iv0; 17417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar B *iv1; 1845e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar B<P1> *iv2; 19417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar} 20417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 21567c8df3646208e0a5816c57191ca36930f50ed3Fariborz Jahanian@property(readonly) int p0; 22417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@property(assign,nonatomic,readwrite) int p1; 23417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@property(copy) id p2; 24417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@property(retain) id p3; 25417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@property(assign, getter=getme, setter=setme:) id p4; 2645e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar@property(assign, readwrite) id p5; 27417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end 28417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 29417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@implementation A 30417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@dynamic p0; 31417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@synthesize p1 = iv0; 3245e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar 3345e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar// Property type can differ from ivar type. 3445e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar@synthesize p5 = iv2; 3545e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar 36417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar+(void) fm0 { 37417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar [super fm0]; 38417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar} 39417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar-(void) im0 { 408de8c36fad66c03a2335e5417d53d5be77ffa662Daniel Dunbar const char *s0 = __func__; 418de8c36fad66c03a2335e5417d53d5be77ffa662Daniel Dunbar const char *s1 = __FUNCTION__; 428de8c36fad66c03a2335e5417d53d5be77ffa662Daniel Dunbar const char *s2 = __PRETTY_FUNCTION__; 43417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar [super im0]; 4463c3a5fcddaa493b6b95ed8f5d2d329d931fff3eDaniel Dunbar int x = super.p0; 45417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar} 46417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar-(void) im1: (int) x, ... { 47417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar} 48417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end 49417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 50417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@implementation C : A 51417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end 52417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 53417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@interface A (Cat) 54417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end 55417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 56417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@implementation A (Cat) 57417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end 58417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 59fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar@interface B 60fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar@end 61fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar 62417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbarint f0(id x) { 63417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar @synchronized(x) { 64417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar } 65417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 66417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar @try { 67417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar @throw x; 68fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar 69417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar } @catch(A *e) { 70417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar @throw; 71fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar 72fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar // @catch param doesn't require name. 73fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar } @catch(B *) { 74fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar 75417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar } @finally { 76417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar ; 77417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar } 78417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 79417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar for (id y in x) { 80417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar break; 81417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar } 82417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar} 83417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar 84bd5e5a5a8f02c9c43be1f12b27fb06b5920f37daDaniel Dunbar#ifndef __OBJC2__ 85417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbarstruct s0 { 86417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar @defs(A); 87417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar}; 88bd5e5a5a8f02c9c43be1f12b27fb06b5920f37daDaniel Dunbar#endif 89