StmtDumper.cpp revision 0c727a35718556866a978f64ac549d9798735f08
16000dace22f110d8768476989313e9d981d690d0Chris Lattner//===--- StmtDumper.cpp - Dumping implementation for Stmt ASTs ------------===// 26000dace22f110d8768476989313e9d981d690d0Chris Lattner// 36000dace22f110d8768476989313e9d981d690d0Chris Lattner// The LLVM Compiler Infrastructure 46000dace22f110d8768476989313e9d981d690d0Chris Lattner// 56000dace22f110d8768476989313e9d981d690d0Chris Lattner// This file was developed by Chris Lattner and is distributed under 66000dace22f110d8768476989313e9d981d690d0Chris Lattner// the University of Illinois Open Source License. See LICENSE.TXT for details. 76000dace22f110d8768476989313e9d981d690d0Chris Lattner// 86000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 96000dace22f110d8768476989313e9d981d690d0Chris Lattner// 106000dace22f110d8768476989313e9d981d690d0Chris Lattner// This file implements the Stmt::dump/Stmt::print methods, which dump out the 116000dace22f110d8768476989313e9d981d690d0Chris Lattner// AST in a form that exposes type details and other fields. 126000dace22f110d8768476989313e9d981d690d0Chris Lattner// 136000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 146000dace22f110d8768476989313e9d981d690d0Chris Lattner 156000dace22f110d8768476989313e9d981d690d0Chris Lattner#include "clang/AST/StmtVisitor.h" 166000dace22f110d8768476989313e9d981d690d0Chris Lattner#include "clang/AST/Decl.h" 176000dace22f110d8768476989313e9d981d690d0Chris Lattner#include "clang/AST/ExprCXX.h" 186000dace22f110d8768476989313e9d981d690d0Chris Lattner#include "clang/Lex/IdentifierTable.h" 196000dace22f110d8768476989313e9d981d690d0Chris Lattner#include "llvm/Support/Compiler.h" 206000dace22f110d8768476989313e9d981d690d0Chris Lattner#include <cstdio> 216000dace22f110d8768476989313e9d981d690d0Chris Lattnerusing namespace clang; 226000dace22f110d8768476989313e9d981d690d0Chris Lattner 236000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 246000dace22f110d8768476989313e9d981d690d0Chris Lattner// StmtDumper Visitor 256000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 266000dace22f110d8768476989313e9d981d690d0Chris Lattner 276000dace22f110d8768476989313e9d981d690d0Chris Lattnernamespace { 28c5598cbc4c3f2fb515af7f142f78ff630bdb5c01Chris Lattner class VISIBILITY_HIDDEN StmtDumper : public StmtVisitor<StmtDumper> { 290c727a35718556866a978f64ac549d9798735f08Chris Lattner const SourceManager *SM; 306000dace22f110d8768476989313e9d981d690d0Chris Lattner FILE *F; 316000dace22f110d8768476989313e9d981d690d0Chris Lattner unsigned IndentLevel; 326000dace22f110d8768476989313e9d981d690d0Chris Lattner 336000dace22f110d8768476989313e9d981d690d0Chris Lattner /// MaxDepth - When doing a normal dump (not dumpAll) we only want to dump 346000dace22f110d8768476989313e9d981d690d0Chris Lattner /// the first few levels of an AST. This keeps track of how many ast levels 356000dace22f110d8768476989313e9d981d690d0Chris Lattner /// are left. 366000dace22f110d8768476989313e9d981d690d0Chris Lattner unsigned MaxDepth; 376000dace22f110d8768476989313e9d981d690d0Chris Lattner public: 380c727a35718556866a978f64ac549d9798735f08Chris Lattner StmtDumper(const SourceManager *sm, FILE *f, unsigned maxDepth) 390c727a35718556866a978f64ac549d9798735f08Chris Lattner : SM(sm), F(f), IndentLevel(0), MaxDepth(maxDepth) {} 406000dace22f110d8768476989313e9d981d690d0Chris Lattner 41f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner void DumpSubTree(Stmt *S) { 426000dace22f110d8768476989313e9d981d690d0Chris Lattner // Prune the recursion if not using dump all. 436000dace22f110d8768476989313e9d981d690d0Chris Lattner if (MaxDepth == 0) return; 446000dace22f110d8768476989313e9d981d690d0Chris Lattner 45f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner ++IndentLevel; 466000dace22f110d8768476989313e9d981d690d0Chris Lattner if (S) { 47c5598cbc4c3f2fb515af7f142f78ff630bdb5c01Chris Lattner Visit(S); 486000dace22f110d8768476989313e9d981d690d0Chris Lattner } else { 496000dace22f110d8768476989313e9d981d690d0Chris Lattner Indent(); 504a70adba92ff0e26af87360557ee2e9a6ff529d3Chris Lattner fprintf(F, "<<<NULL>>>"); 516000dace22f110d8768476989313e9d981d690d0Chris Lattner } 52f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner --IndentLevel; 536000dace22f110d8768476989313e9d981d690d0Chris Lattner } 546000dace22f110d8768476989313e9d981d690d0Chris Lattner 55f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner void DumpDeclarator(Decl *D); 566000dace22f110d8768476989313e9d981d690d0Chris Lattner 576000dace22f110d8768476989313e9d981d690d0Chris Lattner void Indent() const { 586000dace22f110d8768476989313e9d981d690d0Chris Lattner for (int i = 0, e = IndentLevel; i < e; ++i) 596000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " "); 606000dace22f110d8768476989313e9d981d690d0Chris Lattner } 616000dace22f110d8768476989313e9d981d690d0Chris Lattner 62fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner void DumpType(QualType T) const { 63fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner fprintf(F, "'%s'", T.getAsString().c_str()); 64fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner 65fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner // If the type is directly a typedef, strip off typedefness to give at 66fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner // least one level of concreteness. 67fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner if (TypedefType *TDT = dyn_cast<TypedefType>(T)) 68fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner fprintf(F, ":'%s'", TDT->LookThroughTypedefs().getAsString().c_str()); 69fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner } 70fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner 716000dace22f110d8768476989313e9d981d690d0Chris Lattner void DumpStmt(const Stmt *Node) const { 726000dace22f110d8768476989313e9d981d690d0Chris Lattner Indent(); 736000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "(%s %p", Node->getStmtClassName(), (void*)Node); 746000dace22f110d8768476989313e9d981d690d0Chris Lattner } 756000dace22f110d8768476989313e9d981d690d0Chris Lattner 766000dace22f110d8768476989313e9d981d690d0Chris Lattner void DumpExpr(Expr *Node) const { 776000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 78fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner fprintf(F, " "); 79fd8f7da224ef188f799256a6bc37c463ba0071edChris Lattner DumpType(Node->getType()); 806000dace22f110d8768476989313e9d981d690d0Chris Lattner } 816000dace22f110d8768476989313e9d981d690d0Chris Lattner 82c5598cbc4c3f2fb515af7f142f78ff630bdb5c01Chris Lattner void VisitStmt(Stmt *Node); 836000dace22f110d8768476989313e9d981d690d0Chris Lattner#define STMT(N, CLASS, PARENT) \ 84c5598cbc4c3f2fb515af7f142f78ff630bdb5c01Chris Lattner void Visit##CLASS(CLASS *Node); 856000dace22f110d8768476989313e9d981d690d0Chris Lattner#include "clang/AST/StmtNodes.def" 866000dace22f110d8768476989313e9d981d690d0Chris Lattner }; 876000dace22f110d8768476989313e9d981d690d0Chris Lattner} 886000dace22f110d8768476989313e9d981d690d0Chris Lattner 896000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 906000dace22f110d8768476989313e9d981d690d0Chris Lattner// Stmt printing methods. 916000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 926000dace22f110d8768476989313e9d981d690d0Chris Lattner 936000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitStmt(Stmt *Node) { 946000dace22f110d8768476989313e9d981d690d0Chris Lattner Indent(); 956000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "<<unknown stmt type>>\n"); 966000dace22f110d8768476989313e9d981d690d0Chris Lattner} 976000dace22f110d8768476989313e9d981d690d0Chris Lattner 98f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattnervoid StmtDumper::DumpDeclarator(Decl *D) { 996000dace22f110d8768476989313e9d981d690d0Chris Lattner // FIXME: Need to complete/beautify this... this code simply shows the 1006000dace22f110d8768476989313e9d981d690d0Chris Lattner // nodes are where they need to be. 1016000dace22f110d8768476989313e9d981d690d0Chris Lattner if (TypedefDecl *localType = dyn_cast<TypedefDecl>(D)) { 102f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, "\"typedef %s %s\"", 103f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner localType->getUnderlyingType().getAsString().c_str(), 104f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner localType->getName()); 1056000dace22f110d8768476989313e9d981d690d0Chris Lattner } else if (ValueDecl *VD = dyn_cast<ValueDecl>(D)) { 106f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, "\""); 1076000dace22f110d8768476989313e9d981d690d0Chris Lattner // Emit storage class for vardecls. 1086000dace22f110d8768476989313e9d981d690d0Chris Lattner if (VarDecl *V = dyn_cast<VarDecl>(VD)) { 1096000dace22f110d8768476989313e9d981d690d0Chris Lattner switch (V->getStorageClass()) { 110f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner default: assert(0 && "Unknown storage class!"); 111f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner case VarDecl::None: break; 112f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner case VarDecl::Extern: fprintf(F, "extern "); break; 113f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner case VarDecl::Static: fprintf(F, "static "); break; 114f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner case VarDecl::Auto: fprintf(F, "auto "); break; 115f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner case VarDecl::Register: fprintf(F, "register "); break; 1166000dace22f110d8768476989313e9d981d690d0Chris Lattner } 1176000dace22f110d8768476989313e9d981d690d0Chris Lattner } 1186000dace22f110d8768476989313e9d981d690d0Chris Lattner 1196000dace22f110d8768476989313e9d981d690d0Chris Lattner std::string Name = VD->getName(); 1206000dace22f110d8768476989313e9d981d690d0Chris Lattner VD->getType().getAsStringInternal(Name); 121f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, "%s", Name.c_str()); 1226000dace22f110d8768476989313e9d981d690d0Chris Lattner 1236000dace22f110d8768476989313e9d981d690d0Chris Lattner // If this is a vardecl with an initializer, emit it. 1246000dace22f110d8768476989313e9d981d690d0Chris Lattner if (VarDecl *V = dyn_cast<VarDecl>(VD)) { 1256000dace22f110d8768476989313e9d981d690d0Chris Lattner if (V->getInit()) { 126f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, " =\n"); 127f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner DumpSubTree(V->getInit()); 1286000dace22f110d8768476989313e9d981d690d0Chris Lattner } 1296000dace22f110d8768476989313e9d981d690d0Chris Lattner } 130f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, "\""); 1316000dace22f110d8768476989313e9d981d690d0Chris Lattner } else { 1326000dace22f110d8768476989313e9d981d690d0Chris Lattner // FIXME: "struct x;" 1336000dace22f110d8768476989313e9d981d690d0Chris Lattner assert(0 && "Unexpected decl"); 1346000dace22f110d8768476989313e9d981d690d0Chris Lattner } 1356000dace22f110d8768476989313e9d981d690d0Chris Lattner} 1366000dace22f110d8768476989313e9d981d690d0Chris Lattner 1376000dace22f110d8768476989313e9d981d690d0Chris Lattner 1386000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitNullStmt(NullStmt *Node) { 1396000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 1406000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 1416000dace22f110d8768476989313e9d981d690d0Chris Lattner} 1426000dace22f110d8768476989313e9d981d690d0Chris Lattner 1436000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitDeclStmt(DeclStmt *Node) { 1446000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 145f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, "\n"); 1466000dace22f110d8768476989313e9d981d690d0Chris Lattner for (Decl *D = Node->getDecl(); D; D = D->getNextDeclarator()) { 147f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner ++IndentLevel; 1486000dace22f110d8768476989313e9d981d690d0Chris Lattner Indent(); 149f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, "%p ", (void*)D); 150f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner DumpDeclarator(D); 151f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner if (D->getNextDeclarator()) 152f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, "\n"); 153f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner --IndentLevel; 1546000dace22f110d8768476989313e9d981d690d0Chris Lattner } 155f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner 156f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner fprintf(F, ")"); 1576000dace22f110d8768476989313e9d981d690d0Chris Lattner} 1586000dace22f110d8768476989313e9d981d690d0Chris Lattner 1596000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitCompoundStmt(CompoundStmt *Node) { 1606000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 1616000dace22f110d8768476989313e9d981d690d0Chris Lattner if (!Node->body_empty()) fprintf(F, "\n"); 1626000dace22f110d8768476989313e9d981d690d0Chris Lattner 1636000dace22f110d8768476989313e9d981d690d0Chris Lattner for (CompoundStmt::body_iterator I = Node->body_begin(), E = Node->body_end(); 1646000dace22f110d8768476989313e9d981d690d0Chris Lattner I != E; ) { 1656000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(*I); 1666000dace22f110d8768476989313e9d981d690d0Chris Lattner ++I; 1676000dace22f110d8768476989313e9d981d690d0Chris Lattner if (I != E) 1686000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 1696000dace22f110d8768476989313e9d981d690d0Chris Lattner } 1706000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 1716000dace22f110d8768476989313e9d981d690d0Chris Lattner} 1726000dace22f110d8768476989313e9d981d690d0Chris Lattner 1736000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitCaseStmt(CaseStmt *Node) { 174a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner DumpStmt(Node); 175a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner fprintf(F, "\n"); 176a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner DumpSubTree(Node->getLHS()); 177a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner fprintf(F, "\n"); 178a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner DumpSubTree(Node->getRHS()); 179a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner fprintf(F, "\n"); 180a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner DumpSubTree(Node->getSubStmt()); 181a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner fprintf(F, ")"); 1826000dace22f110d8768476989313e9d981d690d0Chris Lattner} 1836000dace22f110d8768476989313e9d981d690d0Chris Lattner 1846000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitDefaultStmt(DefaultStmt *Node) { 1856000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 1866000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 1876000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getSubStmt()); 1886000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 1896000dace22f110d8768476989313e9d981d690d0Chris Lattner} 1906000dace22f110d8768476989313e9d981d690d0Chris Lattner 1916000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitLabelStmt(LabelStmt *Node) { 1926000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 1936000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " '%s'\n", Node->getName()); 1946000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getSubStmt()); 1956000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 1966000dace22f110d8768476989313e9d981d690d0Chris Lattner} 1976000dace22f110d8768476989313e9d981d690d0Chris Lattner 1986000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitIfStmt(IfStmt *Node) { 1996000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2006000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2016000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getCond()); 2026000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2036000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getThen()); 2046000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2056000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getElse()); 2066000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2076000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2086000dace22f110d8768476989313e9d981d690d0Chris Lattner 2096000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitSwitchStmt(SwitchStmt *Node) { 2106000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2116000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2126000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getCond()); 2136000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2146000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getBody()); 2156000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2166000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2176000dace22f110d8768476989313e9d981d690d0Chris Lattner 2186000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitSwitchCase(SwitchCase*) { 2196000dace22f110d8768476989313e9d981d690d0Chris Lattner assert(0 && "SwitchCase is an abstract class"); 2206000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2216000dace22f110d8768476989313e9d981d690d0Chris Lattner 2226000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitWhileStmt(WhileStmt *Node) { 2236000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2246000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2256000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getCond()); 2266000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2276000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getBody()); 2286000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2296000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2306000dace22f110d8768476989313e9d981d690d0Chris Lattner 2316000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitDoStmt(DoStmt *Node) { 2326000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2336000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2346000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getBody()); 2356000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2366000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getCond()); 2376000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2386000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2396000dace22f110d8768476989313e9d981d690d0Chris Lattner 2406000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitForStmt(ForStmt *Node) { 2416000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2426000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2436000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getInit()); 2446000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2456000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getCond()); 2466000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2476000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getInc()); 2486000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2496000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getBody()); 2506000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2516000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2526000dace22f110d8768476989313e9d981d690d0Chris Lattner 2536000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitGotoStmt(GotoStmt *Node) { 2546000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2556000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " '%s':%p)", Node->getLabel()->getName(), (void*)Node->getLabel()); 2566000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2576000dace22f110d8768476989313e9d981d690d0Chris Lattner 2586000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitIndirectGotoStmt(IndirectGotoStmt *Node) { 2596000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2606000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2616000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getTarget()); 2626000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2636000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2646000dace22f110d8768476989313e9d981d690d0Chris Lattner 2656000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitContinueStmt(ContinueStmt *Node) { 2666000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2676000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2686000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2696000dace22f110d8768476989313e9d981d690d0Chris Lattner 2706000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitBreakStmt(BreakStmt *Node) { 2716000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2726000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2736000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2746000dace22f110d8768476989313e9d981d690d0Chris Lattner 2756000dace22f110d8768476989313e9d981d690d0Chris Lattner 2766000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitReturnStmt(ReturnStmt *Node) { 2776000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpStmt(Node); 2786000dace22f110d8768476989313e9d981d690d0Chris Lattner if (Expr *RV = Node->getRetValue()) { 2796000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 2806000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(RV); 2816000dace22f110d8768476989313e9d981d690d0Chris Lattner } 2826000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 2836000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2846000dace22f110d8768476989313e9d981d690d0Chris Lattner 2856000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 2866000dace22f110d8768476989313e9d981d690d0Chris Lattner// Expr printing methods. 2876000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 2886000dace22f110d8768476989313e9d981d690d0Chris Lattner 2896000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitExpr(Expr *Node) { 2906000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 2916000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ": UNKNOWN EXPR to StmtDumper)"); 2926000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2936000dace22f110d8768476989313e9d981d690d0Chris Lattner 2946000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitDeclRefExpr(DeclRefExpr *Node) { 2956000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 2966000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " Decl='%s' %p)", Node->getDecl()->getName(), 2976000dace22f110d8768476989313e9d981d690d0Chris Lattner (void*)Node->getDecl()); 2986000dace22f110d8768476989313e9d981d690d0Chris Lattner} 2996000dace22f110d8768476989313e9d981d690d0Chris Lattner 3006000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitPreDefinedExpr(PreDefinedExpr *Node) { 3016000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 3026000dace22f110d8768476989313e9d981d690d0Chris Lattner switch (Node->getIdentType()) { 3036000dace22f110d8768476989313e9d981d690d0Chris Lattner default: 3046000dace22f110d8768476989313e9d981d690d0Chris Lattner assert(0 && "unknown case"); 3056000dace22f110d8768476989313e9d981d690d0Chris Lattner case PreDefinedExpr::Func: 3066000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " __func__)"); 3076000dace22f110d8768476989313e9d981d690d0Chris Lattner break; 3086000dace22f110d8768476989313e9d981d690d0Chris Lattner case PreDefinedExpr::Function: 3096000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " __FUNCTION__)"); 3106000dace22f110d8768476989313e9d981d690d0Chris Lattner break; 3116000dace22f110d8768476989313e9d981d690d0Chris Lattner case PreDefinedExpr::PrettyFunction: 3126000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " __PRETTY_FUNCTION__)"); 3136000dace22f110d8768476989313e9d981d690d0Chris Lattner break; 3146000dace22f110d8768476989313e9d981d690d0Chris Lattner } 3156000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3166000dace22f110d8768476989313e9d981d690d0Chris Lattner 3176000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitCharacterLiteral(CharacterLiteral *Node) { 318a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner DumpExpr(Node); 319a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner fprintf(F, " %d)", Node->getValue()); 3206000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3216000dace22f110d8768476989313e9d981d690d0Chris Lattner 3226000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitIntegerLiteral(IntegerLiteral *Node) { 3236000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 3246000dace22f110d8768476989313e9d981d690d0Chris Lattner 3256000dace22f110d8768476989313e9d981d690d0Chris Lattner bool isSigned = Node->getType()->isSignedIntegerType(); 3266000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " %s)", Node->getValue().toString(10, isSigned).c_str()); 3276000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3286000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitFloatingLiteral(FloatingLiteral *Node) { 3296000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 3306000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, " %f)", Node->getValue()); 3316000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3325d66145eed1c319df5a69977cb8ff74f597ea544Chris Lattner 3335d66145eed1c319df5a69977cb8ff74f597ea544Chris Lattnervoid StmtDumper::VisitImaginaryLiteral(ImaginaryLiteral *Node) { 3345d66145eed1c319df5a69977cb8ff74f597ea544Chris Lattner DumpExpr(Node); 3355d66145eed1c319df5a69977cb8ff74f597ea544Chris Lattner fprintf(F, "\n"); 3365d66145eed1c319df5a69977cb8ff74f597ea544Chris Lattner DumpSubTree(Node->getSubExpr()); 3375d66145eed1c319df5a69977cb8ff74f597ea544Chris Lattner fprintf(F, ")"); 3385d66145eed1c319df5a69977cb8ff74f597ea544Chris Lattner} 3395d66145eed1c319df5a69977cb8ff74f597ea544Chris Lattner 3406000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitStringLiteral(StringLiteral *Str) { 341a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner DumpExpr(Str); 342a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner // FIXME: this doesn't print wstrings right. 3435fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner fprintf(F, " %s\"", Str->isWide() ? "L" : ""); 344a0df31ac1f09a3cf2f08c5c3a134376640dc7893Chris Lattner 3456000dace22f110d8768476989313e9d981d690d0Chris Lattner for (unsigned i = 0, e = Str->getByteLength(); i != e; ++i) { 3465fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner switch (char C = Str->getStrData()[i]) { 3475fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner default: 3485fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner if (isprint(C)) 3495fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner fputc(C, F); 3505fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner else 3515fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner fprintf(F, "\\%03o", C); 3525fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner break; 3536000dace22f110d8768476989313e9d981d690d0Chris Lattner // Handle some common ones to make dumps prettier. 3545fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner case '\\': fprintf(F, "\\\\"); break; 3555fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner case '"': fprintf(F, "\\\""); break; 3565fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner case '\n': fprintf(F, "\\n"); break; 3575fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner case '\t': fprintf(F, "\\t"); break; 3585fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner case '\a': fprintf(F, "\\a"); break; 3595fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner case '\b': fprintf(F, "\\b"); break; 3606000dace22f110d8768476989313e9d981d690d0Chris Lattner } 3616000dace22f110d8768476989313e9d981d690d0Chris Lattner } 3625fc6107edd1727bd8e1a57e77087d3a01ca76ae6Chris Lattner fprintf(F, "\")"); 3636000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3646000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitParenExpr(ParenExpr *Node) { 3656000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 3666000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 3676000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getSubExpr()); 3686000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 3696000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3706000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitUnaryOperator(UnaryOperator *Node) { 37113cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 37213cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " %s '%s'\n", Node->isPostfix() ? "postfix" : "prefix", 37313cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner UnaryOperator::getOpcodeStr(Node->getOpcode())); 37413cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getSubExpr()); 37513cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 3766000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3776000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitSizeOfAlignOfTypeExpr(SizeOfAlignOfTypeExpr *Node) { 37813cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 37913cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " %s ", Node->isSizeOf() ? "sizeof" : "alignof"); 38013cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpType(Node->getArgumentType()); 38113cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 3826000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3836000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitArraySubscriptExpr(ArraySubscriptExpr *Node) { 3846000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 3856000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 3862324512285caac0332bbbc6e4cab6245d2a370a1Ted Kremenek DumpSubTree(Node->getLHS()); 3876000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 3882324512285caac0332bbbc6e4cab6245d2a370a1Ted Kremenek DumpSubTree(Node->getRHS()); 3896000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 3906000dace22f110d8768476989313e9d981d690d0Chris Lattner} 3916000dace22f110d8768476989313e9d981d690d0Chris Lattner 3926000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitCallExpr(CallExpr *Node) { 3936000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 3946000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 3956000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getCallee()); 3966000dace22f110d8768476989313e9d981d690d0Chris Lattner 3976000dace22f110d8768476989313e9d981d690d0Chris Lattner for (unsigned i = 0, e = Node->getNumArgs(); i != e; ++i) { 3986000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 3996000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getArg(i)); 4006000dace22f110d8768476989313e9d981d690d0Chris Lattner } 4016000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 4026000dace22f110d8768476989313e9d981d690d0Chris Lattner} 40313cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner 4046000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitMemberExpr(MemberExpr *Node) { 40513cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 40613cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " %s%s %p\n", Node->isArrow() ? "->" : ".", 40713cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner Node->getMemberDecl()->getName(), (void*)Node->getMemberDecl()); 40813cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getBase()); 40913cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 4106000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4116000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitOCUVectorElementExpr(OCUVectorElementExpr *Node) { 41213cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 41313cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " %s\n", Node->getAccessor().getName()); 41413cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getBase()); 41513cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 4166000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4176000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitCastExpr(CastExpr *Node) { 41813cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 41913cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, "\n"); 42013cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getSubExpr()); 42113cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 4226000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4236000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitCompoundLiteralExpr(CompoundLiteralExpr *Node) { 42413cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 42513cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, "\n"); 42613cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getInitializer()); 42713cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 4286000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4296000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitImplicitCastExpr(ImplicitCastExpr *Node) { 4306000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 4316000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 4326000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getSubExpr()); 4336000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 4346000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4356000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitBinaryOperator(BinaryOperator *Node) { 4366000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 437eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner fprintf(F, " '%s'\n", BinaryOperator::getOpcodeStr(Node->getOpcode())); 438eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner DumpSubTree(Node->getLHS()); 439eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner fprintf(F, "\n"); 440eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner DumpSubTree(Node->getRHS()); 441eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner fprintf(F, ")"); 442eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner} 443eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattnervoid StmtDumper::VisitCompoundAssignOperator(CompoundAssignOperator *Node) { 444eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner DumpExpr(Node); 445eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner fprintf(F, " '%s' ComputeTy=", 446eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner BinaryOperator::getOpcodeStr(Node->getOpcode())); 447eb14fe839ec24c2ca14e5f094be147a34e3d3339Chris Lattner DumpType(Node->getComputationType()); 448dfce2a51a78455c915722bc05f07c41e600220c9Chris Lattner fprintf(F, "\n"); 4496000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getLHS()); 4506000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 4516000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getRHS()); 4526000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 4536000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4546000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitConditionalOperator(ConditionalOperator *Node) { 4556000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpExpr(Node); 4566000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 4576000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getCond()); 4586000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 4596000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getLHS()); 4606000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, "\n"); 4616000dace22f110d8768476989313e9d981d690d0Chris Lattner DumpSubTree(Node->getRHS()); 4626000dace22f110d8768476989313e9d981d690d0Chris Lattner fprintf(F, ")"); 4636000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4646000dace22f110d8768476989313e9d981d690d0Chris Lattner 4656000dace22f110d8768476989313e9d981d690d0Chris Lattner// GNU extensions. 4666000dace22f110d8768476989313e9d981d690d0Chris Lattner 4676000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitAddrLabelExpr(AddrLabelExpr *Node) { 46813cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 46913cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " %s %p)", Node->getLabel()->getName(), (void*)Node->getLabel()); 4706000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4716000dace22f110d8768476989313e9d981d690d0Chris Lattner 47213cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattnervoid StmtDumper::VisitStmtExpr(StmtExpr *Node) { 47313cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 47413cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, "\n"); 47513cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getSubStmt()); 47613cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 4776000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4786000dace22f110d8768476989313e9d981d690d0Chris Lattner 4796000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitTypesCompatibleExpr(TypesCompatibleExpr *Node) { 48013cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 48113cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " "); 48213cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpType(Node->getArgType1()); 48313cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " "); 48413cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpType(Node->getArgType2()); 48513cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 4866000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4876000dace22f110d8768476989313e9d981d690d0Chris Lattner 4886000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitChooseExpr(ChooseExpr *Node) { 48913cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 49013cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, "\n"); 49113cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getCond()); 49213cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, "\n"); 49313cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getLHS()); 49413cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, "\n"); 49513cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getRHS()); 49613cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 4976000dace22f110d8768476989313e9d981d690d0Chris Lattner} 4986000dace22f110d8768476989313e9d981d690d0Chris Lattner 499f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner//===----------------------------------------------------------------------===// 500f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner// C++ Expressions 501f9e0581818f5daf7d6f467a72aeba266c086d61dChris Lattner//===----------------------------------------------------------------------===// 5026000dace22f110d8768476989313e9d981d690d0Chris Lattner 5036000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitCXXCastExpr(CXXCastExpr *Node) { 50413cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 50513cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " %s\n", CXXCastExpr::getOpcodeStr(Node->getOpcode())); 50613cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpSubTree(Node->getSubExpr()); 50713cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, ")"); 5086000dace22f110d8768476989313e9d981d690d0Chris Lattner} 5096000dace22f110d8768476989313e9d981d690d0Chris Lattner 5106000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid StmtDumper::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *Node) { 51113cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner DumpExpr(Node); 51213cb21f55d80052d99ef8d54d44939b8e98f8de5Chris Lattner fprintf(F, " %s)", Node->getValue() ? "true" : "false"); 5136000dace22f110d8768476989313e9d981d690d0Chris Lattner} 5146000dace22f110d8768476989313e9d981d690d0Chris Lattner 5155508518a2702b00be3b15a26d772bde968972f54Anders Carlsson//===----------------------------------------------------------------------===// 5165508518a2702b00be3b15a26d772bde968972f54Anders Carlsson// Obj-C Expressions 5175508518a2702b00be3b15a26d772bde968972f54Anders Carlsson//===----------------------------------------------------------------------===// 5185508518a2702b00be3b15a26d772bde968972f54Anders Carlsson 5195508518a2702b00be3b15a26d772bde968972f54Anders Carlssonvoid StmtDumper::VisitObjCStringLiteral(ObjCStringLiteral *Node) { 5205508518a2702b00be3b15a26d772bde968972f54Anders Carlsson DumpExpr(Node); 5215508518a2702b00be3b15a26d772bde968972f54Anders Carlsson fprintf(F, "\n"); 5225508518a2702b00be3b15a26d772bde968972f54Anders Carlsson DumpSubTree(Node->getString()); 5235508518a2702b00be3b15a26d772bde968972f54Anders Carlsson fprintf(F, ")"); 5245508518a2702b00be3b15a26d772bde968972f54Anders Carlsson} 5256000dace22f110d8768476989313e9d981d690d0Chris Lattner 526f9bcf01f82dfd2688f81e57bcc6300c9b13c51a6Anders Carlssonvoid StmtDumper::VisitObjCEncodeExpr(ObjCEncodeExpr *Node) { 527f9bcf01f82dfd2688f81e57bcc6300c9b13c51a6Anders Carlsson DumpExpr(Node); 528f9bcf01f82dfd2688f81e57bcc6300c9b13c51a6Anders Carlsson 529f9bcf01f82dfd2688f81e57bcc6300c9b13c51a6Anders Carlsson fprintf(F, " "); 530f9bcf01f82dfd2688f81e57bcc6300c9b13c51a6Anders Carlsson DumpType(Node->getEncodedType()); 531f9bcf01f82dfd2688f81e57bcc6300c9b13c51a6Anders Carlsson fprintf(F, ")"); 532f9bcf01f82dfd2688f81e57bcc6300c9b13c51a6Anders Carlsson} 533f9bcf01f82dfd2688f81e57bcc6300c9b13c51a6Anders Carlsson 5346000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 5356000dace22f110d8768476989313e9d981d690d0Chris Lattner// Stmt method implementations 5366000dace22f110d8768476989313e9d981d690d0Chris Lattner//===----------------------------------------------------------------------===// 5376000dace22f110d8768476989313e9d981d690d0Chris Lattner 5386000dace22f110d8768476989313e9d981d690d0Chris Lattner/// dump - This does a local dump of the specified AST fragment. It dumps the 5396000dace22f110d8768476989313e9d981d690d0Chris Lattner/// specified node and a few nodes underneath it, but not the whole subtree. 5406000dace22f110d8768476989313e9d981d690d0Chris Lattner/// This is useful in a debugger. 5410c727a35718556866a978f64ac549d9798735f08Chris Lattnervoid Stmt::dump(const SourceManager &SM) const { 5420c727a35718556866a978f64ac549d9798735f08Chris Lattner StmtDumper P(&SM, stderr, 4); 5430c727a35718556866a978f64ac549d9798735f08Chris Lattner P.Visit(const_cast<Stmt*>(this)); 5440c727a35718556866a978f64ac549d9798735f08Chris Lattner fprintf(stderr, "\n"); 5450c727a35718556866a978f64ac549d9798735f08Chris Lattner} 5460c727a35718556866a978f64ac549d9798735f08Chris Lattner 5470c727a35718556866a978f64ac549d9798735f08Chris Lattner/// dump - This does a local dump of the specified AST fragment. It dumps the 5480c727a35718556866a978f64ac549d9798735f08Chris Lattner/// specified node and a few nodes underneath it, but not the whole subtree. 5490c727a35718556866a978f64ac549d9798735f08Chris Lattner/// This is useful in a debugger. 5506000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid Stmt::dump() const { 5510c727a35718556866a978f64ac549d9798735f08Chris Lattner StmtDumper P(0, stderr, 4); 5520c727a35718556866a978f64ac549d9798735f08Chris Lattner P.Visit(const_cast<Stmt*>(this)); 5530c727a35718556866a978f64ac549d9798735f08Chris Lattner fprintf(stderr, "\n"); 5540c727a35718556866a978f64ac549d9798735f08Chris Lattner} 5550c727a35718556866a978f64ac549d9798735f08Chris Lattner 5560c727a35718556866a978f64ac549d9798735f08Chris Lattner/// dumpAll - This does a dump of the specified AST fragment and all subtrees. 5570c727a35718556866a978f64ac549d9798735f08Chris Lattnervoid Stmt::dumpAll(const SourceManager &SM) const { 5580c727a35718556866a978f64ac549d9798735f08Chris Lattner StmtDumper P(&SM, stderr, ~0U); 559c5598cbc4c3f2fb515af7f142f78ff630bdb5c01Chris Lattner P.Visit(const_cast<Stmt*>(this)); 560ee41ce53f7017591a9d62d5986cf3fd6fc98a120Chris Lattner fprintf(stderr, "\n"); 5616000dace22f110d8768476989313e9d981d690d0Chris Lattner} 5626000dace22f110d8768476989313e9d981d690d0Chris Lattner 5636000dace22f110d8768476989313e9d981d690d0Chris Lattner/// dumpAll - This does a dump of the specified AST fragment and all subtrees. 5646000dace22f110d8768476989313e9d981d690d0Chris Lattnervoid Stmt::dumpAll() const { 5650c727a35718556866a978f64ac549d9798735f08Chris Lattner StmtDumper P(0, stderr, ~0U); 566c5598cbc4c3f2fb515af7f142f78ff630bdb5c01Chris Lattner P.Visit(const_cast<Stmt*>(this)); 567ee41ce53f7017591a9d62d5986cf3fd6fc98a120Chris Lattner fprintf(stderr, "\n"); 5686000dace22f110d8768476989313e9d981d690d0Chris Lattner} 569