diff options
Diffstat (limited to 'lib/AST/Decl.cpp')
-rw-r--r-- | lib/AST/Decl.cpp | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index dcefaa915b..be8cbe7344 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -14,6 +14,7 @@ #include "clang/AST/Decl.h" #include "clang/AST/ASTContext.h" #include "clang/AST/Stmt.h" +#include "clang/AST/Expr.h" #include "clang/Basic/IdentifierTable.h" using namespace clang; @@ -48,15 +49,6 @@ ImplicitParamDecl *ImplicitParamDecl::Create(ASTContext &C, DeclContext *DC, return new (Mem) ImplicitParamDecl(ImplicitParam, DC, L, Id, T, PrevDecl); } -VarDecl *VarDecl::Create(ASTContext &C, DeclContext *DC, - SourceLocation L, - IdentifierInfo *Id, QualType T, - StorageClass S, ScopedDecl *PrevDecl, - SourceLocation TypeSpecStartLoc) { - void *Mem = C.getAllocator().Allocate<VarDecl>(); - return new (Mem) VarDecl(Var, DC, L, Id, T, S, PrevDecl, TypeSpecStartLoc); -} - ParmVarDecl *ParmVarDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L, IdentifierInfo *Id, QualType T, StorageClass S, @@ -166,6 +158,28 @@ ScopedDecl::~ScopedDecl() { } //===----------------------------------------------------------------------===// +// VarDecl Implementation +//===----------------------------------------------------------------------===// + +VarDecl *VarDecl::Create(ASTContext &C, DeclContext *DC, + SourceLocation L, + IdentifierInfo *Id, QualType T, + StorageClass S, ScopedDecl *PrevDecl, + SourceLocation TypeSpecStartLoc) { + void *Mem = C.getAllocator().Allocate<VarDecl>(); + return new (Mem) VarDecl(Var, DC, L, Id, T, S, PrevDecl, TypeSpecStartLoc); +} + +void VarDecl::Destroy(ASTContext& C) { + this->~VarDecl(); + C.getAllocator().Deallocate((void *)this); +} + +VarDecl::~VarDecl() { + delete getInit(); +} + +//===----------------------------------------------------------------------===// // FunctionDecl Implementation //===----------------------------------------------------------------------===// |