[cfe-dev] 2 sur 2 libclang get AST tree of macro extension

Laurent Carlier via cfe-dev cfe-dev at lists.llvm.org
Mon Dec 7 05:13:56 PST 2015


Please if I'm not using the correct email list, could you indicate me which
one to use?

I'm currently busy with using libclang library.

My goal is to parse code that contains macro with parameters and to get the
type of the macro parameters in order to make syntax coloration.

If we consider the following piece of code

#define MACRO(X) X
typedef struct{
  int a;} aType;

aType data;
int var = MACRO(data.a);

My goal is to be able to color the field a of the structure aType on the
line int var = MACRO(data.a). I.e. I would like to get the line, column and
type whenever I'm getting a cursor over the field a of data variable.

The problem is that whenever I'm getting the cursor on the position of
character a, its type is CXCursor_MacroExpansion. I've already tried to get
the referenced cursor (via clang_getCursorReferenced) but then I'm getting
a cursor type CXCursor_MacroDefinition.

I've also already tried to visit the child via clang_visitChildren but this
returning the cursor itself as well, so it is not useful.

If I could get a cursor with type CXCursor_MemberRefExpr out of my cursor
with type CXCusor_MacroExtension I would have what I need.

Does anyone have an idea how to actually get the info of expanded code iso
getting CXCursor_MacroExpansion, whenever cursor is over a macro expansion?

Thanks a lot for your time and help.

Kind regards,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20151207/9d9a997e/attachment.html>

More information about the cfe-dev mailing list