зеркало из https://github.com/microsoft/clang-1.git
CallGraph:
- add IfStmt visitor. - print information only when a function has callee. Otherwise its ASTContext map is NULL. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76156 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
6d9828c82c
Коммит
24ff030f40
|
@ -43,6 +43,8 @@ public:
|
|||
CalledFunctions.push_back(std::make_pair(L, Node));
|
||||
}
|
||||
|
||||
bool hasCallee() const { return begin() != end(); }
|
||||
|
||||
const char *getName(ASTContext &Ctx) { return F->getName(Ctx); }
|
||||
};
|
||||
|
||||
|
|
|
@ -37,6 +37,10 @@ public:
|
|||
VisitChildren(S);
|
||||
}
|
||||
|
||||
void VisitIfStmt(IfStmt *S) {
|
||||
VisitChildren(S);
|
||||
}
|
||||
|
||||
void VisitCallExpr(CallExpr *CE);
|
||||
|
||||
void VisitChildren(Stmt *S) {
|
||||
|
@ -106,13 +110,15 @@ CallGraphNode *CallGraph::getOrInsertFunction(Entity *F) {
|
|||
|
||||
void CallGraph::print(llvm::raw_ostream &os) {
|
||||
for (iterator I = begin(), E = end(); I != E; ++I) {
|
||||
ASTContext &Ctx = *CallerCtx[I->second];
|
||||
os << "function: " << I->first->getName(Ctx) << " calls:\n";
|
||||
for (CallGraphNode::iterator CI = I->second->begin(), CE = I->second->end();
|
||||
CI != CE; ++CI) {
|
||||
os << " " << CI->second->getName(Ctx);
|
||||
if (I->second->hasCallee()) {
|
||||
ASTContext &Ctx = *CallerCtx[I->second];
|
||||
os << "function: " << I->first->getName(Ctx) << " calls:\n";
|
||||
for (CallGraphNode::iterator CI = I->second->begin(),
|
||||
CE = I->second->end(); CI != CE; ++CI) {
|
||||
os << " " << CI->second->getName(Ctx);
|
||||
}
|
||||
os << '\n';
|
||||
}
|
||||
os << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче