diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2023-12-18 20:30:12 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2024-04-06 20:11:55 +0000 | 
| commit | 5f757f3ff9144b609b3c433dfd370cc6bdc191ad (patch) | |
| tree | 1b4e980b866cd26a00af34c0a653eb640bd09caf /contrib/llvm-project/clang/lib/ExtractAPI/API.cpp | |
| parent | 3e1c8a35f741a5d114d0ba670b15191355711fe9 (diff) | |
| parent | 312c0ed19cc5276a17bacf2120097bec4515b0f1 (diff) | |
Diffstat (limited to 'contrib/llvm-project/clang/lib/ExtractAPI/API.cpp')
| -rw-r--r-- | contrib/llvm-project/clang/lib/ExtractAPI/API.cpp | 275 | 
1 files changed, 271 insertions, 4 deletions
| diff --git a/contrib/llvm-project/clang/lib/ExtractAPI/API.cpp b/contrib/llvm-project/clang/lib/ExtractAPI/API.cpp index 10e79b37de73..71c655ba5b5b 100644 --- a/contrib/llvm-project/clang/lib/ExtractAPI/API.cpp +++ b/contrib/llvm-project/clang/lib/ExtractAPI/API.cpp @@ -17,7 +17,6 @@  #include "clang/AST/CommentLexer.h"  #include "clang/AST/RawCommentList.h"  #include "clang/Index/USRGeneration.h" -#include "llvm/ADT/STLFunctionalExtras.h"  #include "llvm/ADT/StringRef.h"  #include <memory> @@ -44,6 +43,22 @@ RecordTy *addTopLevelRecord(DenseMap<StringRef, APIRecord *> &USRLookupTable,  } // namespace +NamespaceRecord * +APISet::addNamespace(APIRecord *Parent, StringRef Name, StringRef USR, +                     PresumedLoc Loc, AvailabilitySet Availability, +                     LinkageInfo Linkage, const DocComment &Comment, +                     DeclarationFragments Declaration, +                     DeclarationFragments SubHeading, bool IsFromSystemHeader) { +  auto *Record = addTopLevelRecord( +      USRBasedLookupTable, Namespaces, USR, Name, Loc, std::move(Availability), +      Linkage, Comment, Declaration, SubHeading, IsFromSystemHeader); + +  if (Parent) +    Record->ParentInformation = APIRecord::HierarchyInformation( +        Parent->USR, Parent->Name, Parent->getKind(), Parent); +  return Record; +} +  GlobalVariableRecord *  APISet::addGlobalVar(StringRef Name, StringRef USR, PresumedLoc Loc,                       AvailabilitySet Availabilities, LinkageInfo Linkage, @@ -54,6 +69,18 @@ APISet::addGlobalVar(StringRef Name, StringRef USR, PresumedLoc Loc,                             Fragments, SubHeading, IsFromSystemHeader);  } +GlobalVariableTemplateRecord *APISet::addGlobalVariableTemplate( +    StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, LinkageInfo Linkage, +    const DocComment &Comment, DeclarationFragments Declaration, +    DeclarationFragments SubHeading, Template Template, +    bool IsFromSystemHeader) { +  return addTopLevelRecord(USRBasedLookupTable, GlobalVariableTemplates, USR, +                           Name, Loc, std::move(Availability), Linkage, Comment, +                           Declaration, SubHeading, Template, +                           IsFromSystemHeader); +} +  GlobalFunctionRecord *APISet::addGlobalFunction(      StringRef Name, StringRef USR, PresumedLoc Loc,      AvailabilitySet Availabilities, LinkageInfo Linkage, @@ -66,6 +93,31 @@ GlobalFunctionRecord *APISet::addGlobalFunction(                             IsFromSystemHeader);  } +GlobalFunctionTemplateRecord *APISet::addGlobalFunctionTemplate( +    StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, LinkageInfo Linkage, +    const DocComment &Comment, DeclarationFragments Declaration, +    DeclarationFragments SubHeading, FunctionSignature Signature, +    Template Template, bool IsFromSystemHeader) { +  return addTopLevelRecord(USRBasedLookupTable, GlobalFunctionTemplates, USR, +                           Name, Loc, std::move(Availability), Linkage, Comment, +                           Declaration, SubHeading, Signature, Template, +                           IsFromSystemHeader); +} + +GlobalFunctionTemplateSpecializationRecord * +APISet::addGlobalFunctionTemplateSpecialization( +    StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, LinkageInfo Linkage, +    const DocComment &Comment, DeclarationFragments Declaration, +    DeclarationFragments SubHeading, FunctionSignature Signature, +    bool IsFromSystemHeader) { +  return addTopLevelRecord( +      USRBasedLookupTable, GlobalFunctionTemplateSpecializations, USR, Name, +      Loc, std::move(Availability), Linkage, Comment, Declaration, SubHeading, +      Signature, IsFromSystemHeader); +} +  EnumConstantRecord *APISet::addEnumConstant(EnumRecord *Enum, StringRef Name,                                              StringRef USR, PresumedLoc Loc,                                              AvailabilitySet Availabilities, @@ -120,19 +172,227 @@ StructRecord *APISet::addStruct(StringRef Name, StringRef USR, PresumedLoc Loc,                             SubHeading, IsFromSystemHeader);  } +StaticFieldRecord * +APISet::addStaticField(StringRef Name, StringRef USR, PresumedLoc Loc, +                       AvailabilitySet Availabilities, LinkageInfo Linkage, +                       const DocComment &Comment, +                       DeclarationFragments Declaration, +                       DeclarationFragments SubHeading, SymbolReference Context, +                       AccessControl Access, bool IsFromSystemHeader) { +  return addTopLevelRecord(USRBasedLookupTable, StaticFields, USR, Name, Loc, +                           std::move(Availabilities), Linkage, Comment, +                           Declaration, SubHeading, Context, Access, +                           IsFromSystemHeader); +} + +CXXFieldRecord * +APISet::addCXXField(APIRecord *CXXClass, StringRef Name, StringRef USR, +                    PresumedLoc Loc, AvailabilitySet Availabilities, +                    const DocComment &Comment, DeclarationFragments Declaration, +                    DeclarationFragments SubHeading, AccessControl Access, +                    bool IsFromSystemHeader) { +  auto *Record = addTopLevelRecord( +      USRBasedLookupTable, CXXFields, USR, Name, Loc, std::move(Availabilities), +      Comment, Declaration, SubHeading, Access, IsFromSystemHeader); +  Record->ParentInformation = APIRecord::HierarchyInformation( +      CXXClass->USR, CXXClass->Name, CXXClass->getKind(), CXXClass); +  return Record; +} + +CXXFieldTemplateRecord *APISet::addCXXFieldTemplate( +    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, const DocComment &Comment, +    DeclarationFragments Declaration, DeclarationFragments SubHeading, +    AccessControl Access, Template Template, bool IsFromSystemHeader) { +  auto *Record = +      addTopLevelRecord(USRBasedLookupTable, CXXFieldTemplates, USR, Name, Loc, +                        std::move(Availability), Comment, Declaration, +                        SubHeading, Access, Template, IsFromSystemHeader); +  Record->ParentInformation = APIRecord::HierarchyInformation( +      Parent->USR, Parent->Name, Parent->getKind(), Parent); + +  return Record; +} + +CXXClassRecord * +APISet::addCXXClass(APIRecord *Parent, StringRef Name, StringRef USR, +                    PresumedLoc Loc, AvailabilitySet Availabilities, +                    const DocComment &Comment, DeclarationFragments Declaration, +                    DeclarationFragments SubHeading, APIRecord::RecordKind Kind, +                    AccessControl Access, bool IsFromSystemHeader) { +  auto *Record = +      addTopLevelRecord(USRBasedLookupTable, CXXClasses, USR, Name, Loc, +                        std::move(Availabilities), Comment, Declaration, +                        SubHeading, Kind, Access, IsFromSystemHeader); +  if (Parent) +    Record->ParentInformation = APIRecord::HierarchyInformation( +        Parent->USR, Parent->Name, Parent->getKind(), Parent); +  return Record; +} + +ClassTemplateRecord *APISet::addClassTemplate( +    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, const DocComment &Comment, +    DeclarationFragments Declaration, DeclarationFragments SubHeading, +    Template Template, AccessControl Access, bool IsFromSystemHeader) { +  auto *Record = +      addTopLevelRecord(USRBasedLookupTable, ClassTemplates, USR, Name, Loc, +                        std::move(Availability), Comment, Declaration, +                        SubHeading, Template, Access, IsFromSystemHeader); +  if (Parent) +    Record->ParentInformation = APIRecord::HierarchyInformation( +        Parent->USR, Parent->Name, Parent->getKind(), Parent); +  return Record; +} + +ClassTemplateSpecializationRecord *APISet::addClassTemplateSpecialization( +    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, const DocComment &Comment, +    DeclarationFragments Declaration, DeclarationFragments SubHeading, +    AccessControl Access, bool IsFromSystemHeader) { +  auto *Record = +      addTopLevelRecord(USRBasedLookupTable, ClassTemplateSpecializations, USR, +                        Name, Loc, std::move(Availability), Comment, +                        Declaration, SubHeading, Access, IsFromSystemHeader); +  if (Parent) +    Record->ParentInformation = APIRecord::HierarchyInformation( +        Parent->USR, Parent->Name, Parent->getKind(), Parent); +  return Record; +} + +ClassTemplatePartialSpecializationRecord * +APISet::addClassTemplatePartialSpecialization( +    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, const DocComment &Comment, +    DeclarationFragments Declaration, DeclarationFragments SubHeading, +    Template Template, AccessControl Access, bool IsFromSystemHeader) { +  auto *Record = addTopLevelRecord( +      USRBasedLookupTable, ClassTemplatePartialSpecializations, USR, Name, Loc, +      std::move(Availability), Comment, Declaration, SubHeading, Template, +      Access, IsFromSystemHeader); +  if (Parent) +    Record->ParentInformation = APIRecord::HierarchyInformation( +        Parent->USR, Parent->Name, Parent->getKind(), Parent); +  return Record; +} + +GlobalVariableTemplateSpecializationRecord * +APISet::addGlobalVariableTemplateSpecialization( +    StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, LinkageInfo Linkage, +    const DocComment &Comment, DeclarationFragments Declaration, +    DeclarationFragments SubHeading, bool IsFromSystemHeader) { +  return addTopLevelRecord(USRBasedLookupTable, +                           GlobalVariableTemplateSpecializations, USR, Name, +                           Loc, std::move(Availability), Linkage, Comment, +                           Declaration, SubHeading, IsFromSystemHeader); +} + +GlobalVariableTemplatePartialSpecializationRecord * +APISet::addGlobalVariableTemplatePartialSpecialization( +    StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, LinkageInfo Linkage, +    const DocComment &Comment, DeclarationFragments Declaration, +    DeclarationFragments SubHeading, Template Template, +    bool IsFromSystemHeader) { +  return addTopLevelRecord( +      USRBasedLookupTable, GlobalVariableTemplatePartialSpecializations, USR, +      Name, Loc, std::move(Availability), Linkage, Comment, Declaration, +      SubHeading, Template, IsFromSystemHeader); +} + +ConceptRecord *APISet::addConcept(StringRef Name, StringRef USR, +                                  PresumedLoc Loc, AvailabilitySet Availability, +                                  const DocComment &Comment, +                                  DeclarationFragments Declaration, +                                  DeclarationFragments SubHeading, +                                  Template Template, bool IsFromSystemHeader) { +  return addTopLevelRecord(USRBasedLookupTable, Concepts, USR, Name, Loc, +                           std::move(Availability), Comment, Declaration, +                           SubHeading, Template, IsFromSystemHeader); +} + +CXXMethodRecord *APISet::addCXXInstanceMethod( +    APIRecord *CXXClassRecord, StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, const DocComment &Comment, +    DeclarationFragments Declaration, DeclarationFragments SubHeading, +    FunctionSignature Signature, AccessControl Access, +    bool IsFromSystemHeader) { +  CXXMethodRecord *Record = +      addTopLevelRecord(USRBasedLookupTable, CXXInstanceMethods, USR, Name, Loc, +                        std::move(Availability), Comment, Declaration, +                        SubHeading, Signature, Access, IsFromSystemHeader); + +  Record->ParentInformation = APIRecord::HierarchyInformation( +      CXXClassRecord->USR, CXXClassRecord->Name, CXXClassRecord->getKind(), +      CXXClassRecord); +  return Record; +} + +CXXMethodRecord *APISet::addCXXStaticMethod( +    APIRecord *CXXClassRecord, StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, const DocComment &Comment, +    DeclarationFragments Declaration, DeclarationFragments SubHeading, +    FunctionSignature Signature, AccessControl Access, +    bool IsFromSystemHeader) { +  CXXMethodRecord *Record = +      addTopLevelRecord(USRBasedLookupTable, CXXStaticMethods, USR, Name, Loc, +                        std::move(Availability), Comment, Declaration, +                        SubHeading, Signature, Access, IsFromSystemHeader); + +  Record->ParentInformation = APIRecord::HierarchyInformation( +      CXXClassRecord->USR, CXXClassRecord->Name, CXXClassRecord->getKind(), +      CXXClassRecord); +  return Record; +} + +CXXMethodTemplateRecord *APISet::addCXXMethodTemplate( +    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, const DocComment &Comment, +    DeclarationFragments Declaration, DeclarationFragments SubHeading, +    FunctionSignature Signature, AccessControl Access, Template Template, +    bool IsFromSystemHeader) { +  auto *Record = addTopLevelRecord(USRBasedLookupTable, CXXMethodTemplates, USR, +                                   Name, Loc, std::move(Availability), Comment, +                                   Declaration, SubHeading, Signature, Access, +                                   Template, IsFromSystemHeader); +  Record->ParentInformation = APIRecord::HierarchyInformation( +      Parent->USR, Parent->Name, Parent->getKind(), Parent); + +  return Record; +} + +CXXMethodTemplateSpecializationRecord *APISet::addCXXMethodTemplateSpec( +    APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc, +    AvailabilitySet Availability, const DocComment &Comment, +    DeclarationFragments Declaration, DeclarationFragments SubHeading, +    FunctionSignature Signature, AccessControl Access, +    bool IsFromSystemHeader) { + +  auto *Record = addTopLevelRecord( +      USRBasedLookupTable, CXXMethodTemplateSpecializations, USR, Name, Loc, +      std::move(Availability), Comment, Declaration, SubHeading, Signature, +      Access, IsFromSystemHeader); +  Record->ParentInformation = APIRecord::HierarchyInformation( +      Parent->USR, Parent->Name, Parent->getKind(), Parent); + +  return Record; +} +  ObjCCategoryRecord *APISet::addObjCCategory(      StringRef Name, StringRef USR, PresumedLoc Loc,      AvailabilitySet Availabilities, const DocComment &Comment,      DeclarationFragments Declaration, DeclarationFragments SubHeading, -    SymbolReference Interface, bool IsFromSystemHeader) { +    SymbolReference Interface, bool IsFromSystemHeader, +    bool IsFromExternalModule) {    // Create the category record.    auto *Record =        addTopLevelRecord(USRBasedLookupTable, ObjCCategories, USR, Name, Loc,                          std::move(Availabilities), Comment, Declaration,                          SubHeading, Interface, IsFromSystemHeader); -  // If this category is extending a known interface, associate it with the -  // ObjCInterfaceRecord. +  Record->IsFromExternalModule = IsFromExternalModule; +    auto It = ObjCInterfaces.find(Interface.USR);    if (It != ObjCInterfaces.end())      It->second->Categories.push_back(Record); @@ -282,6 +542,7 @@ APIRecord::~APIRecord() {}  ObjCContainerRecord::~ObjCContainerRecord() {}  ObjCMethodRecord::~ObjCMethodRecord() {}  ObjCPropertyRecord::~ObjCPropertyRecord() {} +CXXMethodRecord::~CXXMethodRecord() {}  void GlobalFunctionRecord::anchor() {}  void GlobalVariableRecord::anchor() {} @@ -289,6 +550,12 @@ void EnumConstantRecord::anchor() {}  void EnumRecord::anchor() {}  void StructFieldRecord::anchor() {}  void StructRecord::anchor() {} +void CXXFieldRecord::anchor() {} +void CXXClassRecord::anchor() {} +void CXXConstructorRecord::anchor() {} +void CXXDestructorRecord::anchor() {} +void CXXInstanceMethodRecord::anchor() {} +void CXXStaticMethodRecord::anchor() {}  void ObjCInstancePropertyRecord::anchor() {}  void ObjCClassPropertyRecord::anchor() {}  void ObjCInstanceVariableRecord::anchor() {} | 
