//===--- Stmt.h - Classes for representing statements -----------*- C++ -*-===////// The LLVM Compiler Infrastructure//// This file is distributed under the University of Illinois Open Source// License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This file defines the Stmt interface and subclasses.////===----------------------------------------------------------------------===//#ifndef LLVM_CLANG_AST_STMT_H#define LLVM_CLANG_AST_STMT_H#include"llvm/Support/Casting.h"#include"llvm/Support/raw_ostream.h"#include"clang/Basic/SourceLocation.h"#include"clang/AST/PrettyPrinter.h"#include"clang/AST/StmtIterator.h"#include"clang/AST/DeclGroup.h"#include"llvm/ADT/SmallVector.h"#include"clang/AST/ASTContext.h"#include<string>usingllvm::dyn_cast_or_null;namespacellvm{classFoldingSetNodeID;}namespaceclang{classASTContext;classExpr;classDecl;classParmVarDecl;classQualType;classIdentifierInfo;classSourceManager;classStringLiteral;classSwitchStmt;//===----------------------------------------------------------------------===//// ExprIterator - Iterators for iterating over Stmt* arrays that contain// only Expr*. This is needed because AST nodes use Stmt* arrays to store// references to children (to be compatible with StmtIterator).//===----------------------------------------------------------------------===//classStmt;classExpr;classExprIterator{Stmt**I;public:ExprIterator(Stmt**i):I(i){}ExprIterator():I(0){}ExprIterator&operator++(){++I;return*this;}ExprIteratoroperator-(size_ti){returnI-i;}ExprIteratoroperator+(size_ti){returnI+i;}Expr*operator[](size_tidx);// FIXME: Verify that this will correctly return a signed distance.signedoperator-(constExprIterator&R)const{returnI-R.I;}Expr*operator*()const;Expr*operator->()const;booloperator==(constExprIterator&R)const{returnI==R.I;}booloperator!=(constExprIterator&R)const{returnI!=R.I;}booloperator>(constExprIterator&R)const{returnI>R.I;}booloperator>=(constExprIterator&R)const{returnI>=R.I;}};classConstExprIterator{Stmt*const*I;public:ConstExprIterator(Stmt*const*