Stmt.h revision 4ce854736dd196e2304f554ebeac8b43c89cf9e2
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===--- Stmt.h - Classes for representing statements -----------*- C++ -*-===// 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// The LLVM Compiler Infrastructure 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 55f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// This file was developed by Chris Lattner and is distributed under 65f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// the University of Illinois Open Source License. See LICENSE.TXT for details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// This file defines the Stmt interface and subclasses. 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef LLVM_CLANG_AST_STMT_H 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define LLVM_CLANG_AST_STMT_H 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "clang/Basic/SourceLocation.h" 185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "llvm/ADT/SmallVector.h" 195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <iosfwd> 205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace clang { 225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer class Expr; 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer class Decl; 245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer class IdentifierInfo; 256c36be5b383875b490684bcf439d6d427298c1afChris Lattner class SwitchStmt; 265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// Stmt - This represents one statement. 285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass Stmt { 305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer enum StmtClass { 325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define STMT(N, CLASS, PARENT) CLASS##Class = N, 335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define FIRST_STMT(N) firstStmtConstant = N, 345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define LAST_STMT(N) lastStmtConstant = N, 355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define FIRST_EXPR(N) firstExprConstant = N, 365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define LAST_EXPR(N) lastExprConstant = N 375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "clang/AST/StmtNodes.def" 385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerprivate: 405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const StmtClass sClass; 415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt(StmtClass SC) : sClass(SC) { 435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (Stmt::CollectingStats()) Stmt::addStmtClass(SC); 445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual ~Stmt() {} 465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer StmtClass getStmtClass() const { return sClass; } 485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const char *getStmtClassName() const; 495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // global temp stats (until we have a per-module visitor) 515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static void addStmtClass(const StmtClass s); 525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool CollectingStats(bool enable=false); 535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static void PrintStats(); 546000dace22f110d8768476989313e9d981d690d0Chris Lattner 556000dace22f110d8768476989313e9d981d690d0Chris Lattner /// dump - This does a local dump of the specified AST fragment. It dumps the 566000dace22f110d8768476989313e9d981d690d0Chris Lattner /// specified node and a few nodes underneath it, but not the whole subtree. 576000dace22f110d8768476989313e9d981d690d0Chris Lattner /// This is useful in a debugger. 585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void dump() const; 596000dace22f110d8768476989313e9d981d690d0Chris Lattner 606000dace22f110d8768476989313e9d981d690d0Chris Lattner /// dumpAll - This does a dump of the specified AST fragment and all subtrees. 616000dace22f110d8768476989313e9d981d690d0Chris Lattner void dumpAll() const; 626000dace22f110d8768476989313e9d981d690d0Chris Lattner 636000dace22f110d8768476989313e9d981d690d0Chris Lattner /// dumpPretty/printPretty - These two methods do a "pretty print" of the AST 646000dace22f110d8768476989313e9d981d690d0Chris Lattner /// back to its original source language syntax. 656000dace22f110d8768476989313e9d981d690d0Chris Lattner void dumpPretty() const; 666000dace22f110d8768476989313e9d981d690d0Chris Lattner void printPretty(std::ostream &OS) const; 675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // Implement isa<T> support. 695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *) { return true; } 705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// DeclStmt - Adaptor class for mixing declarations with statements and 735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// expressions. For example, CompoundStmt mixes statements, expressions 745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// and declarations (variables, types). Another example is ForStmt, where 755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// the first statement can be an expression or a declaration. 765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass DeclStmt : public Stmt { 785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Decl *TheDecl; 795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer DeclStmt(Decl *D) : Stmt(DeclStmtClass), TheDecl(D) {} 815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Decl *getDecl() const { return TheDecl; } 835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Decl *getDecl() { return TheDecl; } 845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == DeclStmtClass; 875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const DeclStmt *) { return true; } 895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// NullStmt - This is the null statement ";": C99 6.8.3p3. 925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass NullStmt : public Stmt { 945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer SourceLocation SemiLoc; 955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer NullStmt(SourceLocation L) : Stmt(NullStmtClass), SemiLoc(L) {} 975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer SourceLocation getSemiLoc() const { return SemiLoc; } 995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 1015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == NullStmtClass; 1025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const NullStmt *) { return true; } 1045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 1055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// CompoundStmt - This represents a group of statements like { stmt stmt }. 1075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 1085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass CompoundStmt : public Stmt { 1095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer llvm::SmallVector<Stmt*, 16> Body; 1105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 1115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer CompoundStmt(Stmt **StmtStart, unsigned NumStmts) 1125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer : Stmt(CompoundStmtClass), Body(StmtStart, StmtStart+NumStmts) {} 1135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 114ab18c4c0ac1a46a38aa84c2c8ea485612e21a614Chris Lattner bool body_empty() const { return Body.empty(); } 115ab18c4c0ac1a46a38aa84c2c8ea485612e21a614Chris Lattner 1165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer typedef llvm::SmallVector<Stmt*, 16>::iterator body_iterator; 1175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer body_iterator body_begin() { return Body.begin(); } 1185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer body_iterator body_end() { return Body.end(); } 119ab18c4c0ac1a46a38aa84c2c8ea485612e21a614Chris Lattner Stmt *body_back() { return Body.back(); } 1205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer typedef llvm::SmallVector<Stmt*, 16>::const_iterator const_body_iterator; 1225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const_body_iterator body_begin() const { return Body.begin(); } 1235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const_body_iterator body_end() const { return Body.end(); } 124ab18c4c0ac1a46a38aa84c2c8ea485612e21a614Chris Lattner const Stmt *body_back() const { return Body.back(); } 1254ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek 1264ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek typedef llvm::SmallVector<Stmt*, 16>::reverse_iterator reverse_body_iterator; 1274ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek reverse_body_iterator body_rbegin() { return Body.rbegin(); } 1284ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek reverse_body_iterator body_rend() { return Body.rend(); } 1294ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek 1304ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek typedef llvm::SmallVector<Stmt*, 16>::const_reverse_iterator 1314ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek const_reverse_body_iterator; 1324ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek const_reverse_body_iterator body_rbegin() const { return Body.rbegin(); } 1334ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek const_reverse_body_iterator body_rend() const { return Body.rend(); } 1344ce854736dd196e2304f554ebeac8b43c89cf9e2Ted Kremenek 1355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void push_back(Stmt *S) { Body.push_back(S); } 1365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 1385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == CompoundStmtClass; 1395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const CompoundStmt *) { return true; } 1415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 1425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 143c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson// SwitchCase is the base class for CaseStmt and DefaultStmt, 144c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlssonclass SwitchCase : public Stmt { 145c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson // A pointer to the following CaseStmt or DefaultStmt class, 146c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson // used by SwitchStmt. 147c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson SwitchCase *NextSwitchCase; 148c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlssonprotected: 149c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson SwitchCase(StmtClass SC) : Stmt(SC), NextSwitchCase(0) {} 150c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 151c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlssonpublic: 152c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson const SwitchCase *getNextSwitchCase() const { return NextSwitchCase; } 153c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 154c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson SwitchCase *getNextSwitchCase() { return NextSwitchCase; } 155c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 156c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson void setNextSwitchCase(SwitchCase *SC) { NextSwitchCase = SC; } 157c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 158c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson static bool classof(const Stmt *T) { 159c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson return T->getStmtClass() == CaseStmtClass || 160c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson T->getStmtClass() == DefaultStmtClass; 161c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson } 162c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson static bool classof(const SwitchCase *) { return true; } 163c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson}; 164c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 165c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlssonclass CaseStmt : public SwitchCase { 1665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *LHSVal; 1675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *RHSVal; // Non-null for GNU "case 1 ... 4" extension 1685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *SubStmt; 1695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 1705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer CaseStmt(Expr *lhs, Expr *rhs, Stmt *substmt) 171c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson : SwitchCase(CaseStmtClass), LHSVal(lhs), RHSVal(rhs), SubStmt(substmt) {} 1725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getLHS() { return LHSVal; } 1745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getRHS() { return RHSVal; } 1755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getSubStmt() { return SubStmt; } 1765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 1785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == CaseStmtClass; 1795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const CaseStmt *) { return true; } 1815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 1825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 183c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlssonclass DefaultStmt : public SwitchCase { 1846c36be5b383875b490684bcf439d6d427298c1afChris Lattner SourceLocation DefaultLoc; 1855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *SubStmt; 1865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 187c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson DefaultStmt(SourceLocation DL, Stmt *substmt) : SwitchCase(DefaultStmtClass), 1886c36be5b383875b490684bcf439d6d427298c1afChris Lattner DefaultLoc(DL), SubStmt(substmt) {} 1895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1906c36be5b383875b490684bcf439d6d427298c1afChris Lattner SourceLocation getDefaultLoc() const { return DefaultLoc; } 1915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getSubStmt() { return SubStmt; } 1925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 1945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == DefaultStmtClass; 1955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const DefaultStmt *) { return true; } 1975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 1985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass LabelStmt : public Stmt { 2005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer SourceLocation IdentLoc; 2015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer IdentifierInfo *Label; 2025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *SubStmt; 2035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 2045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer LabelStmt(SourceLocation IL, IdentifierInfo *label, Stmt *substmt) 2055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer : Stmt(LabelStmtClass), IdentLoc(IL), Label(label), SubStmt(substmt) {} 2065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer SourceLocation getIdentLoc() const { return IdentLoc; } 2085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer IdentifierInfo *getID() const { return Label; } 2095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const char *getName() const; 2105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getSubStmt() { return SubStmt; } 2115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Stmt *getSubStmt() const { return SubStmt; } 2125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void setIdentLoc(SourceLocation L) { IdentLoc = L; } 2145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer void setSubStmt(Stmt *SS) { SubStmt = SS; } 2155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 2175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == LabelStmtClass; 2185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const LabelStmt *) { return true; } 2205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 2215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// IfStmt - This represents an if/then/else. 2245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 2255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass IfStmt : public Stmt { 2265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *Cond; 2275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *Then, *Else; 2285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 2295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer IfStmt(Expr *cond, Stmt *then, Stmt *elsev = 0) 2305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer : Stmt(IfStmtClass), Cond(cond), Then(then), Else(elsev) {} 2315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Expr *getCond() const { return Cond; } 2335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Stmt *getThen() const { return Then; } 2345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Stmt *getElse() const { return Else; } 2355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getCond() { return Cond; } 2375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getThen() { return Then; } 2385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getElse() { return Else; } 2395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 2415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == IfStmtClass; 2425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const IfStmt *) { return true; } 2445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 2455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// SwitchStmt - This represents a 'switch' stmt. 2475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 2485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass SwitchStmt : public Stmt { 2495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *Cond; 2505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *Body; 251c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 252c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson // This points to a linked list of case and default statements. 253c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson SwitchCase *FirstCase; 2545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 255c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson SwitchStmt(Expr *cond) 256c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson : Stmt(SwitchStmtClass), Cond(cond), Body(0), FirstCase(0) {} 2575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 258c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson const Expr *getCond() const { return Cond; } 259c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson const Stmt *getBody() const { return Body; } 260c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson const SwitchCase *getSwitchCaseList() const { return FirstCase; } 261c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 2625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getCond() { return Cond; } 2635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getBody() { return Body; } 264c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson SwitchCase *getSwitchCaseList() { return FirstCase; } 265c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 266c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson void setBody(Stmt *S) { Body = S; } 267c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 268c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson void addSwitchCase(SwitchCase *SC) { 269c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson if (FirstCase) 270c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson SC->setNextSwitchCase(FirstCase); 271c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson 272c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson FirstCase = SC; 273c1fcb7762673be706b0a40477d5e93411e918f93Anders Carlsson } 2745f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 2765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == SwitchStmtClass; 2775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const SwitchStmt *) { return true; } 2795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 2805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// WhileStmt - This represents a 'while' stmt. 2835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 2845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass WhileStmt : public Stmt { 2855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *Cond; 2865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *Body; 2875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 2885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer WhileStmt(Expr *cond, Stmt *body) 2895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer : Stmt(WhileStmtClass), Cond(cond), Body(body) {} 2905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getCond() { return Cond; } 2925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Expr *getCond() const { return Cond; } 2935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getBody() { return Body; } 2945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Stmt *getBody() const { return Body; } 2955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 2975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == WhileStmtClass; 2985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 2995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const WhileStmt *) { return true; } 3005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 3015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// DoStmt - This represents a 'do/while' stmt. 3035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 3045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass DoStmt : public Stmt { 3055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *Body; 3065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *Cond; 3075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 3085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer DoStmt(Stmt *body, Expr *cond) 3095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer : Stmt(DoStmtClass), Body(body), Cond(cond) {} 3105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getBody() { return Body; } 3125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Stmt *getBody() const { return Body; } 3135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getCond() { return Cond; } 3145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Expr *getCond() const { return Cond; } 3155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 3175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == DoStmtClass; 3185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 3195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const DoStmt *) { return true; } 3205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 3215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// ForStmt - This represents a 'for (init;cond;inc)' stmt. Note that any of 3245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// the init/cond/inc parts of the ForStmt will be null if they were not 3255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// specified in the source. 3265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 3275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass ForStmt : public Stmt { 3285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *Init; // Expression or declstmt. 3295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *Cond, *Inc; 3305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *Body; 3315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 3325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ForStmt(Stmt *init, Expr *cond, Expr *inc, Stmt *body) 3335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer : Stmt(ForStmtClass), Init(init), Cond(cond), Inc(inc), Body(body) {} 3345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getInit() { return Init; } 3365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getCond() { return Cond; } 3375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getInc() { return Inc; } 3385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Stmt *getBody() { return Body; } 3395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Stmt *getInit() const { return Init; } 3415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Expr *getCond() const { return Cond; } 3425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Expr *getInc() const { return Inc; } 3435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Stmt *getBody() const { return Body; } 3445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 3465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == ForStmtClass; 3475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 3485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const ForStmt *) { return true; } 3495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 3505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// GotoStmt - This represents a direct goto. 3525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 3535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass GotoStmt : public Stmt { 3545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer LabelStmt *Label; 3555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 3565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer GotoStmt(LabelStmt *label) : Stmt(GotoStmtClass), Label(label) {} 3575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer LabelStmt *getLabel() const { return Label; } 3595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 3615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == GotoStmtClass; 3625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 3635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const GotoStmt *) { return true; } 3645f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 3655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// IndirectGotoStmt - This represents an indirect goto. 3675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 3685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass IndirectGotoStmt : public Stmt { 3695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *Target; 3705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 3716000dace22f110d8768476989313e9d981d690d0Chris Lattner IndirectGotoStmt(Expr *target) : Stmt(IndirectGotoStmtClass), Target(target){} 3725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getTarget() { return Target; } 3746000dace22f110d8768476989313e9d981d690d0Chris Lattner const Expr *getTarget() const { return Target; } 3755f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 3775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == IndirectGotoStmtClass; 3785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 3795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const IndirectGotoStmt *) { return true; } 3805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 3815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// ContinueStmt - This represents a continue. 3845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 3855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass ContinueStmt : public Stmt { 3865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 3875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ContinueStmt() : Stmt(ContinueStmtClass) {} 3885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 3895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == ContinueStmtClass; 3905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 3915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const ContinueStmt *) { return true; } 3925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 3935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// BreakStmt - This represents a break. 3955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 3965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass BreakStmt : public Stmt { 3975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 3985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer BreakStmt() : Stmt(BreakStmtClass) {} 3995f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 4005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == BreakStmtClass; 4015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 4025f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const BreakStmt *) { return true; } 4035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 4045f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 4055f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 4065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// ReturnStmt - This represents a return, optionally of an expression. 4075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 4085f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass ReturnStmt : public Stmt { 4095f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *RetExpr; 4105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 4115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ReturnStmt(Expr *E = 0) : Stmt(ReturnStmtClass), RetExpr(E) {} 4125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 4135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const Expr *getRetValue() const { return RetExpr; } 4145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer Expr *getRetValue() { return RetExpr; } 4155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 4165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const Stmt *T) { 4175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return T->getStmtClass() == ReturnStmtClass; 4185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 4195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer static bool classof(const ReturnStmt *) { return true; } 4205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 4215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 4225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} // end namespace clang 4235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 4245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif 425