[cfe-dev] Selector::getAsString problem in CIndex
Fariborz Jahanian
fjahanian at apple.com
Tue Oct 20 13:25:40 PDT 2009
On Oct 20, 2009, at 12:43 PM, steve naroff wrote:
> Hi John,
>
> The patch didn't apply for me (it's based on yesterday's source).
> Could you update it?
>
> On the string lifetime issue...after consulting with Daniel, we'd
> prefer to avoid cluttering up the API to deal with lazily computed
> names (that aren't part of the AST per se).
>
> One spin on your change...
>
> +// For temporary string returns.
> +static char CIBuffer[256];
> +
>
> ...is to have a static llvm::StringSet that contains copies of the
> strings. For example:
>
> static llvm::StringSet<> LazilyComputedShortLivedNames;
>
> While this is more general than your change (no limit, can hold an
> arbitrary # of strings), it is static data (which is less than great).
>
> It would be nice if this data were cached per-Index. Unfortunately,
> this would require either (a) more bookkeeping or (b) more explicit
> 'CXIndex' arguments be passed around.
>
> So...it seem like the choices are:
>
> (a) static StringSet<> to keep the API simple (i.e. no requirement
> on the client to size/deal with strings).
> (b) per-index StringSet<> to keep the string API simple. Modify the
> API to pass CXIndex in more places.
> (c) per-index StringSet<> to keep the string API simple. Add
> bookkeeping to navigate from a CXDecl->CXTranslationUnit->CXIndex.
> (d) Avoid passing back C strings entirely (what I previously said
> we'd like to avoid). Complicates the API, but makes the contract
> very explicit.
> (e) Go with your change (documenting the limitations).
>
> At the moment, this is primarily a problem with ObjC names (i.e.
> Selectors), however this will be an issues for C++ as well I believe
> (for names that contain type info).
>
If the names, such as selectors, are globally unique, it makes sense
to go with a). Unless, per-index naming is needed for functionality
reasons.
- Fariborz
More information about the cfe-dev
mailing list