xref: /openbsd/gnu/llvm/clang/lib/AST/DeclGroup.cpp (revision e5dd7070)
1*e5dd7070Spatrick //===- DeclGroup.cpp - Classes for representing groups of Decls -----------===//
2*e5dd7070Spatrick //
3*e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information.
5*e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*e5dd7070Spatrick //
7*e5dd7070Spatrick //===----------------------------------------------------------------------===//
8*e5dd7070Spatrick //
9*e5dd7070Spatrick //  This file defines the DeclGroup and DeclGroupRef classes.
10*e5dd7070Spatrick //
11*e5dd7070Spatrick //===----------------------------------------------------------------------===//
12*e5dd7070Spatrick 
13*e5dd7070Spatrick #include "clang/AST/DeclGroup.h"
14*e5dd7070Spatrick #include "clang/AST/ASTContext.h"
15*e5dd7070Spatrick #include <cassert>
16*e5dd7070Spatrick #include <memory>
17*e5dd7070Spatrick 
18*e5dd7070Spatrick using namespace clang;
19*e5dd7070Spatrick 
Create(ASTContext & C,Decl ** Decls,unsigned NumDecls)20*e5dd7070Spatrick DeclGroup* DeclGroup::Create(ASTContext &C, Decl **Decls, unsigned NumDecls) {
21*e5dd7070Spatrick   assert(NumDecls > 1 && "Invalid DeclGroup");
22*e5dd7070Spatrick   unsigned Size = totalSizeToAlloc<Decl *>(NumDecls);
23*e5dd7070Spatrick   void *Mem = C.Allocate(Size, alignof(DeclGroup));
24*e5dd7070Spatrick   new (Mem) DeclGroup(NumDecls, Decls);
25*e5dd7070Spatrick   return static_cast<DeclGroup*>(Mem);
26*e5dd7070Spatrick }
27*e5dd7070Spatrick 
DeclGroup(unsigned numdecls,Decl ** decls)28*e5dd7070Spatrick DeclGroup::DeclGroup(unsigned numdecls, Decl** decls) : NumDecls(numdecls) {
29*e5dd7070Spatrick   assert(numdecls > 0);
30*e5dd7070Spatrick   assert(decls);
31*e5dd7070Spatrick   std::uninitialized_copy(decls, decls + numdecls,
32*e5dd7070Spatrick                           getTrailingObjects<Decl *>());
33*e5dd7070Spatrick }
34