xref: /aosp_15_r20/external/clang/lib/AST/DeclGroup.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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