diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-05-15 19:17:49 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-05-15 19:17:49 +0000 |
commit | 491e4aed31c044c9dd06012703701c2261a8d4c2 (patch) | |
tree | 0eaa77b7e4342a753fd3d9304b0e40b3e9903ede /clang/test/ARCMT/objcmt-boxing.m | |
parent | 8e6951d81b795866da1b91477b81ee4d4e41a1c1 (diff) | |
download | llvm-491e4aed31c044c9dd06012703701c2261a8d4c2.zip llvm-491e4aed31c044c9dd06012703701c2261a8d4c2.tar.gz llvm-491e4aed31c044c9dd06012703701c2261a8d4c2.tar.bz2 |
[objcmt] Rewrite [NSNumber numberWith*] messages to the new @() boxing syntax.
There are some caveats:
-If an implicit cast (e.g. int -> float for numberWithFloat:) was required, the message
will not get rewritten
-If the message was with numberWithInteger:/numberWithUnsignedInteger:, which are very
commonly used, be more liberal and allow the boxing syntax if the underlying type has
same signedness and will not lose precision.
Part of rdar://11438360
llvm-svn: 156844
Diffstat (limited to 'clang/test/ARCMT/objcmt-boxing.m')
-rw-r--r-- | clang/test/ARCMT/objcmt-boxing.m | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/clang/test/ARCMT/objcmt-boxing.m b/clang/test/ARCMT/objcmt-boxing.m new file mode 100644 index 0000000..faff5a9 --- /dev/null +++ b/clang/test/ARCMT/objcmt-boxing.m @@ -0,0 +1,68 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ +// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c++ %s.result + +#define YES __objc_yes +#define NO __objc_no + +typedef long NSInteger; +typedef unsigned long NSUInteger; +typedef signed char BOOL; +#define nil ((void*) 0) + +#define INT_MIN (-__INT_MAX__ -1) + +@interface NSObject ++ (id)alloc; +@end + +@interface NSNumber : NSObject +@end + +@interface NSNumber (NSNumberCreation) +- (id)initWithChar:(char)value; +- (id)initWithUnsignedChar:(unsigned char)value; +- (id)initWithShort:(short)value; +- (id)initWithUnsignedShort:(unsigned short)value; +- (id)initWithInt:(int)value; +- (id)initWithUnsignedInt:(unsigned int)value; +- (id)initWithLong:(long)value; +- (id)initWithUnsignedLong:(unsigned long)value; +- (id)initWithLongLong:(long long)value; +- (id)initWithUnsignedLongLong:(unsigned long long)value; +- (id)initWithFloat:(float)value; +- (id)initWithDouble:(double)value; +- (id)initWithBool:(BOOL)value; +- (id)initWithInteger:(NSInteger)value; +- (id)initWithUnsignedInteger:(NSUInteger)value; + ++ (NSNumber *)numberWithChar:(char)value; ++ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; ++ (NSNumber *)numberWithShort:(short)value; ++ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; ++ (NSNumber *)numberWithInt:(int)value; ++ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; ++ (NSNumber *)numberWithLong:(long)value; ++ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; ++ (NSNumber *)numberWithLongLong:(long long)value; ++ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; ++ (NSNumber *)numberWithFloat:(float)value; ++ (NSNumber *)numberWithDouble:(double)value; ++ (NSNumber *)numberWithBool:(BOOL)value; ++ (NSNumber *)numberWithInteger:(NSInteger)value; ++ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value; +@end + +enum MyEnm { + ME_foo +}; + +void foo() { + [NSNumber numberWithInt:INT_MIN]; + bool cppb; + [NSNumber numberWithBool:cppb]; + MyEnm myenum; + [NSNumber numberWithInteger:myenum]; + [NSNumber numberWithInteger:ME_foo]; +} |