私はClangを使っていくつかのC++コードを解析しています。私が遭遇するすべてのFunctionDecl
の名前と難解な名前を印刷したいと思います。ClangでNamedDeclの名前を変更するにはどうすればよいですか?
私は私のRecursiveASTVisitor
にこれを追加することによって、比較的簡単に関数名を印刷することができます。
bool VisitFunctionDecl(FunctionDecl* f) {
auto declName = f->getNameInfo().getName();
auto functionName = declName.getAsString();
std::cout << functionName << std::endl;
return true;
}
どのようにしても、マングルされた名前を印刷することができますか?
私はセバスチャンのポインタを次後に生成の作業コード:
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;
};
また、細部の多くがあちこちあります。いくつかのコンストラクタとデストラクタのバリエーション、仮想メソッドのサンクス。 clang :: index :: CodegenNameGeneratorはここで参照として使用できます。 –