diff --git a/clang/include/clang/AST/ASTConcept.h b/clang/include/clang/AST/ASTConcept.h index 832918785434d..d40d3636287e7 100644 --- a/clang/include/clang/AST/ASTConcept.h +++ b/clang/include/clang/AST/ASTConcept.h @@ -14,16 +14,21 @@ #ifndef LLVM_CLANG_AST_ASTCONCEPT_H #define LLVM_CLANG_AST_ASTCONCEPT_H -#include "clang/AST/Decl.h" -#include "clang/AST/Expr.h" -#include "clang/AST/PrettyPrinter.h" +#include "clang/AST/DeclarationName.h" +#include "clang/AST/NestedNameSpecifier.h" +#include "clang/AST/TemplateBase.h" #include "clang/Basic/SourceLocation.h" +#include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/PointerUnion.h" #include "llvm/ADT/SmallVector.h" #include namespace clang { + class ConceptDecl; +class Expr; +class NamedDecl; +struct PrintingPolicy; /// The result of a constraint satisfaction check, containing the necessary /// information to diagnose an unsatisfied constraint. @@ -157,10 +162,7 @@ class ConceptReference { Create(const ASTContext &C, NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc, DeclarationNameInfo ConceptNameInfo, NamedDecl *FoundDecl, ConceptDecl *NamedConcept, - const ASTTemplateArgumentListInfo *ArgsAsWritten) { - return new (C) ConceptReference(NNS, TemplateKWLoc, ConceptNameInfo, - FoundDecl, NamedConcept, ArgsAsWritten); - } + const ASTTemplateArgumentListInfo *ArgsAsWritten); const NestedNameSpecifierLoc &getNestedNameSpecifierLoc() const { return NestedNameSpec; diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h index 181b3362f7d64..8dc8bc262bbe3 100644 --- a/clang/include/clang/AST/ASTContext.h +++ b/clang/include/clang/AST/ASTContext.h @@ -21,7 +21,6 @@ #include "clang/AST/Decl.h" #include "clang/AST/DeclarationName.h" #include "clang/AST/ExternalASTSource.h" -#include "clang/AST/NestedNameSpecifier.h" #include "clang/AST/PrettyPrinter.h" #include "clang/AST/RawCommentList.h" #include "clang/AST/TemplateName.h" @@ -81,6 +80,7 @@ class MangleNumberingContext; class MemberSpecializationInfo; class Module; struct MSGuidDeclParts; +class NestedNameSpecifier; class ObjCCategoryDecl; class ObjCCategoryImplDecl; class ObjCContainerDecl; diff --git a/clang/lib/AST/ASTConcept.cpp b/clang/lib/AST/ASTConcept.cpp index 8f2d945721843..b3ec99448b3e1 100644 --- a/clang/lib/AST/ASTConcept.cpp +++ b/clang/lib/AST/ASTConcept.cpp @@ -13,10 +13,9 @@ #include "clang/AST/ASTConcept.h" #include "clang/AST/ASTContext.h" -#include "clang/AST/Decl.h" -#include "clang/AST/TemplateBase.h" +#include "clang/AST/PrettyPrinter.h" #include "llvm/ADT/ArrayRef.h" -#include "llvm/ADT/FoldingSet.h" + using namespace clang; namespace { @@ -89,3 +88,27 @@ void ConstraintSatisfaction::Profile( for (auto &Arg : TemplateArgs) Arg.Profile(ID, C); } + +ConceptReference * +ConceptReference::Create(const ASTContext &C, NestedNameSpecifierLoc NNS, + SourceLocation TemplateKWLoc, + DeclarationNameInfo ConceptNameInfo, + NamedDecl *FoundDecl, ConceptDecl *NamedConcept, + const ASTTemplateArgumentListInfo *ArgsAsWritten) { + return new (C) ConceptReference(NNS, TemplateKWLoc, ConceptNameInfo, + FoundDecl, NamedConcept, ArgsAsWritten); +} + +void ConceptReference::print(llvm::raw_ostream &OS, + const PrintingPolicy &Policy) const { + if (NestedNameSpec) + NestedNameSpec.getNestedNameSpecifier()->print(OS, Policy); + ConceptName.printName(OS, Policy); + if (hasExplicitTemplateArgs()) { + OS << "<"; + // FIXME: Find corresponding parameter for argument + for (auto &ArgLoc : ArgsAsWritten->arguments()) + ArgLoc.getArgument().print(Policy, OS, /*IncludeType*/ false); + OS << ">"; + } +} diff --git a/clang/lib/AST/DeclTemplate.cpp b/clang/lib/AST/DeclTemplate.cpp index 6490999ce7ea2..5e2742b4949f2 100644 --- a/clang/lib/AST/DeclTemplate.cpp +++ b/clang/lib/AST/DeclTemplate.cpp @@ -1552,20 +1552,6 @@ BuiltinTemplateDecl::BuiltinTemplateDecl(const ASTContext &C, DeclContext *DC, createBuiltinTemplateParameterList(C, DC, BTK)), BTK(BTK) {} -void ConceptReference::print(llvm::raw_ostream &OS, - const PrintingPolicy &Policy) const { - if (NestedNameSpec) - NestedNameSpec.getNestedNameSpecifier()->print(OS, Policy); - ConceptName.printName(OS, Policy); - if (hasExplicitTemplateArgs()) { - OS << "<"; - // FIXME: Find corresponding parameter for argument - for (auto &ArgLoc : ArgsAsWritten->arguments()) - ArgLoc.getArgument().print(Policy, OS, /*IncludeType*/ false); - OS << ">"; - } -} - TemplateParamObjectDecl *TemplateParamObjectDecl::Create(const ASTContext &C, QualType T, const APValue &V) {