1 //===--- MultiInitializer.h - Initializer expression group ------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines the MultiInitializer class, which can represent a list
11 // initializer or a parentheses-wrapped group of expressions in a C++ member
14 //===----------------------------------------------------------------------===//
16 #ifndef LLVM_CLANG_SEMA_MULTIINITIALIZER_H
17 #define LLVM_CLANG_SEMA_MULTIINITIALIZER_H
19 #include "clang/Sema/Ownership.h"
20 #include "clang/Basic/SourceLocation.h"
21 #include "llvm/ADT/PointerUnion.h"
26 class InitializationKind;
27 class InitializedEntity;
31 class MultiInitializer {
32 llvm::PointerUnion<Expr*, Expr**> InitListOrExpressions;
33 unsigned NumInitializers;
34 SourceLocation LParenLoc;
35 SourceLocation RParenLoc;
37 InitListExpr *getInitList() const;
38 Expr **getExpressions() const { return InitListOrExpressions.get<Expr**>(); }
41 MultiInitializer(Expr* InitList)
42 : InitListOrExpressions(InitList)
45 MultiInitializer(SourceLocation LParenLoc, Expr **Exprs, unsigned NumInits,
46 SourceLocation RParenLoc)
47 : InitListOrExpressions(Exprs), NumInitializers(NumInits),
48 LParenLoc(LParenLoc), RParenLoc(RParenLoc)
51 bool isInitializerList() const { return InitListOrExpressions.is<Expr*>(); }
53 SourceLocation getStartLoc() const;
54 SourceLocation getEndLoc() const;
56 typedef Expr **iterator;
57 iterator begin() const;
60 bool isTypeDependent() const;
62 bool DiagnoseUnexpandedParameterPack(Sema &SemaRef) const;
64 // Return the InitListExpr or create a ParenListExpr.
65 Expr *CreateInitExpr(ASTContext &Ctx, QualType T) const;
67 ExprResult PerformInit(Sema &SemaRef, InitializedEntity Entity,
68 InitializationKind Kind) const;