//===--- Expr.h - Classes for representing expressions ----------*- 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 Expr interface and subclasses.////===----------------------------------------------------------------------===//#ifndef LLVM_CLANG_AST_EXPR_H#define LLVM_CLANG_AST_EXPR_H#include"clang/AST/Stmt.h"#include"clang/AST/Type.h"#include"clang/AST/Decl.h"#include"clang/AST/DeclObjC.h"#include"clang/Basic/IdentifierTable.h"#include"llvm/ADT/APSInt.h"#include"llvm/ADT/APFloat.h"#include"llvm/ADT/SmallVector.h"#include<vector>namespaceclang{classIdentifierInfo;classSelector;classDecl;classASTContext;/// Expr - This represents one expression. Note that Expr's are subclasses of/// Stmt. This allows an expression to be transparently used any place a Stmt/// is required.///classExpr:publicStmt{QualTypeTR;protected:Expr(StmtClassSC,QualTypeT):Stmt(SC),TR(T){}public:QualTypegetType()const{returnTR;}voidsetType(QualTypet){TR=t;}/// SourceLocation tokens are not useful in isolation - they are low level/// value objects created/interpreted by SourceManager. We assume AST/// clients will have a pointer to the respective SourceManager.virtualSourceRangegetSourceRange()const=0;/// getExprLoc - Return the preferred location for the arrow when diagnosing/// a problem with a generic expression.virtualSourceLocationgetExprLoc()const{returngetLocStart();}/// hasLocalSideEffect - Return true if this immediate expression has side/// effects,