Как получить макрос и его расширение с помощью clang libtooling? - PullRequest
0 голосов
/ 30 октября 2019

Я работаю над Clang libtooling.

Пока мне удалось получить макрос, на который он ссылается в исходном файле через visitDeclRefExpr(DeclRefExpr *DR)

Но могу ли я получить список макросов с его именем и его расширением в виде строки.

exampleprogram.c

#define abc ab

#define sum 0

int main()
{
int ab;
abc  = abc + 0;
return 0;
}

Могу ли я получить вывод, подобный следующему

abc -- ab

sum -- 0

Как мне добиться этого вывода с помощью clang libtooling. Как я могу реализовать clang libtooling?

Пожалуйста, дайте мне знать, если решение для этой проблемы доступно.

1 Ответ

0 голосов
/ 01 ноября 2019

К сожалению, в AST Clang хранит минимальную информацию о макросах. SourceLocation содержит некоторую информацию о том, какие макросы были там развернуты. Вы можете найти больше информации о расположениях и расширениях макросов здесь .

Чтобы получить доступ к определениям и расширениям макросов (посещайте их, так сказать, при посещении узлов AST), вам нужноиспользовать препроцессор Clang. PPCalbacks - правильный инструмент для этого. Вы можете получить Preprocessor из CompilerInstance ( CompilerInstance :: getPreprocessor ) и подключить к нему ваши обратные вызовы.

Надеюсь, эта информация полезна. Счастливого взлома с Clang!

...