//-*- ObjC -*- | |
@protocol P0; | |
@protocol P1 | |
-(void) fm0; | |
@end | |
@class B; | |
@interface Root | |
@end | |
@interface A : Root <P1> { | |
int iv0; | |
B *iv1; | |
B<P1> *iv2; | |
} | |
@property(readonly) int p0; | |
@property(assign,nonatomic,readwrite) int p1; | |
@property(copy) id p2; | |
@property(retain) id p3; | |
@property(assign, getter=getme, setter=setme:) id p4; | |
@property(assign, readwrite) id p5; | |
@end | |
@implementation A | |
@dynamic p0; | |
@synthesize p1 = iv0; | |
// Property type can differ from ivar type. | |
@synthesize p5 = iv2; | |
+(void) fm0 { | |
[super fm0]; | |
} | |
-(void) im0 { | |
const char *s0 = __func__; | |
const char *s1 = __FUNCTION__; | |
const char *s2 = __PRETTY_FUNCTION__; | |
[super im0]; | |
int x = super.p0; | |
} | |
-(void) im1: (int) x, ... { | |
} | |
@end | |
@implementation C : A | |
@end | |
@interface A (Cat) | |
@end | |
@implementation A (Cat) | |
@end | |
@interface B | |
@end | |
int f0(id x) { | |
@synchronized(x) { | |
} | |
@try { | |
@throw x; | |
} @catch(A *e) { | |
@throw; | |
// @catch param doesn't require name. | |
} @catch(B *) { | |
} @finally { | |
; | |
} | |
for (id y in x) { | |
break; | |
} | |
} | |
#ifndef __OBJC2__ | |
struct s0 { | |
@defs(A); | |
}; | |
#endif |