libclang获得宏扩展的AST树

时间:2015-11-27 17:20:04

标签: c macros libclang

我目前正忙着使用libclang库。

我的目标是解析包含带参数的宏的代码,并获取宏参数的类型以便进行语法着色。

如果我们考虑以下代码

#define MACRO(X) X

typedef struct
{
  int a;
} aType;

aType data;

int var = MACRO(data.a);

我的目标是能够在a行上为结构aType的字段int var = MACRO(data.a)着色。即每当我在a变量的data字段上获取光标时,我想获取行,列和类型。

问题在于,只要我将光标放在角色a的位置上,其类型就是CXCursor_MacroExpansion。我已经尝试获取引用的光标(通过clang_getCursorReferenced),但后来我得到了一个游标类型CXCursor_MacroDefinition

我也已经尝试通过clang_visitChildren访问孩子,但这也会返回光标本身,所以没用。

如果我可以使用CXCursor_MemberRefExpr类型从光标中获取类型为CXCusor_MacroExtension的游标,我会得到我需要的内容。

当光标超过宏扩展时,有没有人知道如何实际获取扩展代码iso获取CXCursor_MacroExpansion的信息?

非常感谢你的时间和帮助。

亲切的问候,

劳伦

0 个答案:

没有答案