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

Reply via email to