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:
Chris Lattner 2007-08-09 00:36:22 +00:00
parent 9d09c5ccda
commit 9bcd9156b9
1 changed files with 11 additions and 1 deletions

View File

@ -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);