aboutsummaryrefslogtreecommitdiff
path: root/clang/test/ARCMT/objcmt-boxing.m
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-05-15 19:17:49 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-05-15 19:17:49 +0000
commit491e4aed31c044c9dd06012703701c2261a8d4c2 (patch)
tree0eaa77b7e4342a753fd3d9304b0e40b3e9903ede /clang/test/ARCMT/objcmt-boxing.m
parent8e6951d81b795866da1b91477b81ee4d4e41a1c1 (diff)
downloadllvm-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.m68
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];
+}