| //-*- ObjC -*- |
| |
| @protocol P0; |
| |
| @protocol P1 |
| -(void) fm0; |
| @end |
| |
| @class B; |
| |
| @interface Root |
| @property(readonly) int p0; |
| @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 |