86 lines · plain
1 2struct SB {3 virtual void meth();4};5 6struct SS : public SB {7 void submeth() {8 this->meth();9 SB::meth();10 }11};12 13@interface IB14-(void)meth;15+(void)ClsMeth;16@end17 18@interface IS : IB19-(void)submeth;20+(void)ClsMeth;21@end22 23@implementation IS24-(void)submeth {25 [self meth];26 [super meth];27}28+(void)ClsMeth {29 [super ClsMeth];30}31@end32 33void foo(SS *ss, IS* is, Class cls) {34 ss->meth();35 [is meth];36 [IB ClsMeth];37 [cls ClsMeth];38}39 40@interface NSObject41+(id)alloc;42-(id)init;43@end44 45@interface Test : NSObject46@end47 48void test2() {49 id o = [[Test alloc] init];50}51 52@interface Test2 : NSObject53@property (assign) id someProp;54@end55 56void test3(Test2 *o) {57 id v = o.someProp;58}59 60// RUN: c-index-test -cursor-at=%s:8:11 \61// RUN: -cursor-at=%s:9:11 \62// RUN: -cursor-at=%s:25:11 \63// RUN: -cursor-at=%s:26:11 \64// RUN: -cursor-at=%s:29:11 \65// RUN: -cursor-at=%s:34:9 \66// RUN: -cursor-at=%s:35:9 \67// RUN: -cursor-at=%s:36:9 \68// RUN: -cursor-at=%s:37:9 \69// RUN: -cursor-at=%s:49:26 \70// RUN: -cursor-at=%s:57:12 \71// RUN: %s | FileCheck %s72 73// CHECK: 8:11 MemberRefExpr=meth:3:16 {{.*}} Dynamic-call74// CHECK-NOT: 9:9 {{.*}} Dynamic-call75// CHECK: 25:3 ObjCMessageExpr=meth:14:8 {{.*}} Dynamic-call Receiver-type=ObjCObjectPointer76// CHECK-NOT: 26:3 {{.*}} Dynamic-call77// CHECK-NOT: 29:3 {{.*}} Dynamic-call78// CHECK: 29:3 {{.*}} Receiver-type=ObjCInterface79// CHECK: 34:7 MemberRefExpr=meth:3:16 {{.*}} Dynamic-call Receiver-type=Pointer80// CHECK: 35:3 ObjCMessageExpr=meth:14:8 {{.*}} Dynamic-call Receiver-type=ObjCObjectPointer81// CHECK-NOT: 36:3 {{.*}} Dynamic-call82// CHECK: 36:3 {{.*}} Receiver-type=ObjCInterface83// CHECK: 37:3 ObjCMessageExpr=ClsMeth:15:8 {{.*}} Dynamic-call Receiver-type=ObjCClass84// CHECK-NOT: 49:10 {{.*}} Dynamic-call85// CHECK: 57:12 MemberRefExpr=someProp:53:23 {{.*}} Dynamic-call Receiver-type=ObjCObjectPointer86