]> granicus.if.org Git - clang/commitdiff
Objective-C modernization. Convert -initWithUTF8String messaging
authorFariborz Jahanian <fjahanian@apple.com>
Mon, 25 Aug 2014 20:22:25 +0000 (20:22 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Mon, 25 Aug 2014 20:22:25 +0000 (20:22 +0000)
with auto-boxing syntax for literals. rdar://18080352

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216405 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/NSAPI.h
lib/AST/NSAPI.cpp
lib/Edit/RewriteObjCFoundationAPI.cpp
test/ARCMT/objcmt-boxing.m
test/ARCMT/objcmt-boxing.m.result

index c64338549f9a1a55eb41c322498582fde34c3d79..56739354dcdd46dd6fd0081533bfc9366ce8ad39 100644 (file)
@@ -42,7 +42,8 @@ public:
     NSStr_stringWithUTF8String,
     NSStr_stringWithCStringEncoding,
     NSStr_stringWithCString,
-    NSStr_initWithString
+    NSStr_initWithString,
+    NSStr_initWithUTF8String
   };
   static const unsigned NumNSStringMethods = 5;
 
index c6afc8e38195d4feec4f7c2fa9b9f518b76ebd60..579a92cacc90235ebef8de75730c8feaf479318b 100644 (file)
@@ -46,6 +46,10 @@ Selector NSAPI::getNSStringSelector(NSStringMethodKind MK) const {
       Sel = Ctx.Selectors.getUnarySelector(
                                        &Ctx.Idents.get("stringWithUTF8String"));
       break;
+    case NSStr_initWithUTF8String:
+      Sel = Ctx.Selectors.getUnarySelector(
+                                       &Ctx.Idents.get("initWithUTF8String"));
+      break;
     case NSStr_stringWithCStringEncoding: {
       IdentifierInfo *KeyIdents[] = {
         &Ctx.Idents.get("stringWithCString"),
index 666844c65ffcda1d86a2caab050573cc5b4712bf..9f71168de8fc401d4a00bdb70877361832c786e3 100644 (file)
@@ -1149,7 +1149,8 @@ static bool rewriteToStringBoxedExpression(const ObjCMessageExpr *Msg,
   Selector Sel = Msg->getSelector();
 
   if (Sel == NS.getNSStringSelector(NSAPI::NSStr_stringWithUTF8String) ||
-      Sel == NS.getNSStringSelector(NSAPI::NSStr_stringWithCString)) {
+      Sel == NS.getNSStringSelector(NSAPI::NSStr_stringWithCString) ||
+      Sel == NS.getNSStringSelector(NSAPI::NSStr_initWithUTF8String)) {
     if (Msg->getNumArgs() != 1)
       return false;
     return doRewriteToUTF8StringBoxedExpressionHelper(Msg, NS, commit);
index 2ad65a1399db6abe2c52b5720ac94fa08ea1070a..c4b6f42b1bd5a370b36a675120444d0193cd55ed 100644 (file)
@@ -1,5 +1,5 @@
 // RUN: rm -rf %t
-// RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify
+// RUN: %clang_cc1 -fobjc-arc -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify
 // 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
 
@@ -68,6 +68,7 @@ typedef NSUInteger NSStringEncoding;
 + (id)stringWithUTF8String:(const char *)nullTerminatedCString;
 + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;
 + (id)stringWithCString:(const char *)bytes;
+- (instancetype)initWithUTF8String:(const char *)nullTerminatedCString;
 @end
 
 enum MyEnm {
@@ -99,4 +100,8 @@ void boxString() {
 
   static const char strarr[] = "coolbox";
   s = [NSString stringWithUTF8String:strarr];
+  // rdar://18080352
+  const char *utf8Bytes = "blah";
+  NSString *string1 = [NSString stringWithUTF8String:utf8Bytes];
+  NSString *string2 = [[NSString alloc] initWithUTF8String:utf8Bytes];
 }
index f1019892ff3730edf1a767886a2b9217f3a8affd..59fdb88d51a386a5e32e478d011d14084f55afe7 100644 (file)
@@ -1,5 +1,5 @@
 // RUN: rm -rf %t
-// RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify
+// RUN: %clang_cc1 -fobjc-arc -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify
 // 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
 
@@ -68,6 +68,7 @@ typedef NSUInteger NSStringEncoding;
 + (id)stringWithUTF8String:(const char *)nullTerminatedCString;
 + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;
 + (id)stringWithCString:(const char *)bytes;
+- (instancetype)initWithUTF8String:(const char *)nullTerminatedCString;
 @end
 
 enum MyEnm {
@@ -99,4 +100,8 @@ void boxString() {
 
   static const char strarr[] = "coolbox";
   s = @(strarr);
+  // rdar://18080352
+  const char *utf8Bytes = "blah";
+  NSString *string1 = @(utf8Bytes);
+  NSString *string2 = @(utf8Bytes);
 }