From: Fariborz Jahanian Date: Wed, 24 Jul 2013 19:18:37 +0000 (+0000) Subject: Objective-C migrator: some cleanup. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=65f1a4c931bc17e51c751a5e9c6a71a9e52d5b8c;p=clang Objective-C migrator: some cleanup. Expose static type of init/alloc/retain with instance type as well. Ad-hoc cases are coming next. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187068 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ARCMigrate/ObjCMT.cpp b/lib/ARCMigrate/ObjCMT.cpp index bd6e97c781..2b2f9224e9 100644 --- a/lib/ARCMigrate/ObjCMT.cpp +++ b/lib/ARCMigrate/ObjCMT.cpp @@ -556,11 +556,16 @@ void ObjCMigrateASTConsumer::migrateMethodInstanceType(ASTContext &Ctx, Selector::getInstTypeMethodFamily(OM->getSelector()); if (OIT_Family == OIT_None) return; - // TODO. Many more to come + std::string ClassName; switch (OIT_Family) { case OIT_Array: + ClassName = "NSArray"; break; case OIT_Dictionary: + ClassName = "NSDictionary"; + break; + case OIT_MemManage: + ClassName = "NSObject"; break; default: return; @@ -575,14 +580,8 @@ void ObjCMigrateASTConsumer::migrateMethodInstanceType(ASTContext &Ctx, else if (ObjCImplDecl *ImpDecl = dyn_cast(CDecl)) IDecl = ImpDecl->getClassInterface(); } - if (!IDecl) - return; - - if (OIT_Family == OIT_Array && - !IDecl->lookupInheritedClass(&Ctx.Idents.get("NSArray"))) - return; - else if (OIT_Family == OIT_Dictionary && - !IDecl->lookupInheritedClass(&Ctx.Idents.get("NSDictionary"))) + if (!IDecl || + !IDecl->lookupInheritedClass(&Ctx.Idents.get(ClassName))) return; SourceRange R; diff --git a/lib/Basic/IdentifierTable.cpp b/lib/Basic/IdentifierTable.cpp index fa021f0501..96d9e56b6c 100644 --- a/lib/Basic/IdentifierTable.cpp +++ b/lib/Basic/IdentifierTable.cpp @@ -471,6 +471,9 @@ ObjCInstanceTypeFamily Selector::getInstTypeMethodFamily(Selector sel) { case 'i': if (startsWithWord(name, "init")) return OIT_MemManage; break; + case 'r': + if (startsWithWord(name, "retain")) return OIT_MemManage; + break; case 's': if (startsWithWord(name, "string")) return OIT_NSString; else diff --git a/test/ARCMT/objcmt-instancetype.m.result b/test/ARCMT/objcmt-instancetype.m.result index af06e67e2a..7bc554faed 100644 --- a/test/ARCMT/objcmt-instancetype.m.result +++ b/test/ARCMT/objcmt-instancetype.m.result @@ -7,12 +7,12 @@ typedef signed char BOOL; #define nil ((void*) 0) @interface NSObject -+ (id)alloc; ++ (instancetype)alloc; @end @interface NSString : NSObject + (id)stringWithString:(NSString *)string; -- (id)initWithString:(NSString *)aString; +- (instancetype)initWithString:(NSString *)aString; @end @interface NSArray : NSObject @@ -27,9 +27,9 @@ typedef signed char BOOL; + (instancetype)arrayWithObjects:(id)firstObj, ...; + (instancetype) arrayWithArray:(NSArray *)array; -- (id)initWithObjects:(const id [])objects count:(unsigned long)cnt; -- (id)initWithObjects:(id)firstObj, ...; -- (id)initWithArray:(NSArray *)array; +- (instancetype)initWithObjects:(const id [])objects count:(unsigned long)cnt; +- (instancetype)initWithObjects:(id)firstObj, ...; +- (instancetype)initWithArray:(NSArray *)array; - (id)objectAtIndex:(unsigned long)index; @end @@ -51,10 +51,10 @@ typedef signed char BOOL; + (instancetype)dictionaryWithDictionary:(NSDictionary *)dict; + (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; -- (id)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; -- (id)initWithObjectsAndKeys:(id)firstObject, ...; -- (id)initWithDictionary:(NSDictionary *)otherDictionary; -- (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; +- (instancetype)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; +- (instancetype)initWithObjectsAndKeys:(id)firstObject, ...; +- (instancetype)initWithDictionary:(NSDictionary *)otherDictionary; +- (instancetype)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; - (id)objectForKey:(id)aKey; @end