J’utilise la bibliothèque Clang 3.0 pour une parsing du code C / C ++, et je dois obtenir l’emplacement de la déclaration de variable, j’ai essayé ce code:
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());
Mais locStart et locEnd pointe vers le début (et la fin) de la variable de déclaration (avec le type et, éventuellement, l’initialiseur). Par exemple:
const char * ptr = 0; ^ ^ ^ ^
locStart pointera vers le premier pointeur ( ^
) et locEnd pointera vers le dernier pointeur. Comment puis-je obtenir l’emplacement des deuxième et troisième pointeurs (seul nom, sans type ni initialiseur)?
Je ne suis actuellement pas en mesure de le tester, mais je pense que vous souhaitez extraire le SourceLocation
obtenu par getLocation()
de votre VarDecl
. Cette fonction est en réalité définie par la classe de base Decl
. Bien qu’il semble n’identifier qu’un seul emplacement, il semble être utilisable pour identifier le nom complet (je n’ai pas essayé d’extraire ses extrémités individuelles, mais je l’ai simplement utilisé pour indiquer la variable).