[cfe-commits] r41801 - in /cfe/trunk: AST/Decl.cpp Parse/ParseObjc.cpp Sema/Sema.h Sema/SemaDecl.cpp include/clang/AST/Decl.h include/clang/Parse/Action.h include/clang/Parse/Parser.h

Chris Lattner clattner at apple.com
Mon Sep 10 21:02:39 PDT 2007

On Sep 10, 2007, at 4:02 PM, Steve Naroff wrote:

> On Sep 10, 2007, at 2:19 PM, Chris Lattner wrote:
>> On Sep 10, 2007, at 1:47 PM, Devang Patel wrote:
>>> On Sep 10, 2007, at 1:33 PM, Fariborz Jahanian wrote:
>>>> +  /// Insert collected methods declarations into the @interface
>>>> object.
>>>> +  Actions.ObjcAddMethodsToClass(interfaceDecl, &allMethods[0],
>>>> allMethods.size());
>>> ...
>>>> +void Sema::ObjcAddMethodsToClass(DeclTy *ClassDecl,
>>>> +				 DeclTy **allMethods, unsigned allNum) {
>>> Is there a reason to not pass SmallVector reference directly ?
>> Passing it like this allows the implementation in the client to not
>> use a smallvector: it could use a vector or a C array if it chose to.
> Isn't ownership the key API issue here?


> That is, even if we passed in the SmallVector, it is typically a  
> short-lived stack object. This means the Action hook would still  
> need extract all the elements from the SmallVector (which is what  
> passing the <DeclTy **, unsigned> tuple is doing.
> It seems like handing the SmallVector directly to the actions  
> method is more error prone (not simply an issue of choice).

This is true as well.  However, the action method *could* be declared  
as taking a const reference to a smallvector.  This would make it  
clear that the client owns the smallvector, not the actions  

However, this would artificially limit the interface, and wouldn't  
make it much more concrete.


More information about the cfe-commits mailing list