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 | |
62 | int 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__ |
85 | struct s0 { |
86 | @defs(A); |
87 | }; |
88 | #endif |
89 | |