1417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar//-*- ObjC -*-
2417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
3417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@protocol P0;
4417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
5417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@protocol P1
6417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar-(void) fm0;
7417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end
8417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
9417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@class B;
10417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
11417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@interface Root
126fc9e7ad3576dcbee3028a42ef5dac931df8754cFariborz Jahanian@property(readonly) int p0;
13417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end
14417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
15417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@interface A : Root <P1> {
16417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  int iv0;
17417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  B *iv1;
1845e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar  B<P1> *iv2;
19417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar}
20417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
21567c8df3646208e0a5816c57191ca36930f50ed3Fariborz Jahanian@property(readonly) int p0;
22417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@property(assign,nonatomic,readwrite) int p1;
23417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@property(copy) id p2;
24417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@property(retain) id p3;
25417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@property(assign, getter=getme, setter=setme:) id p4;
2645e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar@property(assign, readwrite) id p5;
27417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end
28417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
29417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@implementation A
30417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@dynamic p0;
31417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@synthesize p1 = iv0;
3245e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar
3345e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar// Property type can differ from ivar type.
3445e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar@synthesize p5 = iv2;
3545e8423d7dcea657c14c55347e8a30ac904d7501Daniel Dunbar
36417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar+(void) fm0 {
37417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  [super fm0];
38417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar}
39417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar-(void) im0 {
408de8c36fad66c03a2335e5417d53d5be77ffa662Daniel Dunbar  const char *s0 = __func__;
418de8c36fad66c03a2335e5417d53d5be77ffa662Daniel Dunbar  const char *s1 = __FUNCTION__;
428de8c36fad66c03a2335e5417d53d5be77ffa662Daniel Dunbar  const char *s2 = __PRETTY_FUNCTION__;
43417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  [super im0];
4463c3a5fcddaa493b6b95ed8f5d2d329d931fff3eDaniel Dunbar  int x = super.p0;
45417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar}
46417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar-(void) im1: (int) x, ... {
47417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar}
48417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end
49417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
50417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@implementation C : A
51417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end
52417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
53417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@interface A (Cat)
54417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end
55417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
56417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@implementation A (Cat)
57417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar@end
58417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
59fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar@interface B
60fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar@end
61fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar
62417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbarint f0(id x) {
63417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  @synchronized(x) {
64417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  }
65417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
66417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  @try {
67417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar    @throw x;
68fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar
69417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  } @catch(A *e) {
70417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar    @throw;
71fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar
72fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar    // @catch param doesn't require name.
73fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar  } @catch(B *) {
74fe345572459b69a6b680322fef504b4f8bd98dd7Daniel Dunbar
75417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  } @finally {
76417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar    ;
77417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  }
78417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
79417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  for (id y in x) {
80417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar    break;
81417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  }
82417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar}
83417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar
84bd5e5a5a8f02c9c43be1f12b27fb06b5920f37daDaniel Dunbar#ifndef __OBJC2__
85417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbarstruct s0 {
86417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar  @defs(A);
87417dd179b2e92dcad3adb817b311e6297321a583Daniel Dunbar};
88bd5e5a5a8f02c9c43be1f12b27fb06b5920f37daDaniel Dunbar#endif
89