Как узнать местонахождение имени переменной в clang :: VarDecl - PullRequest
6 голосов
/ 29 января 2012

Я использую библиотеку clang 3.0 для некоторого анализа кода C / C ++, и мне нужно получить местоположение объявления переменной, я попробовал этот код:

clang::VarDecl * vd = ...;
clang::SourceManager & srcMgr = ...;

clang::SourceRange loc = vd->getSourceRange();
clang::PresumedLoc locStart = srcMgr.getPresumedLoc(loc.getBegin());
clang::PresumedLoc locEnd = srcMgr.getPresumedLoc(loc.getEnd());

Но locStart и locEnd указывает на начало (и конец) переменной объявления (с типом и, возможно, инициализатором). Например:

const char * ptr = 0;
^            ^ ^   ^

locStart будет указывать на первый указатель (^), а locEnd будет указывать на последний указатель. Как узнать расположение второго и третьего указателей (только имя, без типа и инициализатора)?

1 Ответ

5 голосов
/ 29 января 2012

Я сейчас не в состоянии проверить это, но я думаю, что вы хотите извлечь SourceLocation, полученный getLocation() из вашего VarDecl. Эта функция фактически определяется базовым классом Decl. Хотя кажется, что он идентифицирует только одно местоположение, его можно использовать для идентификации всего имени (однако я не пытался извлечь его отдельные концы, однако просто использовал его для указания переменной).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...