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