[cfe-commits] r60993 - in /cfe/trunk: include/clang/AST/DeclObjC.h lib/AST/DeclObjC.cpp lib/Sema/SemaDecl.cpp lib/Sema/SemaDeclObjC.cpp

Douglas Gregor dgregor at apple.com
Mon Dec 15 10:02:19 PST 2008


On Dec 15, 2008, at 9:59 AM, Fariborz Jahanian wrote:

>
> On Dec 15, 2008, at 8:43 AM, Douglas Gregor wrote:
>
>> On Dec 13, 2008, at 12:28 PM, Fariborz Jahanian wrote:
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> --- cfe/trunk/lib/AST/DeclObjC.cpp (original)
>>> +++ cfe/trunk/lib/AST/DeclObjC.cpp Sat Dec 13 14:28:25 2008
>>> @@ -338,6 +338,17 @@
>>> return 0;
>>> }
>>>
>>> +void ObjCInterfaceDecl::CollectObjCIvars(std::vector<FieldDecl*>  
>>> &Fields) {
>>> +  ObjCInterfaceDecl *SuperClass = getSuperClass();
>>> +  if (SuperClass)
>>> +    SuperClass->CollectObjCIvars(Fields);
>>> +  for (ObjCInterfaceDecl::ivar_iterator I = ivar_begin(),
>>> +       E = ivar_end(); I != E; ++I) {
>>> +    ObjCIvarDecl *IVDecl = (*I);
>>> +    Fields.push_back(cast<FieldDecl>(IVDecl));
>>> +  }
>>> +}
>>> +
>>
>> There's a nearly identical routine called CollectIvars in lib/Sema/ 
>> SemaDecl.cpp, except that it creates ObjCAtDefsFieldDecls rather  
>> than collecting FieldDecls. Is CollectObjCIvars meant to do the  
>> same thing? And, is it part of semantic analysis (handling @defs)  
>> such that it should live in Sema, or is it a core operation on  
>> Objective-C AST's (and therefore should live in the AST)?
>
> It is part of the ASTs and is needed by the clients (code gen) in  
> this  case. I am collecting FieldDecl.  CollectIvars is also  
> collecting the fields
> for $defs AST but of a different node kind. These two can probably  
> be consolidated into one. I will add a FIXME for consideration.

Thanks.

>
>>
>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
>>> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Sat Dec 13 14:28:25 2008
>>> @@ -3075,8 +3075,10 @@
>>>     Consumer.HandleTagDeclDefinition(Record);
>>> } else {
>>>   ObjCIvarDecl **ClsFields = reinterpret_cast<ObjCIvarDecl**> 
>>> (&RecFields[0]);
>>> -    if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl> 
>>> (EnclosingDecl))
>>> +    if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl> 
>>> (EnclosingDecl)) {
>>>     ID->addInstanceVariablesToClass(ClsFields, RecFields.size(),  
>>> RBrac);
>>> +      ID->addLayoutToClass(Context);
>>> +    }
>>>   else if (ObjCImplementationDecl *IMPDecl =
>>>              dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
>>>     assert(IMPDecl && "ActOnFields - missing  
>>> ObjCImplementationDecl");
>>
>> Will we need to have the RecordDecl layout for most or all  
>> Objective-C interfaces? If most programs only need the layout for a  
>> small number of interfaces, it might be beneficial to compute the  
>> layouts lazily (as we do with the layout of RecordDecls).
> Lay out is needed when a field is referenced. I will look at this  
> later when I am done with code gen.

Okay!

	- Doug



More information about the cfe-commits mailing list