1*67e74705SXin Li //===--- DeclGroup.cpp - Classes for representing groups of Decls -*- C++ -*-==//
2*67e74705SXin Li //
3*67e74705SXin Li // The LLVM Compiler Infrastructure
4*67e74705SXin Li //
5*67e74705SXin Li // This file is distributed under the University of Illinois Open Source
6*67e74705SXin Li // License. See LICENSE.TXT for details.
7*67e74705SXin Li //
8*67e74705SXin Li //===----------------------------------------------------------------------===//
9*67e74705SXin Li //
10*67e74705SXin Li // This file defines the DeclGroup and DeclGroupRef classes.
11*67e74705SXin Li //
12*67e74705SXin Li //===----------------------------------------------------------------------===//
13*67e74705SXin Li
14*67e74705SXin Li #include "clang/AST/DeclGroup.h"
15*67e74705SXin Li #include "clang/AST/ASTContext.h"
16*67e74705SXin Li #include "clang/AST/Decl.h"
17*67e74705SXin Li #include "llvm/Support/Allocator.h"
18*67e74705SXin Li using namespace clang;
19*67e74705SXin Li
Create(ASTContext & C,Decl ** Decls,unsigned NumDecls)20*67e74705SXin Li DeclGroup* DeclGroup::Create(ASTContext &C, Decl **Decls, unsigned NumDecls) {
21*67e74705SXin Li assert(NumDecls > 1 && "Invalid DeclGroup");
22*67e74705SXin Li unsigned Size = totalSizeToAlloc<Decl *>(NumDecls);
23*67e74705SXin Li void* Mem = C.Allocate(Size, llvm::AlignOf<DeclGroup>::Alignment);
24*67e74705SXin Li new (Mem) DeclGroup(NumDecls, Decls);
25*67e74705SXin Li return static_cast<DeclGroup*>(Mem);
26*67e74705SXin Li }
27*67e74705SXin Li
DeclGroup(unsigned numdecls,Decl ** decls)28*67e74705SXin Li DeclGroup::DeclGroup(unsigned numdecls, Decl** decls) : NumDecls(numdecls) {
29*67e74705SXin Li assert(numdecls > 0);
30*67e74705SXin Li assert(decls);
31*67e74705SXin Li std::uninitialized_copy(decls, decls + numdecls,
32*67e74705SXin Li getTrailingObjects<Decl *>());
33*67e74705SXin Li }
34