1//-*- ObjC -*- 2 3@protocol P0; 4 5@protocol P1 6-(void) fm0; 7@end 8 9@class B; 10 11@interface Root 12@property(readonly) int p0; 13@end 14 15@interface A : Root <P1> { 16 int iv0; 17 B *iv1; 18 B<P1> *iv2; 19} 20 21@property(readonly) int p0; 22@property(assign,nonatomic,readwrite) int p1; 23@property(copy) id p2; 24@property(retain) id p3; 25@property(assign, getter=getme, setter=setme:) id p4; 26@property(assign, readwrite) id p5; 27@end 28 29@implementation A 30@dynamic p0; 31@synthesize p1 = iv0; 32 33// Property type can differ from ivar type. 34@synthesize p5 = iv2; 35 36+(void) fm0 { 37 [super fm0]; 38} 39-(void) im0 { 40 const char *s0 = __func__; 41 const char *s1 = __FUNCTION__; 42 const char *s2 = __PRETTY_FUNCTION__; 43 [super im0]; 44 int x = super.p0; 45} 46-(void) im1: (int) x, ... { 47} 48@end 49 50@implementation C : A 51@end 52 53@interface A (Cat) 54@end 55 56@implementation A (Cat) 57@end 58 59@interface B 60@end 61 62int f0(id x) { 63 @synchronized(x) { 64 } 65 66 @try { 67 @throw x; 68 69 } @catch(A *e) { 70 @throw; 71 72 // @catch param doesn't require name. 73 } @catch(B *) { 74 75 } @finally { 76 ; 77 } 78 79 for (id y in x) { 80 break; 81 } 82} 83 84#ifndef __OBJC2__ 85struct s0 { 86 @defs(A); 87}; 88#endif 89