Clang libtooling:确定宏扩展位置
我有一个headerClang libtooling:确定宏扩展位置,clang,llvm,libtooling,Clang,Llvm,Libtooling,我有一个headerheader.h,其中宏定义扩展为类定义,源文件test.cpp包含header.h并使用此宏。然后我使用RecursiveASTVisitor访问所有cxrecorddecl 当我访问扩展宏的CXXRecordDecl(在test.cpp中)并查询其SourceLocation和dump()时,该位置指向header.h——宏定义的位置 对于这个CXXRecordDecl,我需要得到的是宏扩展的SourceLocation——在我的例子中,它应该是test.cpp 提前感谢
header.h
,其中宏定义扩展为类定义,源文件test.cpp
包含header.h
并使用此宏。然后我使用RecursiveASTVisitor
访问所有cxrecorddecl
当我访问扩展宏的CXXRecordDecl(在test.cpp中)并查询其SourceLocation
和dump()
时,该位置指向header.h
——宏定义的位置
对于这个CXXRecordDecl,我需要得到的是宏扩展的SourceLocation
——在我的例子中,它应该是test.cpp
提前感谢。找到了解决方案
所需的方法是SourceManager,如果loc
“是宏位置”,则该方法“返回扩展位置”
获取普通类定义和定义作为宏扩展的源位置的代码:
bool VisitCXXRecordDecl(CXXRecordDecl* record)
{
SourceLocation loc = record->getLocStart();
SourceLocation locExp = m_sourceManager.getFileLoc(loc);
// if record is a macro expansion in test.cpp, locExp points to test.cpp
// if record is not a macro expansion, locExp correctly points to matching source file
}