[cfe-dev] Proposal for solving C string lifetime problem with clang_getDeclSpelling()/Selector::getAsString()

Fariborz Jahanian fjahanian at apple.com
Fri Nov 6 11:35:43 PST 2009


On Nov 6, 2009, at 11:26 AM, steve naroff wrote:

>
> On Nov 6, 2009, at 2:19 PM, Fariborz Jahanian wrote:
>
>>
>> On Nov 6, 2009, at 11:14 AM, steve naroff wrote:
>>
>>> Hi John,
>>>
>>> I just spoke with Doug about this and we came up with the following
>>> proposal...
>>>
>>> The following API would now return a CXString;
>>>
>>> CINDEX_LINKAGE CXString clang_getDeclSpelling(CXDecl);
>>>
>>> The interface to CXString would be:
>>>
>>> const char *clang_getCString(CXString);
>>> void clang_disposeString(CXString); /* client must always call this
>>> when it no longer needs the string */
>>>
>>> The implementation of CXString would be:
>>>
>>> /* Note that both of these slots are effectively 'private' */
>>> typedef struct {
>>> const char *Spelling;
>>> /* A 1 value indicates the clang_ indexing API needed to allocate
>>> the string (and it must be freed by clang_disposeString()). */
>>> int MustFreeString;
>> Is there need for API for getting/setting MustFreeString?
>>
>
> Nope...that's why I mentioned both slots are private (i.e. they are  
> only set internally...in this instance, by clang_getDeclSpelling()).

Actually you mentioning private brought up the question. You have  
clang_getCString for, I assume, accesing, Spelling?

- fariborz

>
>
> snaroff
>
>> - Fariborz
>>
>>>
>>> } CXString;
>>>
>>> The benefit of this abstraction is we can use it in other places if
>>> necessary (when dealing with string lifetime issues that cross the  
>>> C/C+
>>> + language barrier).
>>>
>>> What do you (or others interested in this) think? From my  
>>> perspective,
>>> it seems cleaner than the other proposals that have been discussed.
>>>
>>> If we can agree on the change, are you interested in making this  
>>> change?
>>>
>>> Thanks much,
>>>
>>> snaroff
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>
>




More information about the cfe-dev mailing list