//===--- MultiInitializer.h - Initializer expression group ------*- 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 MultiInitializer class, which can represent a list // initializer or a parentheses-wrapped group of expressions in a C++ member // initializer. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_SEMA_MULTIINITIALIZER_H #define LLVM_CLANG_SEMA_MULTIINITIALIZER_H #include "clang/Sema/Ownership.h" #include "clang/Basic/SourceLocation.h" #include "llvm/ADT/PointerUnion.h" namespace clang { class ASTContext; class Expr; class InitializationKind; class InitializedEntity; class InitListExpr; class Sema; class MultiInitializer { llvm::PointerUnion InitListOrExpressions; unsigned NumInitializers; SourceLocation LParenLoc; SourceLocation RParenLoc; InitListExpr *getInitList() const; Expr **getExpressions() const { return InitListOrExpressions.get(); } public: MultiInitializer(Expr* InitList) : InitListOrExpressions(InitList) {} MultiInitializer(SourceLocation LParenLoc, Expr **Exprs, unsigned NumInits, SourceLocation RParenLoc) : InitListOrExpressions(Exprs), NumInitializers(NumInits), LParenLoc(LParenLoc), RParenLoc(RParenLoc) {} bool isInitializerList() const { return InitListOrExpressions.is(); } SourceLocation getStartLoc() const; SourceLocation getEndLoc() const; typedef Expr **iterator; iterator begin() const; iterator end() const; bool isTypeDependent() const; bool DiagnoseUnexpandedParameterPack(Sema &SemaRef) const; // Return the InitListExpr or create a ParenListExpr. Expr *CreateInitExpr(ASTContext &Ctx, QualType T) const; ExprResult PerformInit(Sema &SemaRef, InitializedEntity Entity, InitializationKind Kind) const; }; } #endif