Как узнать местонахождение имени переменной в clang::VarDecl

Я использую библиотеку 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 ответ

Решение

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

Другие вопросы по тегам