On Aug 28, 2013, at 2:09 PM, Douglas Gregor <[email protected]> wrote:
> > On Aug 28, 2013, at 1:49 PM, Fariborz Jahanian <[email protected]> wrote: > >> Author: fjahanian >> Date: Wed Aug 28 15:49:58 2013 >> New Revision: 189514 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=189514&view=rev >> Log: >> For methods where clang automatically infers instancetype from the selector >> (e.g., all -init* methods), no need to suggest "instancetype" because it >> is redundant. >> >> Modified: >> cfe/trunk/lib/ARCMigrate/ObjCMT.cpp >> cfe/trunk/test/ARCMT/objcmt-arc-cf-annotations.m.result >> cfe/trunk/test/ARCMT/objcmt-instancetype-2.m.result >> cfe/trunk/test/ARCMT/objcmt-instancetype.m.result >> >> Modified: cfe/trunk/lib/ARCMigrate/ObjCMT.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=189514&r1=189513&r2=189514&view=diff >> ============================================================================== >> --- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original) >> +++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Wed Aug 28 15:49:58 2013 >> @@ -668,15 +668,13 @@ void ObjCMigrateASTConsumer::migrateMeth >> case OIT_None: >> migrateFactoryMethod(Ctx, CDecl, OM); >> return; >> + // For methods where Clang automatically infers instancetype from the >> selector >> + // (e.g., all -init* methods), we should not suggest "instancetype" >> because it >> + // is redundant, >> case OIT_Array: >> - ClassName = "NSArray"; >> - break; >> case OIT_Dictionary: >> - ClassName = "NSDictionary"; >> - break; >> case OIT_MemManage: >> - ClassName = "NSObject"; >> - break; >> + return; >> case OIT_Singleton: >> migrateFactoryMethod(Ctx, CDecl, OM, OIT_Singleton); >> return; > > This is just checking a few special cases. What we want is to avoid adding > ‘instancetype’ when the method already has a related result type, which you > can check directly with ObjCMethodDecl::hasRelatedResultType(). > > For example, migrateFactoryMethod() should replace the “== > Ctx.getObjCInstanceType()” check with a call to hasRelatedResultType(). > > if (OM->isInstanceMethod() || > OM->getResultType() == Ctx.getObjCInstanceType() || > !OM->getResultType()->isObjCIdType()) > return; > > And migrateMethodInstanceType() should bail out early if it sees that the > method already has a related result type. > Early bail out is good. Thanks for pointing me to this API. In r189520. - Fariborz
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
