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