From 884375bafb4cf93ede134791758eb02a4e91455f Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Mon, 25 Aug 2014 20:22:25 +0000 Subject: [PATCH] Objective-C modernization. Convert -initWithUTF8String messaging 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 | 3 ++- lib/AST/NSAPI.cpp | 4 ++++ lib/Edit/RewriteObjCFoundationAPI.cpp | 3 ++- test/ARCMT/objcmt-boxing.m | 7 ++++++- test/ARCMT/objcmt-boxing.m.result | 7 ++++++- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/include/clang/AST/NSAPI.h b/include/clang/AST/NSAPI.h index c64338549f..56739354dc 100644 --- a/include/clang/AST/NSAPI.h +++ b/include/clang/AST/NSAPI.h @@ -42,7 +42,8 @@ public: NSStr_stringWithUTF8String, NSStr_stringWithCStringEncoding, NSStr_stringWithCString, - NSStr_initWithString + NSStr_initWithString, + NSStr_initWithUTF8String }; static const unsigned NumNSStringMethods = 5; diff --git a/lib/AST/NSAPI.cpp b/lib/AST/NSAPI.cpp index c6afc8e381..579a92cacc 100644 --- a/lib/AST/NSAPI.cpp +++ b/lib/AST/NSAPI.cpp @@ -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"), diff --git a/lib/Edit/RewriteObjCFoundationAPI.cpp b/lib/Edit/RewriteObjCFoundationAPI.cpp index 666844c65f..9f71168de8 100644 --- a/lib/Edit/RewriteObjCFoundationAPI.cpp +++ b/lib/Edit/RewriteObjCFoundationAPI.cpp @@ -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); diff --git a/test/ARCMT/objcmt-boxing.m b/test/ARCMT/objcmt-boxing.m index 2ad65a1399..c4b6f42b1b 100644 --- a/test/ARCMT/objcmt-boxing.m +++ b/test/ARCMT/objcmt-boxing.m @@ -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]; } diff --git a/test/ARCMT/objcmt-boxing.m.result b/test/ARCMT/objcmt-boxing.m.result index f1019892ff..59fdb88d51 100644 --- a/test/ARCMT/objcmt-boxing.m.result +++ b/test/ARCMT/objcmt-boxing.m.result @@ -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); } -- 2.40.0