diff options
Diffstat (limited to 'clang/test/CodeGenObjC/dot-syntax-1.m')
-rw-r--r-- | clang/test/CodeGenObjC/dot-syntax-1.m | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/dot-syntax-1.m b/clang/test/CodeGenObjC/dot-syntax-1.m new file mode 100644 index 0000000..417bcb4 --- /dev/null +++ b/clang/test/CodeGenObjC/dot-syntax-1.m @@ -0,0 +1,264 @@ +// RUN: %clang_cc1 -emit-llvm -o %t %s + +int printf(const char *, ...); + +@interface Root +-(id) alloc; +-(id) init; +@end + +// Property above methods... + +@interface Top0 : Root +@property(getter=_getX,setter=_setX:) int x; +@end + +@interface Bot0 : Top0 +-(int) x; +-(void) setX: (int) arg; +@end + +@implementation Top0 +-(int) _getX { + printf("-[ Top0 _getX ]\n"); + return 0; +} +-(void) _setX: (int) arg { + printf("-[ Top0 _setX: %d ]\n", arg); +} +@end + +@implementation Bot0 +-(int) x { + printf("-[ Bot0 _getX ]\n"); + return 0; +} +-(void) setX: (int) arg { + printf("-[ Bot0 _setX: %d ]\n", arg); +} +@end + +// Methods above property... + +@interface Top1 : Root +-(int) x; +-(void) setX: (int) arg; +@end + +@interface Bot1 : Top1 +@property(getter=_getX,setter=_setX:) int x; +@end + +@implementation Top1 +-(int) x { + printf("-[ Top1 x ]\n"); + return 0; +} +-(void) setX: (int) arg { + printf("-[ Top1 setX: %d ]\n", arg); +} +@end + +@implementation Bot1 +-(int) _getX { + printf("-[ Bot1 _getX ]\n"); + return 0; +} +-(void) _setX: (int) arg { + printf("-[ Bot1 _setX: %d ]\n", arg); +} +@end + +// Mixed setter & getter (variant 1) + +@interface Top2 : Root +-(int) x; +-(void) _setX: (int) arg; +@end + +@interface Bot2 : Top2 +@property(getter=_getX,setter=_setX:) int x; +@end + +@implementation Top2 +-(int) x { + printf("-[ Top2 x ]\n"); + return 0; +} +-(void) _setX: (int) arg { + printf("-[ Top2 _setX: %d ]\n", arg); +} +@end + +@implementation Bot2 +-(int) _getX { + printf("-[ Bot2 _getX ]\n"); + return 0; +} +-(void) setX: (int) arg { + printf("-[ Bot2 setX: %d ]\n", arg); +} +@end + +// Mixed setter & getter (variant 2) + +@interface Top3 : Root +-(int) _getX; +-(void) setX: (int) arg; +@end + +@interface Bot3 : Top3 +@property(getter=_getX,setter=_setX:) int x; +@end + +@implementation Top3 +-(int) _getX { + printf("-[ Top3 _getX ]\n"); + return 0; +} +-(void) setX: (int) arg { + printf("-[ Top3 setX: %d ]\n", arg); +} +@end + +@implementation Bot3 +-(int) x { + printf("-[ Bot3 x ]\n"); + return 0; +} +-(void) _setX: (int) arg { + printf("-[ Bot3 _setX: %d ]\n", arg); +} +@end + +// Mixed setter & getter (variant 3) + +@interface Top4 : Root +@property(getter=_getX,setter=_setX:) int x; +@end + +@interface Bot4 : Top4 +-(int) _getX; +-(void) setX: (int) arg; +@end + +@implementation Top4 +-(int) x { + printf("-[ Top4 x ]\n"); + return 0; +} +-(void) _setX: (int) arg { + printf("-[ Top4 _setX: %d ]\n", arg); +} +@end + +@implementation Bot4 +-(int) _getX { + printf("-[ Bot4 _getX ]\n"); + return 0; +} +-(void) setX: (int) arg { + printf("-[ Bot4 setX: %d ]\n", arg); +} +@end + +// Mixed setter & getter (variant 4) + +@interface Top5 : Root +@property(getter=_getX,setter=_setX:) int x; +@end + +@interface Bot5 : Top5 +-(int) x; +-(void) _setX: (int) arg; +@end + +@implementation Top5 +-(int) _getX { + printf("-[ Top5 _getX ]\n"); + return 0; +} +-(void) setX: (int) arg { + printf("-[ Top5 setX: %d ]\n", arg); +} +@end + +@implementation Bot5 +-(int) x { + printf("-[ Bot5 x ]\n"); + return 0; +} +-(void) _setX: (int) arg { + printf("-[ Bot5 _setX: %d ]\n", arg); +} +@end + +// Mixed level calls (variant 1) + +@interface Top6 : Root +-(int) x; +@end + +@interface Bot6 : Top6 +-(void) setX: (int) arg; +@end + +@implementation Top6 +-(int) x { + printf("-[ Top6 x ]\n"); + return 0; +} +@end + +@implementation Bot6 +-(void) setX: (int) arg { + printf("-[ Bot5 setX: %d ]\n", arg); +} +@end + +// Mixed level calls (variant 1) + +@interface Top7 : Root +-(void) setX: (int) arg; +@end + +@interface Bot7 : Top7 +-(int) x; +@end + +@implementation Top7 +-(void) setX: (int) arg { + printf("-[ Top7 setX: %d ]\n", arg); +} +@end + +@implementation Bot7 +-(int) x { + printf("-[ Bot7 x ]\n"); + return 0; +} +@end + +// + +// FIXME: Two more (thats it?) interesting cases. Method access on +// getter w/o setter and method access on setter w/o getter. + +int main() { +#define test(N) { \ + Bot##N *ob = [[Bot##N alloc] init]; \ + int x = ob.x; \ + ob.x = 10; } + + test(0); + test(1); + test(2); + test(3); + test(4); + test(5); + // test(6); + // test(7); + + return 0; +} + |