
I'm expecting this portion of the AST to grow and change, and I'd like to be able to do that with minimal recompilation. If this proves unnecessary when access control is fully-implemented, I'll fold the classes back into DeclCXX.h. llvm-svn: 98249
40 lines
1.3 KiB
C++
40 lines
1.3 KiB
C++
//===--- DeclFriend.cpp - C++ Friend 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 AST classes related to C++ friend
|
|
// declarations.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "clang/AST/DeclFriend.h"
|
|
#include "clang/AST/DeclTemplate.h"
|
|
using namespace clang;
|
|
|
|
FriendDecl *FriendDecl::Create(ASTContext &C, DeclContext *DC,
|
|
SourceLocation L,
|
|
FriendUnion Friend,
|
|
SourceLocation FriendL) {
|
|
#ifndef NDEBUG
|
|
if (Friend.is<NamedDecl*>()) {
|
|
NamedDecl *D = Friend.get<NamedDecl*>();
|
|
assert(isa<FunctionDecl>(D) ||
|
|
isa<CXXRecordDecl>(D) ||
|
|
isa<FunctionTemplateDecl>(D) ||
|
|
isa<ClassTemplateDecl>(D));
|
|
|
|
// As a temporary hack, we permit template instantiation to point
|
|
// to the original declaration when instantiating members.
|
|
assert(D->getFriendObjectKind() ||
|
|
(cast<CXXRecordDecl>(DC)->getTemplateSpecializationKind()));
|
|
}
|
|
#endif
|
|
|
|
return new (C) FriendDecl(DC, L, Friend, FriendL);
|
|
}
|