blob: d005ca3b0677a3da66369a2023ae4d0cbaeaefa2 [file] [log] [blame]
Douglas Gregoraaba5e32009-02-04 19:02:06 +00001//===--- DeclCXX.cpp - C++ Declaration AST Node Implementation ------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the C++ related Decl classes for templates.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/AST/DeclCXX.h"
15#include "clang/AST/DeclTemplate.h"
16#include "clang/AST/ASTContext.h"
17#include "clang/Basic/IdentifierTable.h"
18#include "llvm/ADT/STLExtras.h"
19using namespace clang;
20
21//===----------------------------------------------------------------------===//
22// TemplateParameterList Implementation
23//===----------------------------------------------------------------------===//
24
Douglas Gregorddc29e12009-02-06 22:42:48 +000025TemplateParameterList::TemplateParameterList(SourceLocation TemplateLoc,
26 SourceLocation LAngleLoc,
27 Decl **Params, unsigned NumParams,
28 SourceLocation RAngleLoc)
29 : TemplateLoc(TemplateLoc), LAngleLoc(LAngleLoc), RAngleLoc(RAngleLoc),
30 NumParams(NumParams) {
Douglas Gregoraaba5e32009-02-04 19:02:06 +000031 for (unsigned Idx = 0; Idx < NumParams; ++Idx)
32 begin()[Idx] = Params[Idx];
33}
34
35TemplateParameterList *
Douglas Gregorddc29e12009-02-06 22:42:48 +000036TemplateParameterList::Create(ASTContext &C, SourceLocation TemplateLoc,
37 SourceLocation LAngleLoc, Decl **Params,
38 unsigned NumParams, SourceLocation RAngleLoc) {
Douglas Gregoraaba5e32009-02-04 19:02:06 +000039 unsigned Size = sizeof(TemplateParameterList) + sizeof(Decl *) * NumParams;
40 unsigned Align = llvm::AlignOf<TemplateParameterList>::Alignment;
41 void *Mem = C.Allocate(Size, Align);
Douglas Gregorddc29e12009-02-06 22:42:48 +000042 return new (Mem) TemplateParameterList(TemplateLoc, LAngleLoc, Params,
43 NumParams, RAngleLoc);
Douglas Gregoraaba5e32009-02-04 19:02:06 +000044}
45
46//===----------------------------------------------------------------------===//
47// TemplateDecl Implementation
48//===----------------------------------------------------------------------===//
49
50TemplateDecl::~TemplateDecl() {
51}
52
53//===----------------------------------------------------------------------===//
54// FunctionTemplateDecl Implementation
55//===----------------------------------------------------------------------===//
56
57FunctionTemplateDecl *FunctionTemplateDecl::Create(ASTContext &C,
58 DeclContext *DC,
59 SourceLocation L,
60 DeclarationName Name,
61 TemplateParameterList *Params,
62 NamedDecl *Decl) {
63 return new (C) FunctionTemplateDecl(DC, L, Name, Params, Decl);
64}
65
66//===----------------------------------------------------------------------===//
67// ClassTemplateDecl Implementation
68//===----------------------------------------------------------------------===//
69
70ClassTemplateDecl *ClassTemplateDecl::Create(ASTContext &C,
71 DeclContext *DC,
72 SourceLocation L,
73 DeclarationName Name,
74 TemplateParameterList *Params,
75 NamedDecl *Decl) {
76 return new (C) ClassTemplateDecl(DC, L, Name, Params, Decl);
77}
78
79//===----------------------------------------------------------------------===//
80// TemplateTypeParm Allocation/Deallocation Method Implementations
81//===----------------------------------------------------------------------===//
82
83TemplateTypeParmDecl *
84TemplateTypeParmDecl::Create(ASTContext &C, DeclContext *DC,
85 SourceLocation L, unsigned D, unsigned P,
86 IdentifierInfo *Id, bool Typename) {
Douglas Gregorfab9d672009-02-05 23:33:38 +000087 QualType Type = C.getTemplateTypeParmType(D, P, Id);
88 return new (C) TemplateTypeParmDecl(DC, L, Id, Typename, Type);
Douglas Gregoraaba5e32009-02-04 19:02:06 +000089}
90
91//===----------------------------------------------------------------------===//
92// NonTypeTemplateParmDecl Method Implementations
93//===----------------------------------------------------------------------===//
94
95NonTypeTemplateParmDecl *
96NonTypeTemplateParmDecl::Create(ASTContext &C, DeclContext *DC,
97 SourceLocation L, unsigned D, unsigned P,
98 IdentifierInfo *Id, QualType T,
99 SourceLocation TypeSpecStartLoc) {
100 return new (C) NonTypeTemplateParmDecl(DC, L, D, P, Id, T,
101 TypeSpecStartLoc);
102}
103
104//===----------------------------------------------------------------------===//
105// TemplateTemplateParmDecl Method Implementations
106//===----------------------------------------------------------------------===//
107
108TemplateTemplateParmDecl *
109TemplateTemplateParmDecl::Create(ASTContext &C, DeclContext *DC,
110 SourceLocation L, unsigned D, unsigned P,
111 IdentifierInfo *Id,
112 TemplateParameterList *Params) {
113 return new (C) TemplateTemplateParmDecl(DC, L, D, P, Id, Params);
114}
115