일부 C++ 코드를 구문 분석하기 위해 Clang을 사용하고 있습니다. 내가 만나는 모든 FunctionDecl
에 대해 이름과 맹 글링 된 이름을 인쇄하고 싶습니다.Clang에서 NamedDecl의 이름을 변경하는 방법은 무엇입니까?
bool VisitFunctionDecl(FunctionDecl* f) {
auto declName = f->getNameInfo().getName();
auto functionName = declName.getAsString();
std::cout << functionName << std::endl;
return true;
}
가 어떻게 또한 변환 된 이름을 인쇄 할 수 있습니다
내 RecursiveASTVisitor
이를 추가하여 비교적 쉽게 함수 이름을 인쇄 할 수 있습니까?
작동 코드는 내가 세바스찬의 포인터를 다음 후 생산 : 그것은 ABI에 의존하기 때문에
이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는 여기서 참조로 사용될 수 있습니다. –