forked from OSchip/llvm-project
Dump out types for expressions, and handle typedefs nicely.
This allows us to dump: typedef short S; int test(S X, long long Y) { return X < ((100)); } as: typedef short S; int test(S X, long long Y) (CompoundStmt 0x2905d40 (ReturnStmt 0x2905d30 (BinaryOperator 0x2905d10 'int' '<' (ImplicitCastExpr 0x2905d00 'int' (DeclRefExpr 0x2905c80 'S':'short' Decl='X' 0x2905c20)) (ParenExpr 0x2905ce0 'int' (ParenExpr 0x2905cc0 'int' (IntegerLiteral 0x2905ca0 'int' 100)))))) llvm-svn: 40956
This commit is contained in:
parent
9d09c5ccda
commit
9bcd9156b9
|
@ -58,6 +58,15 @@ namespace {
|
|||
fprintf(F, " ");
|
||||
}
|
||||
|
||||
void DumpType(QualType T) const {
|
||||
fprintf(F, "'%s'", T.getAsString().c_str());
|
||||
|
||||
// If the type is directly a typedef, strip off typedefness to give at
|
||||
// least one level of concreteness.
|
||||
if (TypedefType *TDT = dyn_cast<TypedefType>(T))
|
||||
fprintf(F, ":'%s'", TDT->LookThroughTypedefs().getAsString().c_str());
|
||||
}
|
||||
|
||||
void DumpStmt(const Stmt *Node) const {
|
||||
Indent();
|
||||
fprintf(F, "(%s %p", Node->getStmtClassName(), (void*)Node);
|
||||
|
@ -65,7 +74,8 @@ namespace {
|
|||
|
||||
void DumpExpr(Expr *Node) const {
|
||||
DumpStmt(Node);
|
||||
// TODO: DUMP TYPE
|
||||
fprintf(F, " ");
|
||||
DumpType(Node->getType());
|
||||
}
|
||||
|
||||
virtual void VisitStmt(Stmt *Node);
|
||||
|
|
Loading…
Reference in New Issue