forked from OSchip/llvm-project
[AST] Remove DeclCXX.h dep on ASTContext.h
Saves only 36 includes of ASTContext.h and related headers. There are two deps on ASTContext.h: - C++ method overrides iterator types (TinyPtrVector) - getting LangOptions For #1, duplicate the iterator type, which is TinyPtrVector<>::const_iterator. For #2, add an out-of-line accessor to get the language options. Getting the ASTContext from a Decl is already an out of line method that loops over the parent DeclContexts, so if it is ever performance critical, the proper fix is to pass the context (or LangOpts) into the predicate in question. Other changes are just header fixups.
This commit is contained in:
parent
2c31aa2de1
commit
b36c19bc4f
|
@ -465,6 +465,10 @@ public:
|
||||||
|
|
||||||
ASTContext &getASTContext() const LLVM_READONLY;
|
ASTContext &getASTContext() const LLVM_READONLY;
|
||||||
|
|
||||||
|
/// Helper to get the language options from the ASTContext.
|
||||||
|
/// Defined out of line to avoid depending on ASTContext.h.
|
||||||
|
const LangOptions &getLangOpts() const LLVM_READONLY;
|
||||||
|
|
||||||
void setAccess(AccessSpecifier AS) {
|
void setAccess(AccessSpecifier AS) {
|
||||||
Access = AS;
|
Access = AS;
|
||||||
assert(AccessDeclContextSanity());
|
assert(AccessDeclContextSanity());
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
#ifndef LLVM_CLANG_AST_DECLCXX_H
|
#ifndef LLVM_CLANG_AST_DECLCXX_H
|
||||||
#define LLVM_CLANG_AST_DECLCXX_H
|
#define LLVM_CLANG_AST_DECLCXX_H
|
||||||
|
|
||||||
#include "clang/AST/ASTContext.h"
|
|
||||||
#include "clang/AST/ASTUnresolvedSet.h"
|
#include "clang/AST/ASTUnresolvedSet.h"
|
||||||
#include "clang/AST/Decl.h"
|
#include "clang/AST/Decl.h"
|
||||||
#include "clang/AST/DeclBase.h"
|
#include "clang/AST/DeclBase.h"
|
||||||
|
@ -40,6 +39,7 @@
|
||||||
#include "llvm/ADT/PointerIntPair.h"
|
#include "llvm/ADT/PointerIntPair.h"
|
||||||
#include "llvm/ADT/PointerUnion.h"
|
#include "llvm/ADT/PointerUnion.h"
|
||||||
#include "llvm/ADT/STLExtras.h"
|
#include "llvm/ADT/STLExtras.h"
|
||||||
|
#include "llvm/ADT/TinyPtrVector.h"
|
||||||
#include "llvm/ADT/iterator_range.h"
|
#include "llvm/ADT/iterator_range.h"
|
||||||
#include "llvm/Support/Casting.h"
|
#include "llvm/Support/Casting.h"
|
||||||
#include "llvm/Support/Compiler.h"
|
#include "llvm/Support/Compiler.h"
|
||||||
|
@ -53,6 +53,7 @@
|
||||||
|
|
||||||
namespace clang {
|
namespace clang {
|
||||||
|
|
||||||
|
class ASTContext;
|
||||||
class ClassTemplateDecl;
|
class ClassTemplateDecl;
|
||||||
class ConstructorUsingShadowDecl;
|
class ConstructorUsingShadowDecl;
|
||||||
class CXXBasePath;
|
class CXXBasePath;
|
||||||
|
@ -1166,7 +1167,7 @@ public:
|
||||||
bool defaultedDefaultConstructorIsConstexpr() const {
|
bool defaultedDefaultConstructorIsConstexpr() const {
|
||||||
return data().DefaultedDefaultConstructorIsConstexpr &&
|
return data().DefaultedDefaultConstructorIsConstexpr &&
|
||||||
(!isUnion() || hasInClassInitializer() || !hasVariantMembers() ||
|
(!isUnion() || hasInClassInitializer() || !hasVariantMembers() ||
|
||||||
getASTContext().getLangOpts().CPlusPlus2a);
|
getLangOpts().CPlusPlus2a);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Determine whether this class has a constexpr default constructor.
|
/// Determine whether this class has a constexpr default constructor.
|
||||||
|
@ -1258,7 +1259,7 @@ public:
|
||||||
/// would be constexpr.
|
/// would be constexpr.
|
||||||
bool defaultedDestructorIsConstexpr() const {
|
bool defaultedDestructorIsConstexpr() const {
|
||||||
return data().DefaultedDestructorIsConstexpr &&
|
return data().DefaultedDestructorIsConstexpr &&
|
||||||
getASTContext().getLangOpts().CPlusPlus2a;
|
getLangOpts().CPlusPlus2a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Determine whether this class has a constexpr destructor.
|
/// Determine whether this class has a constexpr destructor.
|
||||||
|
@ -1355,10 +1356,10 @@ public:
|
||||||
///
|
///
|
||||||
/// Only in C++17 and beyond, are lambdas literal types.
|
/// Only in C++17 and beyond, are lambdas literal types.
|
||||||
bool isLiteral() const {
|
bool isLiteral() const {
|
||||||
ASTContext &Ctx = getASTContext();
|
const LangOptions &LangOpts = getLangOpts();
|
||||||
return (Ctx.getLangOpts().CPlusPlus2a ? hasConstexprDestructor()
|
return (LangOpts.CPlusPlus2a ? hasConstexprDestructor()
|
||||||
: hasTrivialDestructor()) &&
|
: hasTrivialDestructor()) &&
|
||||||
(!isLambda() || Ctx.getLangOpts().CPlusPlus17) &&
|
(!isLambda() || LangOpts.CPlusPlus17) &&
|
||||||
!hasNonLiteralTypeFieldsOrBases() &&
|
!hasNonLiteralTypeFieldsOrBases() &&
|
||||||
(isAggregate() || isLambda() ||
|
(isAggregate() || isLambda() ||
|
||||||
hasConstexprNonCopyMoveConstructor() ||
|
hasConstexprNonCopyMoveConstructor() ||
|
||||||
|
@ -2035,7 +2036,8 @@ public:
|
||||||
method_iterator end_overridden_methods() const;
|
method_iterator end_overridden_methods() const;
|
||||||
unsigned size_overridden_methods() const;
|
unsigned size_overridden_methods() const;
|
||||||
|
|
||||||
using overridden_method_range= ASTContext::overridden_method_range;
|
using overridden_method_range = llvm::iterator_range<
|
||||||
|
llvm::TinyPtrVector<const CXXMethodDecl *>::const_iterator>;
|
||||||
|
|
||||||
overridden_method_range overridden_methods() const;
|
overridden_method_range overridden_methods() const;
|
||||||
|
|
||||||
|
|
|
@ -150,9 +150,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
static KernelReferenceKind getDefaultKernelReference(const FunctionDecl *D) {
|
static KernelReferenceKind getDefaultKernelReference(const FunctionDecl *D) {
|
||||||
return D->getASTContext().getLangOpts().CUDAIsDevice
|
return D->getLangOpts().CUDAIsDevice ? KernelReferenceKind::Kernel
|
||||||
? KernelReferenceKind::Kernel
|
: KernelReferenceKind::Stub;
|
||||||
: KernelReferenceKind::Stub;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GlobalDecl getWithDecl(const Decl *D) {
|
GlobalDecl getWithDecl(const Decl *D) {
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#ifndef LLVM_CLANG_SERIALIZATION_ASTRECORDREADER_H
|
#ifndef LLVM_CLANG_SERIALIZATION_ASTRECORDREADER_H
|
||||||
#define LLVM_CLANG_SERIALIZATION_ASTRECORDREADER_H
|
#define LLVM_CLANG_SERIALIZATION_ASTRECORDREADER_H
|
||||||
|
|
||||||
|
#include "clang/AST/ASTContext.h"
|
||||||
#include "clang/AST/AbstractBasicReader.h"
|
#include "clang/AST/AbstractBasicReader.h"
|
||||||
#include "clang/Lex/Token.h"
|
#include "clang/Lex/Token.h"
|
||||||
#include "clang/Serialization/ASTReader.h"
|
#include "clang/Serialization/ASTReader.h"
|
||||||
|
|
|
@ -691,7 +691,7 @@ void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {
|
||||||
FD->doesThisDeclarationHaveABody())
|
FD->doesThisDeclarationHaveABody())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const LangOptions &LO = FD->getASTContext().getLangOpts();
|
const LangOptions &LO = FD->getLangOpts();
|
||||||
const bool DoubleSquareBracket = LO.CPlusPlus14 || LO.C2x;
|
const bool DoubleSquareBracket = LO.CPlusPlus14 || LO.C2x;
|
||||||
StringRef AttributeSpelling =
|
StringRef AttributeSpelling =
|
||||||
DoubleSquareBracket ? "[[deprecated]]" : "__attribute__((deprecated))";
|
DoubleSquareBracket ? "[[deprecated]]" : "__attribute__((deprecated))";
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "clang/AST/ComparisonCategories.h"
|
#include "clang/AST/ComparisonCategories.h"
|
||||||
|
#include "clang/AST/ASTContext.h"
|
||||||
#include "clang/AST/Decl.h"
|
#include "clang/AST/Decl.h"
|
||||||
#include "clang/AST/DeclCXX.h"
|
#include "clang/AST/DeclCXX.h"
|
||||||
#include "clang/AST/Type.h"
|
#include "clang/AST/Type.h"
|
||||||
|
|
|
@ -378,6 +378,12 @@ ASTContext &Decl::getASTContext() const {
|
||||||
return getTranslationUnitDecl()->getASTContext();
|
return getTranslationUnitDecl()->getASTContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Helper to get the language options from the ASTContext.
|
||||||
|
/// Defined out of line to avoid depending on ASTContext.h.
|
||||||
|
const LangOptions &Decl::getLangOpts() const {
|
||||||
|
return getASTContext().getLangOpts();
|
||||||
|
}
|
||||||
|
|
||||||
ASTMutationListener *Decl::getASTMutationListener() const {
|
ASTMutationListener *Decl::getASTMutationListener() const {
|
||||||
return getASTContext().getASTMutationListener();
|
return getASTContext().getASTMutationListener();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "clang/AST/ExprCXX.h"
|
#include "clang/AST/ExprCXX.h"
|
||||||
#include "clang/AST/OperationKinds.h"
|
#include "clang/AST/OperationKinds.h"
|
||||||
#include "clang/AST/ParentMap.h"
|
#include "clang/AST/ParentMap.h"
|
||||||
|
#include "clang/AST/PrettyPrinter.h"
|
||||||
#include "clang/AST/Stmt.h"
|
#include "clang/AST/Stmt.h"
|
||||||
#include "clang/AST/Type.h"
|
#include "clang/AST/Type.h"
|
||||||
#include "clang/Analysis/AnalysisDeclContext.h"
|
#include "clang/Analysis/AnalysisDeclContext.h"
|
||||||
|
@ -909,7 +910,7 @@ static void describeClass(raw_ostream &Out, const CXXRecordDecl *D,
|
||||||
Out << Prefix << '\'' << *D;
|
Out << Prefix << '\'' << *D;
|
||||||
if (const auto T = dyn_cast<ClassTemplateSpecializationDecl>(D))
|
if (const auto T = dyn_cast<ClassTemplateSpecializationDecl>(D))
|
||||||
describeTemplateParameters(Out, T->getTemplateArgs().asArray(),
|
describeTemplateParameters(Out, T->getTemplateArgs().asArray(),
|
||||||
D->getASTContext().getLangOpts(), "<", ">");
|
D->getLangOpts(), "<", ">");
|
||||||
|
|
||||||
Out << '\'';
|
Out << '\'';
|
||||||
}
|
}
|
||||||
|
@ -975,8 +976,8 @@ static bool describeCodeDecl(raw_ostream &Out, const Decl *D,
|
||||||
if (const auto FD = dyn_cast<FunctionDecl>(D))
|
if (const auto FD = dyn_cast<FunctionDecl>(D))
|
||||||
if (const TemplateArgumentList *TAList =
|
if (const TemplateArgumentList *TAList =
|
||||||
FD->getTemplateSpecializationArgs())
|
FD->getTemplateSpecializationArgs())
|
||||||
describeTemplateParameters(Out, TAList->asArray(),
|
describeTemplateParameters(Out, TAList->asArray(), FD->getLangOpts(), "<",
|
||||||
FD->getASTContext().getLangOpts(), "<", ">");
|
">");
|
||||||
|
|
||||||
Out << '\'';
|
Out << '\'';
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "clang/Analysis/ProgramPoint.h"
|
#include "clang/Analysis/ProgramPoint.h"
|
||||||
|
#include "clang/AST/ASTContext.h"
|
||||||
#include "clang/Basic/JsonSupport.h"
|
#include "clang/Basic/JsonSupport.h"
|
||||||
|
|
||||||
using namespace clang;
|
using namespace clang;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "clang/AST/DeclCXX.h"
|
#include "clang/AST/DeclCXX.h"
|
||||||
#include "clang/AST/Expr.h"
|
#include "clang/AST/Expr.h"
|
||||||
#include "clang/AST/ExternalASTSource.h"
|
#include "clang/AST/ExternalASTSource.h"
|
||||||
|
#include "clang/AST/PrettyPrinter.h"
|
||||||
#include "clang/AST/Type.h"
|
#include "clang/AST/Type.h"
|
||||||
#include "clang/AST/TypeOrdering.h"
|
#include "clang/AST/TypeOrdering.h"
|
||||||
#include "clang/Basic/CodeGenOptions.h"
|
#include "clang/Basic/CodeGenOptions.h"
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "clang/Tooling/Core/Lookup.h"
|
#include "clang/Tooling/Core/Lookup.h"
|
||||||
|
#include "clang/AST/ASTContext.h"
|
||||||
#include "clang/AST/Decl.h"
|
#include "clang/AST/Decl.h"
|
||||||
#include "clang/AST/DeclCXX.h"
|
#include "clang/AST/DeclCXX.h"
|
||||||
#include "clang/AST/DeclarationName.h"
|
#include "clang/AST/DeclarationName.h"
|
||||||
|
|
Loading…
Reference in New Issue