Stmt.h revision 4ce854736dd196e2304f554ebeac8b43c89cf9e2
141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org//===--- Stmt.h - Classes for representing statements -----------*- C++ -*-===// 241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// 341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// The LLVM Compiler Infrastructure 441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// 541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// This file was developed by Chris Lattner and is distributed under 641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// the University of Illinois Open Source License. See LICENSE.TXT for details. 741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// 841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org//===----------------------------------------------------------------------===// 941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// 1041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// This file defines the Stmt interface and subclasses. 1141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// 1241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org//===----------------------------------------------------------------------===// 1341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 1441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#ifndef LLVM_CLANG_AST_STMT_H 1541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define LLVM_CLANG_AST_STMT_H 1641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 1741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "clang/Basic/SourceLocation.h" 1841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "llvm/ADT/SmallVector.h" 1941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include <iosfwd> 2041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgnamespace clang { 2241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org class Expr; 2341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org class Decl; 2441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org class IdentifierInfo; 2541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org class SwitchStmt; 2641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 2741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// Stmt - This represents one statement. 2841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 2941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass Stmt { 3041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 3141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org enum StmtClass { 3241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define STMT(N, CLASS, PARENT) CLASS##Class = N, 3341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define FIRST_STMT(N) firstStmtConstant = N, 3441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define LAST_STMT(N) lastStmtConstant = N, 3541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define FIRST_EXPR(N) firstExprConstant = N, 3641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#define LAST_EXPR(N) lastExprConstant = N 3741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "clang/AST/StmtNodes.def" 3841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 3941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgprivate: 4041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const StmtClass sClass; 4141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 4241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt(StmtClass SC) : sClass(SC) { 4341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org if (Stmt::CollectingStats()) Stmt::addStmtClass(SC); 4441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 4541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org virtual ~Stmt() {} 4641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 4741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org StmtClass getStmtClass() const { return sClass; } 4841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const char *getStmtClassName() const; 4941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // global temp stats (until we have a per-module visitor) 5141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static void addStmtClass(const StmtClass s); 5241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool CollectingStats(bool enable=false); 5341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static void PrintStats(); 5441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 5541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org /// dump - This does a local dump of the specified AST fragment. It dumps the 5641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org /// specified node and a few nodes underneath it, but not the whole subtree. 5741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org /// This is useful in a debugger. 5841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void dump() const; 5941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org /// dumpAll - This does a dump of the specified AST fragment and all subtrees. 6141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void dumpAll() const; 6241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org /// dumpPretty/printPretty - These two methods do a "pretty print" of the AST 6441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org /// back to its original source language syntax. 6541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void dumpPretty() const; 6641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void printPretty(std::ostream &OS) const; 6741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 6841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // Implement isa<T> support. 6941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *) { return true; } 7041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 7141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 7241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// DeclStmt - Adaptor class for mixing declarations with statements and 7341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// expressions. For example, CompoundStmt mixes statements, expressions 7441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// and declarations (variables, types). Another example is ForStmt, where 7541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// the first statement can be an expression or a declaration. 7641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 7741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass DeclStmt : public Stmt { 7841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Decl *TheDecl; 7941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 8041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org DeclStmt(Decl *D) : Stmt(DeclStmtClass), TheDecl(D) {} 8141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Decl *getDecl() const { return TheDecl; } 8341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Decl *getDecl() { return TheDecl; } 8441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 8541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 8641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == DeclStmtClass; 8741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 8841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const DeclStmt *) { return true; } 8941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 9041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 9141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// NullStmt - This is the null statement ";": C99 6.8.3p3. 9241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 9341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass NullStmt : public Stmt { 9441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SourceLocation SemiLoc; 9541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 9641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org NullStmt(SourceLocation L) : Stmt(NullStmtClass), SemiLoc(L) {} 9741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 9841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SourceLocation getSemiLoc() const { return SemiLoc; } 9941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 10041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 10141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == NullStmtClass; 10241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 10341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const NullStmt *) { return true; } 10441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 10541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 10641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// CompoundStmt - This represents a group of statements like { stmt stmt }. 10741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 10841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass CompoundStmt : public Stmt { 10941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org llvm::SmallVector<Stmt*, 16> Body; 11041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 11141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org CompoundStmt(Stmt **StmtStart, unsigned NumStmts) 11241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org : Stmt(CompoundStmtClass), Body(StmtStart, StmtStart+NumStmts) {} 11341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 11441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org bool body_empty() const { return Body.empty(); } 11541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 11641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org typedef llvm::SmallVector<Stmt*, 16>::iterator body_iterator; 11741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org body_iterator body_begin() { return Body.begin(); } 11841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org body_iterator body_end() { return Body.end(); } 11941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *body_back() { return Body.back(); } 12041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 12141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org typedef llvm::SmallVector<Stmt*, 16>::const_iterator const_body_iterator; 12241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const_body_iterator body_begin() const { return Body.begin(); } 12341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const_body_iterator body_end() const { return Body.end(); } 12441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *body_back() const { return Body.back(); } 12541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 12641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org typedef llvm::SmallVector<Stmt*, 16>::reverse_iterator reverse_body_iterator; 12741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org reverse_body_iterator body_rbegin() { return Body.rbegin(); } 12841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org reverse_body_iterator body_rend() { return Body.rend(); } 12941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 13041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org typedef llvm::SmallVector<Stmt*, 16>::const_reverse_iterator 13141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const_reverse_body_iterator; 13241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const_reverse_body_iterator body_rbegin() const { return Body.rbegin(); } 13341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const_reverse_body_iterator body_rend() const { return Body.rend(); } 13441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 13541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void push_back(Stmt *S) { Body.push_back(S); } 13641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 13741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 13841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == CompoundStmtClass; 13941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 14041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const CompoundStmt *) { return true; } 14141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 14241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 14341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// SwitchCase is the base class for CaseStmt and DefaultStmt, 14441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass SwitchCase : public Stmt { 14541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // A pointer to the following CaseStmt or DefaultStmt class, 14641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // used by SwitchStmt. 14741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SwitchCase *NextSwitchCase; 14841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgprotected: 14941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SwitchCase(StmtClass SC) : Stmt(SC), NextSwitchCase(0) {} 15041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 15141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 15241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const SwitchCase *getNextSwitchCase() const { return NextSwitchCase; } 15341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 15441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SwitchCase *getNextSwitchCase() { return NextSwitchCase; } 15541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 15641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void setNextSwitchCase(SwitchCase *SC) { NextSwitchCase = SC; } 15741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 15841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 15941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == CaseStmtClass || 16041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org T->getStmtClass() == DefaultStmtClass; 16141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 16241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const SwitchCase *) { return true; } 16341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 16441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 16541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass CaseStmt : public SwitchCase { 16641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *LHSVal; 16741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *RHSVal; // Non-null for GNU "case 1 ... 4" extension 16841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *SubStmt; 16941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 17041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org CaseStmt(Expr *lhs, Expr *rhs, Stmt *substmt) 17141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org : SwitchCase(CaseStmtClass), LHSVal(lhs), RHSVal(rhs), SubStmt(substmt) {} 17241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 17341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getLHS() { return LHSVal; } 17441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getRHS() { return RHSVal; } 17541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getSubStmt() { return SubStmt; } 17641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 17741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 17841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == CaseStmtClass; 17941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 18041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const CaseStmt *) { return true; } 18141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 18241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 18341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass DefaultStmt : public SwitchCase { 18441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SourceLocation DefaultLoc; 18541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *SubStmt; 18641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 18741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org DefaultStmt(SourceLocation DL, Stmt *substmt) : SwitchCase(DefaultStmtClass), 18841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org DefaultLoc(DL), SubStmt(substmt) {} 18941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 19041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SourceLocation getDefaultLoc() const { return DefaultLoc; } 19141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getSubStmt() { return SubStmt; } 19241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 19341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 19441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == DefaultStmtClass; 19541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 19641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const DefaultStmt *) { return true; } 19741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 19841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 19941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass LabelStmt : public Stmt { 20041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SourceLocation IdentLoc; 20141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org IdentifierInfo *Label; 20241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *SubStmt; 20341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 20441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org LabelStmt(SourceLocation IL, IdentifierInfo *label, Stmt *substmt) 20541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org : Stmt(LabelStmtClass), IdentLoc(IL), Label(label), SubStmt(substmt) {} 20641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 20741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SourceLocation getIdentLoc() const { return IdentLoc; } 20841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org IdentifierInfo *getID() const { return Label; } 20941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const char *getName() const; 21041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getSubStmt() { return SubStmt; } 21141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *getSubStmt() const { return SubStmt; } 21241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 21341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void setIdentLoc(SourceLocation L) { IdentLoc = L; } 21441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void setSubStmt(Stmt *SS) { SubStmt = SS; } 21541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 21641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 21741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == LabelStmtClass; 21841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 21941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const LabelStmt *) { return true; } 22041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 22141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 22241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 22341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// IfStmt - This represents an if/then/else. 22441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 22541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass IfStmt : public Stmt { 22641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *Cond; 22741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *Then, *Else; 22841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 22941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org IfStmt(Expr *cond, Stmt *then, Stmt *elsev = 0) 23041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org : Stmt(IfStmtClass), Cond(cond), Then(then), Else(elsev) {} 23141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 23241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Expr *getCond() const { return Cond; } 23341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *getThen() const { return Then; } 23441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *getElse() const { return Else; } 23541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 23641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getCond() { return Cond; } 23741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getThen() { return Then; } 23841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getElse() { return Else; } 23941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 24041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 24141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == IfStmtClass; 24241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 24341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const IfStmt *) { return true; } 24441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 24541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 24641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// SwitchStmt - This represents a 'switch' stmt. 24741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 24841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass SwitchStmt : public Stmt { 24941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *Cond; 25041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *Body; 25141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 25241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // This points to a linked list of case and default statements. 25341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SwitchCase *FirstCase; 25441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 25541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SwitchStmt(Expr *cond) 25641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org : Stmt(SwitchStmtClass), Cond(cond), Body(0), FirstCase(0) {} 25741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 25841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Expr *getCond() const { return Cond; } 25941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *getBody() const { return Body; } 26041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const SwitchCase *getSwitchCaseList() const { return FirstCase; } 26141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 26241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getCond() { return Cond; } 26341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getBody() { return Body; } 26441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SwitchCase *getSwitchCaseList() { return FirstCase; } 26541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 26641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void setBody(Stmt *S) { Body = S; } 26741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 26841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org void addSwitchCase(SwitchCase *SC) { 26941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org if (FirstCase) 27041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org SC->setNextSwitchCase(FirstCase); 27141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 27241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org FirstCase = SC; 27341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 27441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 27541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 27641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == SwitchStmtClass; 27741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 27841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const SwitchStmt *) { return true; } 27941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 28041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 28141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 28241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// WhileStmt - This represents a 'while' stmt. 28341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 28441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass WhileStmt : public Stmt { 28541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *Cond; 28641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *Body; 28741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 28841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org WhileStmt(Expr *cond, Stmt *body) 28941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org : Stmt(WhileStmtClass), Cond(cond), Body(body) {} 29041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 29141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getCond() { return Cond; } 29241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Expr *getCond() const { return Cond; } 29341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getBody() { return Body; } 29441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *getBody() const { return Body; } 29541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 29641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 29741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == WhileStmtClass; 29841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 29941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const WhileStmt *) { return true; } 30041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 30141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 30241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// DoStmt - This represents a 'do/while' stmt. 30341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 30441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass DoStmt : public Stmt { 30541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *Body; 30641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *Cond; 30741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 30841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org DoStmt(Stmt *body, Expr *cond) 30941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org : Stmt(DoStmtClass), Body(body), Cond(cond) {} 31041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 31141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getBody() { return Body; } 31241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *getBody() const { return Body; } 31341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getCond() { return Cond; } 31441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Expr *getCond() const { return Cond; } 31541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 31641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 31741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == DoStmtClass; 31841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 31941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const DoStmt *) { return true; } 32041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 32141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 32241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 32341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// ForStmt - This represents a 'for (init;cond;inc)' stmt. Note that any of 32441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// the init/cond/inc parts of the ForStmt will be null if they were not 32541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// specified in the source. 32641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 32741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass ForStmt : public Stmt { 32841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *Init; // Expression or declstmt. 32941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *Cond, *Inc; 33041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *Body; 33141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 33241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org ForStmt(Stmt *init, Expr *cond, Expr *inc, Stmt *body) 33341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org : Stmt(ForStmtClass), Init(init), Cond(cond), Inc(inc), Body(body) {} 33441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 33541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getInit() { return Init; } 33641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getCond() { return Cond; } 33741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getInc() { return Inc; } 33841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Stmt *getBody() { return Body; } 33941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 34041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *getInit() const { return Init; } 34141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Expr *getCond() const { return Cond; } 34241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Expr *getInc() const { return Inc; } 34341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Stmt *getBody() const { return Body; } 34441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 34541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 34641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == ForStmtClass; 34741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 34841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const ForStmt *) { return true; } 34941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 35041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 35141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// GotoStmt - This represents a direct goto. 35241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 35341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass GotoStmt : public Stmt { 35441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org LabelStmt *Label; 35541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 35641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org GotoStmt(LabelStmt *label) : Stmt(GotoStmtClass), Label(label) {} 35741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 35841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org LabelStmt *getLabel() const { return Label; } 35941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 36041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 36141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == GotoStmtClass; 36241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 36341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const GotoStmt *) { return true; } 36441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 36541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 36641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// IndirectGotoStmt - This represents an indirect goto. 36741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 36841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass IndirectGotoStmt : public Stmt { 36941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *Target; 37041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 37141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org IndirectGotoStmt(Expr *target) : Stmt(IndirectGotoStmtClass), Target(target){} 37241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 37341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getTarget() { return Target; } 37441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Expr *getTarget() const { return Target; } 37541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 37641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 37741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == IndirectGotoStmtClass; 37841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 37941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const IndirectGotoStmt *) { return true; } 38041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 38141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 38241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 38341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// ContinueStmt - This represents a continue. 38441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 38541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass ContinueStmt : public Stmt { 38641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 38741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org ContinueStmt() : Stmt(ContinueStmtClass) {} 38841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 38941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == ContinueStmtClass; 39041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 39141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const ContinueStmt *) { return true; } 39241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 39341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 39441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// BreakStmt - This represents a break. 39541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 39641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass BreakStmt : public Stmt { 39741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 39841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org BreakStmt() : Stmt(BreakStmtClass) {} 39941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 40041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == BreakStmtClass; 40141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 40241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const BreakStmt *) { return true; } 40341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 404d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 40541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 40641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// ReturnStmt - This represents a return, optionally of an expression. 40741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org/// 40841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgclass ReturnStmt : public Stmt { 40941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *RetExpr; 41041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.orgpublic: 41141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org ReturnStmt(Expr *E = 0) : Stmt(ReturnStmtClass), RetExpr(E) {} 41241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 41341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org const Expr *getRetValue() const { return RetExpr; } 41441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org Expr *getRetValue() { return RetExpr; } 41541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 41641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const Stmt *T) { 41741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org return T->getStmtClass() == ReturnStmtClass; 41841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org } 41941294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org static bool classof(const ReturnStmt *) { return true; } 42041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org}; 42141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 42241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} // end namespace clang 42341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 42441294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#endif 42541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org