Clang AST: Как проанализировать спецификаторы вложенных пространств имен? - PullRequest
0 голосов
/ 03 мая 2020
namespace na {
  namespace nb {
    namespace nc {
      int val;
    }
  }
}

na::nb::nc::val = 42;

Есть ли способ извлечь все вложенные спецификаторы пространства имен, которые предшествуют val отдельно (na, nb и nc)?


bool VisitDeclRefExpr(clang::DeclRefExpr *DeclRef) {
  if (DeclRef->hasQualifier()) {
    clang::SourceLocation BeginLoc = DeclRef->getQualifierLoc().getBeginLoc(),
                          EndLoc = DeclRef->getQualifierLoc().getEndLoc();
    const char *begin = SourceManager.getCharacterData(BeginLoc),
               *end = SourceManager.getCharacterData(EndLoc);
    llvm::outs() << std::string(begin, end - begin) << "\n";
  }
  return true;
}

Код предоставляет na::nb::nc в качестве выходных данных, которые могут быть легко разделены :: разделителем.


Я надеюсь выяснить, как решить эту проблему, используя только Clang и LLVM API. На что стоит обратить внимание и искать? Спасибо.

...