Clang libtooling: определить расположение макроса
У меня есть заголовок header.h
с макроопределением, которое расширяется до определения класса и исходного файла test.cpp
который включает в себя header.h
и использует этот макрос. Тогда я использую RecursiveASTVisitor
посетить всех CXXRecordDecl
"S.
Когда я посещаю CXXRecordDecl, который является расширением макроса (в test.cpp) и запрашиваю его SourceLocation
а также dump()
это, местоположение указывает на header.h
- расположение макроопределения.
Что мне нужно получить для этого CXXRecordDecl является SourceLocation
расширения макроса - в моем случае это должно быть test.cpp
,
Заранее спасибо.
1 ответ
Нашел решение.
Обязательным методом является метод getFileLoc(SourceLocation loc) SourceManager, который "возвращает местоположение расширения", если loc
msgstr "это макро расположение".
Мой код, чтобы получить исходное местоположение для нормальных определений классов и определений в виде расширений макросов:
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
}