[cfe-dev] RFC: missing libclang query functions / features

Douglas Gregor dgregor at apple.com
Tue Feb 15 21:20:28 PST 2011


On Feb 15, 2011, at 8:44 PM, Stefan Seefeld wrote:

> On 2011-02-15 16:14, Douglas Gregor wrote:
>> 
>>> * There doesn't appear to be any function to query a function's
>>> exception specifier.
>> Correct; we don't expose that information.
> 
> What would be the best way to add support for that ? Adding a new CXCursor_ExceptionSpec cursor, which has child cursors of of some appropriate reference kind ? Or a query function that gives the equivalent information explicitly ?
>>> * Would it be possible to report dependent types / expressions with a
>>> new cursor type, instead of the common "UnexposedExpr" ?
>> 
>> Dependent types and expressions can take many forms, including forms that already have "exposed" cursor kinds (e.g., a declaration reference expression can be type-dependent). If you need type- and value-dependence information, I suggest adding clang_isTypeDependent()/clang_isValueDependent() that operates on expression cursors.
> 
> OK, understood. I think what I was trying to ask is for CXType_Unexposed, not CXCursor_UnexposedDecl.
> That is:
> 
> template <typename T>
> struct foo
> {
>    T member;
> };
> 
> would report a FieldDecl cursor for 'member'. When calling clang_getCursorType() on that, I obtain a CXType_Unexposed, while I think something more indicative of this being a dependent type would be more useful. (If that is not possible, a new clang_isTypeDependent() function would certainly be helpful.)

Well, if you had a member such as

  T *member_ptr;

then that would represented as a pointer type that is also a dependent type.  Probably what you want for this is clang_isDependentType(CXType); that essentially maps down to Type::isDependentType().

	- Doug



More information about the cfe-dev mailing list