2
我使用Clang來解析一些C++代碼。我想打印我遇到的每個FunctionDecl
的名稱和重名。如何在Clang中獲得NamedDecl的名稱?
bool VisitFunctionDecl(FunctionDecl* f) {
auto declName = f->getNameInfo().getName();
auto functionName = declName.getAsString();
std::cout << functionName << std::endl;
return true;
}
我怎樣才能同時打印錯位的名字:
我可以通過添加這個我RecursiveASTVisitor
相當輕鬆打印功能的名稱?
工作代碼,我下面塞巴斯蒂安的指針後產生:
const auto getMangledName = [&](FunctionDecl* decl) {
auto mangleContext = context.createMangleContext();
if (!mangleContext->shouldMangleDeclName(decl)) {
return decl->getNameInfo().getName().getAsString();
}
std::string mangledName;
llvm::raw_string_ostream ostream(mangledName);
mangleContext->mangleName(decl, ostream);
ostream.flush();
delete mangleContext;
return mangledName;
};
還有,這裏有很多的小細節:幾個構造函數和析構函數的變體,虛擬方法的thunk。 clang :: index :: CodegenNameGenerator可能在這裏用作參考。 –