clang API Documentation
00001 //===--- MultiInitializer.h - Initializer expression group ------*- C++ -*-===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file defines the MultiInitializer class, which can represent a list 00011 // initializer or a parentheses-wrapped group of expressions in a C++ member 00012 // initializer. 00013 // 00014 //===----------------------------------------------------------------------===// 00015 00016 #ifndef LLVM_CLANG_SEMA_MULTIINITIALIZER_H 00017 #define LLVM_CLANG_SEMA_MULTIINITIALIZER_H 00018 00019 #include "clang/Sema/Ownership.h" 00020 #include "clang/Basic/SourceLocation.h" 00021 #include "llvm/ADT/PointerUnion.h" 00022 00023 namespace clang { 00024 class ASTContext; 00025 class Expr; 00026 class InitializationKind; 00027 class InitializedEntity; 00028 class InitListExpr; 00029 class Sema; 00030 00031 class MultiInitializer { 00032 llvm::PointerUnion<Expr*, Expr**> InitListOrExpressions; 00033 unsigned NumInitializers; 00034 SourceLocation LParenLoc; 00035 SourceLocation RParenLoc; 00036 00037 InitListExpr *getInitList() const; 00038 Expr **getExpressions() const { return InitListOrExpressions.get<Expr**>(); } 00039 00040 public: 00041 MultiInitializer(Expr* InitList) 00042 : InitListOrExpressions(InitList) 00043 {} 00044 00045 MultiInitializer(SourceLocation LParenLoc, Expr **Exprs, unsigned NumInits, 00046 SourceLocation RParenLoc) 00047 : InitListOrExpressions(Exprs), NumInitializers(NumInits), 00048 LParenLoc(LParenLoc), RParenLoc(RParenLoc) 00049 {} 00050 00051 bool isInitializerList() const { return InitListOrExpressions.is<Expr*>(); } 00052 00053 SourceLocation getStartLoc() const; 00054 SourceLocation getEndLoc() const; 00055 00056 typedef Expr **iterator; 00057 iterator begin() const; 00058 iterator end() const; 00059 00060 bool isTypeDependent() const; 00061 00062 bool DiagnoseUnexpandedParameterPack(Sema &SemaRef) const; 00063 00064 // Return the InitListExpr or create a ParenListExpr. 00065 Expr *CreateInitExpr(ASTContext &Ctx, QualType T) const; 00066 00067 ExprResult PerformInit(Sema &SemaRef, InitializedEntity Entity, 00068 InitializationKind Kind) const; 00069 }; 00070 } 00071 00072 #endif