Как узнать местонахождение имени переменной в 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
Базовый класс. Хотя кажется, что он идентифицирует только одно местоположение, его можно использовать для идентификации всего имени (однако я не пытался извлечь его отдельные концы, однако просто использовал его для обозначения переменной).