diff options
Diffstat (limited to 'test/Misc/ast-dump-decl.m')
-rw-r--r-- | test/Misc/ast-dump-decl.m | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/test/Misc/ast-dump-decl.m b/test/Misc/ast-dump-decl.m new file mode 100644 index 0000000..f8a5e5a --- /dev/null +++ b/test/Misc/ast-dump-decl.m @@ -0,0 +1,136 @@ +// RUN: %clang_cc1 -Wno-unused -fblocks -ast-dump -ast-dump-filter Test %s | FileCheck -strict-whitespace %s + +@protocol P +@end + +@interface A +@end + +@interface TestObjCIvarDecl : A +@end + +@implementation TestObjCIvarDecl { + int varDefault; + @private int varPrivate; + @protected int varProtected; + @public int varPublic; + @package int varPackage; +} +@end +// CHECK: ObjCImplementationDecl{{.*}} TestObjCIvarDecl +// CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCIvarDecl' +// CHECK-NEXT: ObjCIvarDecl{{.*}} varDefault 'int' private +// CHECK-NEXT: ObjCIvarDecl{{.*}} varPrivate 'int' private +// CHECK-NEXT: ObjCIvarDecl{{.*}} varProtected 'int' protected +// CHECK-NEXT: ObjCIvarDecl{{.*}} varPublic 'int' public +// CHECK-NEXT: ObjCIvarDecl{{.*}} varPackage 'int' package + +@interface testObjCMethodDecl : A { +} +- (int) TestObjCMethodDecl: (int)i, ...; +// CHECK: ObjCMethodDecl{{.*}} - TestObjCMethodDecl: 'int' +// CHECK-NEXT: ParmVarDecl{{.*}} i 'int' +// CHECK-NEXT: ... +@end + +@implementation testObjCMethodDecl +- (int) TestObjCMethodDecl: (int)i, ... { + return 0; +} +// CHECK: ObjCMethodDecl{{.*}} - TestObjCMethodDecl: 'int' +// CHECK-NEXT: ImplicitParamDecl{{.*}} self +// CHECK-NEXT: ImplicitParamDecl{{.*}} _cmd +// CHECK-NEXT: ParmVarDecl{{.*}} i 'int' +// CHECK-NEXT: ... +// CHECK-NEXT: CompoundStmt +@end + +@protocol TestObjCProtocolDecl +- (void) foo; +@end +// CHECK: ObjCProtocolDecl{{.*}} TestObjCProtocolDecl +// CHECK-NEXT: ObjCMethodDecl{{.*}} foo + +@interface TestObjCClass : A <P> +- (void) foo; +@end +// CHECK: ObjCInterfaceDecl{{.*}} TestObjCClass +// CHECK-NEXT: super ObjCInterface{{.*}} 'A' +// CHECK-NEXT: ObjCImplementation{{.*}} 'TestObjCClass' +// CHECK-NEXT: ObjCProtocol{{.*}} 'P' +// CHECK-NEXT: ObjCMethodDecl{{.*}} foo + +@implementation TestObjCClass : A { + int i; +} +- (void) foo { +} +@end +// CHECK: ObjCImplementationDecl{{.*}} TestObjCClass +// CHECK-NEXT: super ObjCInterface{{.*}} 'A' +// CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass' +// CHECK-NEXT: ObjCIvarDecl{{.*}} i +// CHECK-NEXT: ObjCMethodDecl{{.*}} foo + +@interface TestObjCClass (TestObjCCategoryDecl) <P> +- (void) bar; +@end +// CHECK: ObjCCategoryDecl{{.*}} TestObjCCategoryDecl +// CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass' +// CHECK-NEXT: ObjCCategoryImpl{{.*}} 'TestObjCClass' +// CHECK-NEXT: ObjCProtocol{{.*}} 'P' +// CHECK-NEXT: ObjCMethodDecl{{.*}} bar + +@implementation TestObjCClass (TestObjCCategoryDecl) +- (void) bar { +} +@end +// CHECK: ObjCCategoryImplDecl{{.*}} TestObjCClass +// CHECK-NEXT: ObjCInterface{{.*}} 'TestObjCClass' +// CHECK-NEXT: ObjCCategory{{.*}} 'TestObjCCategoryDecl' +// CHECK-NEXT: ObjCMethodDecl{{.*}} bar + +@compatibility_alias TestObjCCompatibleAliasDecl A; +// CHECK: ObjCCompatibleAliasDecl{{.*}} TestObjCCompatibleAliasDecl +// CHECK-NEXT: ObjCInterface{{.*}} 'A' + +@interface TestObjCProperty: A +@property(getter=getterFoo, setter=setterFoo:) int foo; +@property int bar; +@end +// CHECK: ObjCInterfaceDecl{{.*}} TestObjCProperty +// CHECK: ObjCPropertyDecl{{.*}} foo 'int' assign readwrite atomic unsafe_unretained +// CHECK-NEXT: getter ObjCMethod{{.*}} 'getterFoo' +// CHECK-NEXT: setter ObjCMethod{{.*}} 'setterFoo:' +// CHECK-NEXT: ObjCPropertyDecl{{.*}} bar 'int' assign readwrite atomic unsafe_unretained +// CHECK-NEXT: ObjCMethodDecl{{.*}} getterFoo +// CHECK-NEXT: ObjCMethodDecl{{.*}} setterFoo: +// CHECK-NEXT: ParmVarDecl{{.*}} foo +// CHECK-NEXT: ObjCMethodDecl{{.*}} bar +// CHECK-NEXT: ObjCMethodDecl{{.*}} setBar: +// CHECK-NEXT: ParmVarDecl{{.*}} bar + +@implementation TestObjCProperty { + int i; +} +@synthesize foo=i; +@synthesize bar; +@end +// CHECK: ObjCImplementationDecl{{.*}} TestObjCProperty +// CHECK: ObjCPropertyImplDecl{{.*}} foo synthesize +// CHECK-NEXT: ObjCProperty{{.*}} 'foo' +// CHECK-NEXT: ObjCIvar{{.*}} 'i' 'int' +// CHECK-NEXT: ObjCIvarDecl{{.*}} bar 'int' synthesize private +// CHECK-NEXT: ObjCPropertyImplDecl{{.*}} bar synthesize +// CHECK-NEXT: ObjCProperty{{.*}} 'bar' +// CHECK-NEXT: ObjCIvar{{.*}} 'bar' 'int' + +void TestBlockDecl(int x) { + ^(int y, ...){ x; }; +} +// CHECK: FunctionDecl{{.*}}TestBlockDecl +// CHECK: BlockDecl +// CHECK-NEXT: ParmVarDecl{{.*}} y 'int' +// CHECK-NEXT: ... +// CHECK-NEXT: capture ParmVar{{.*}} 'x' 'int' +// CHECK-NEXT: CompoundStmt |