clang API Documentation

MultiInitializer.h
Go to the documentation of this file.
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