forked from OSchip/llvm-project
59 lines
2.4 KiB
C++
59 lines
2.4 KiB
C++
|
//===--- DeclCXX.cpp - C++ Declaration AST Node Implementation ------------===//
|
||
|
//
|
||
|
// The LLVM Compiler Infrastructure
|
||
|
//
|
||
|
// This file is distributed under the University of Illinois Open Source
|
||
|
// License. See LICENSE.TXT for details.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
//
|
||
|
// This file implements the C++ related Decl classes.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#include "clang/AST/DeclCXX.h"
|
||
|
#include "clang/AST/ASTContext.h"
|
||
|
using namespace clang;
|
||
|
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
// Decl Allocation/Deallocation Method Implementations
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
CXXFieldDecl *CXXFieldDecl::Create(ASTContext &C, CXXRecordDecl *RD,
|
||
|
SourceLocation L, IdentifierInfo *Id,
|
||
|
QualType T, Expr *BW) {
|
||
|
void *Mem = C.getAllocator().Allocate<CXXFieldDecl>();
|
||
|
return new (Mem) CXXFieldDecl(RD, L, Id, T, BW);
|
||
|
}
|
||
|
|
||
|
CXXRecordDecl *CXXRecordDecl::Create(ASTContext &C, Kind DK, DeclContext *DC,
|
||
|
SourceLocation L, IdentifierInfo *Id,
|
||
|
ScopedDecl *PrevDecl) {
|
||
|
void *Mem = C.getAllocator().Allocate<CXXRecordDecl>();
|
||
|
return new (Mem) CXXRecordDecl(DK, DC, L, Id, PrevDecl);
|
||
|
}
|
||
|
|
||
|
CXXMethodDecl *
|
||
|
CXXMethodDecl::Create(ASTContext &C, CXXRecordDecl *RD,
|
||
|
SourceLocation L, IdentifierInfo *Id,
|
||
|
QualType T, bool isStatic, bool isInline,
|
||
|
ScopedDecl *PrevDecl) {
|
||
|
void *Mem = C.getAllocator().Allocate<CXXMethodDecl>();
|
||
|
return new (Mem) CXXMethodDecl(RD, L, Id, T, isStatic, isInline, PrevDecl);
|
||
|
}
|
||
|
|
||
|
QualType CXXMethodDecl::getThisType(ASTContext &C) const {
|
||
|
assert(isInstance() && "No 'this' for static methods!");
|
||
|
QualType ClassTy = C.getTagDeclType(cast<CXXRecordDecl>(getParent()));
|
||
|
QualType ThisTy = C.getPointerType(ClassTy);
|
||
|
ThisTy.addConst();
|
||
|
return ThisTy;
|
||
|
}
|
||
|
|
||
|
CXXClassVarDecl *CXXClassVarDecl::Create(ASTContext &C, CXXRecordDecl *RD,
|
||
|
SourceLocation L, IdentifierInfo *Id,
|
||
|
QualType T, ScopedDecl *PrevDecl) {
|
||
|
void *Mem = C.getAllocator().Allocate<CXXClassVarDecl>();
|
||
|
return new (Mem) CXXClassVarDecl(RD, L, Id, T, PrevDecl);
|
||
|
}
|