1 // RUN: %clang_cc1 -Wno-unused -fblocks -ast-dump -ast-dump-filter Test %s | FileCheck -strict-whitespace %s 2 3 @protocol P 4 @end 5 6 @interface A 7 @end 8 9 @interface TestObjCIvarDecl : A 10 @end 11 12 @implementation TestObjCIvarDecl { 13 int varDefault; 14 @private int varPrivate; 15 @protected int varProtected; 16 @public int varPublic; 17 @package int varPackage; 18 } 19 @end 20 // CHECK: ObjCImplementationDecl{{.*}} TestObjCIvarDecl 21 // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCIvarDecl' 22 // CHECK-NEXT: ObjCIvarDecl{{.*}} varDefault 'int' private 23 // CHECK-NEXT: ObjCIvarDecl{{.*}} varPrivate 'int' private 24 // CHECK-NEXT: ObjCIvarDecl{{.*}} varProtected 'int' protected 25 // CHECK-NEXT: ObjCIvarDecl{{.*}} varPublic 'int' public 26 // CHECK-NEXT: ObjCIvarDecl{{.*}} varPackage 'int' package 27 28 @interface testObjCMethodDecl : A { 29 } 30 - (int) TestObjCMethodDecl: (int)i, ...; 31 // CHECK: ObjCMethodDecl{{.*}} - TestObjCMethodDecl: 'int' 32 // CHECK-NEXT: ParmVarDecl{{.*}} i 'int' 33 // CHECK-NEXT: ... 34 @end 35 36 @implementation testObjCMethodDecl 37 - (int) TestObjCMethodDecl: (int)i, ... { 38 return 0; 39 } 40 // CHECK: ObjCMethodDecl{{.*}} - TestObjCMethodDecl: 'int' 41 // CHECK-NEXT: ImplicitParamDecl{{.*}} self 42 // CHECK-NEXT: ImplicitParamDecl{{.*}} _cmd 43 // CHECK-NEXT: ParmVarDecl{{.*}} i 'int' 44 // CHECK-NEXT: ... 45 // CHECK-NEXT: CompoundStmt 46 @end 47 48 @protocol TestObjCProtocolDecl 49 - (void) foo; 50 @end 51 // CHECK: ObjCProtocolDecl{{.*}} TestObjCProtocolDecl 52 // CHECK-NEXT: ObjCMethodDecl{{.*}} foo 53 54 @interface TestObjCClass : A <P> 55 - (void) foo; 56 @end 57 // CHECK: ObjCInterfaceDecl{{.*}} TestObjCClass 58 // CHECK-NEXT: super ObjCInterface{{.*}} 'A' 59 // CHECK-NEXT: ObjCImplementation{{.*}} 'TestObjCClass' 60 // CHECK-NEXT: ObjCProtocol{{.*}} 'P' 61 // CHECK-NEXT: ObjCMethodDecl{{.*}} foo 62 63 @implementation TestObjCClass : A { 64 int i; 65 } 66 - (void) foo { 67 } 68 @end 69 // CHECK: ObjCImplementationDecl{{.*}} TestObjCClass 70 // CHECK-NEXT: super ObjCInterface{{.*}} 'A' 71 // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass' 72 // CHECK-NEXT: ObjCIvarDecl{{.*}} i 73 // CHECK-NEXT: ObjCMethodDecl{{.*}} foo 74 75 @interface TestObjCClass (TestObjCCategoryDecl) <P> 76 - (void) bar; 77 @end 78 // CHECK: ObjCCategoryDecl{{.*}} TestObjCCategoryDecl 79 // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass' 80 // CHECK-NEXT: ObjCCategoryImpl{{.*}} 'TestObjCClass' 81 // CHECK-NEXT: ObjCProtocol{{.*}} 'P' 82 // CHECK-NEXT: ObjCMethodDecl{{.*}} bar 83 84 @implementation TestObjCClass (TestObjCCategoryDecl) 85 - (void) bar { 86 } 87 @end 88 // CHECK: ObjCCategoryImplDecl{{.*}} TestObjCClass 89 // CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass' 90 // CHECK-NEXT: ObjCCategory{{.*}} 'TestObjCCategoryDecl' 91 // CHECK-NEXT: ObjCMethodDecl{{.*}} bar 92 93 @compatibility_alias TestObjCCompatibleAliasDecl A; 94 // CHECK: ObjCCompatibleAliasDecl{{.*}} TestObjCCompatibleAliasDecl 95 // CHECK-NEXT: ObjCInterface{{.*}} 'A' 96 97 @interface TestObjCProperty: A 98 @property(getter=getterFoo, setter=setterFoo:) int foo; 99 @property int bar; 100 @end 101 // CHECK: ObjCInterfaceDecl{{.*}} TestObjCProperty 102 // CHECK: ObjCPropertyDecl{{.*}} foo 'int' assign readwrite atomic unsafe_unretained 103 // CHECK-NEXT: getter ObjCMethod{{.*}} 'getterFoo' 104 // CHECK-NEXT: setter ObjCMethod{{.*}} 'setterFoo:' 105 // CHECK-NEXT: ObjCPropertyDecl{{.*}} bar 'int' assign readwrite atomic unsafe_unretained 106 // CHECK-NEXT: ObjCMethodDecl{{.*}} getterFoo 107 // CHECK-NEXT: ObjCMethodDecl{{.*}} setterFoo: 108 // CHECK-NEXT: ParmVarDecl{{.*}} foo 109 // CHECK-NEXT: ObjCMethodDecl{{.*}} bar 110 // CHECK-NEXT: ObjCMethodDecl{{.*}} setBar: 111 // CHECK-NEXT: ParmVarDecl{{.*}} bar 112 113 @implementation TestObjCProperty { 114 int i; 115 } 116 @synthesize foo=i; 117 @synthesize bar; 118 @end 119 // CHECK: ObjCImplementationDecl{{.*}} TestObjCProperty 120 // CHECK: ObjCPropertyImplDecl{{.*}} foo synthesize 121 // CHECK-NEXT: ObjCProperty{{.*}} 'foo' 122 // CHECK-NEXT: ObjCIvar{{.*}} 'i' 'int' 123 // CHECK-NEXT: ObjCIvarDecl{{.*}} bar 'int' synthesize private 124 // CHECK-NEXT: ObjCPropertyImplDecl{{.*}} bar synthesize 125 // CHECK-NEXT: ObjCProperty{{.*}} 'bar' 126 // CHECK-NEXT: ObjCIvar{{.*}} 'bar' 'int' 127 128 void TestBlockDecl(int x) { 129 ^(int y, ...){ x; }; 130 } 131 // CHECK: FunctionDecl{{.*}}TestBlockDecl 132 // CHECK: BlockDecl 133 // CHECK-NEXT: ParmVarDecl{{.*}} y 'int' 134 // CHECK-NEXT: ... 135 // CHECK-NEXT: capture ParmVar{{.*}} 'x' 'int' 136 // CHECK-NEXT: CompoundStmt 137