@@ -180,6 +180,8 @@ struct APIRecord {
180
180
RK_CXXInstanceMethod,
181
181
RK_CXXConstructorMethod,
182
182
RK_CXXDestructorMethod,
183
+ RK_CXXMethodTemplate,
184
+ RK_CXXMethodTemplateSpecialization,
183
185
RK_ObjCInstanceProperty,
184
186
RK_ObjCClassProperty,
185
187
RK_ObjCIvar,
@@ -623,6 +625,42 @@ struct CXXInstanceMethodRecord : CXXMethodRecord {
623
625
virtual void anchor ();
624
626
};
625
627
628
+ struct CXXMethodTemplateRecord : CXXMethodRecord {
629
+ Template Templ;
630
+
631
+ CXXMethodTemplateRecord (StringRef USR, StringRef Name, PresumedLoc Loc,
632
+ AvailabilitySet Availabilities,
633
+ const DocComment &Comment,
634
+ DeclarationFragments Declaration,
635
+ DeclarationFragments SubHeading,
636
+ FunctionSignature Signature, AccessControl Access,
637
+ Template Template, bool IsFromSystemHeader)
638
+ : CXXMethodRecord(RK_CXXMethodTemplate, USR, Name, Loc,
639
+ std::move (Availabilities), Comment, Declaration,
640
+ SubHeading, Signature, Access, IsFromSystemHeader),
641
+ Templ(Template) {}
642
+
643
+ static bool classof (const APIRecord *Record) {
644
+ return Record->getKind () == RK_CXXMethodTemplate;
645
+ }
646
+ };
647
+
648
+ struct CXXMethodTemplateSpecializationRecord : CXXMethodRecord {
649
+ CXXMethodTemplateSpecializationRecord (
650
+ StringRef USR, StringRef Name, PresumedLoc Loc,
651
+ AvailabilitySet Availabilities, const DocComment &Comment,
652
+ DeclarationFragments Declaration, DeclarationFragments SubHeading,
653
+ FunctionSignature Signature, AccessControl Access,
654
+ bool IsFromSystemHeader)
655
+ : CXXMethodRecord(RK_CXXMethodTemplateSpecialization, USR, Name, Loc,
656
+ std::move (Availabilities), Comment, Declaration,
657
+ SubHeading, Signature, Access, IsFromSystemHeader) {}
658
+
659
+ static bool classof (const APIRecord *Record) {
660
+ return Record->getKind () == RK_CXXMethodTemplateSpecialization;
661
+ }
662
+ };
663
+
626
664
// / This holds information associated with Objective-C properties.
627
665
struct ObjCPropertyRecord : APIRecord {
628
666
// / The attributes associated with an Objective-C property.
@@ -794,6 +832,8 @@ struct SymbolReference {
794
832
: Name(Name), USR(USR), Source(Source) {}
795
833
SymbolReference (const APIRecord &Record)
796
834
: Name(Record.Name), USR(Record.USR) {}
835
+ SymbolReference (const APIRecord *Record)
836
+ : Name(Record->Name), USR(Record->USR) {}
797
837
798
838
// / Determine if this SymbolReference is empty.
799
839
// /
@@ -1058,10 +1098,21 @@ template <>
1058
1098
struct has_function_signature <ObjCClassMethodRecord> : public std::true_type {};
1059
1099
template <>
1060
1100
struct has_function_signature <CXXMethodRecord> : public std::true_type {};
1101
+ template <>
1102
+ struct has_function_signature <CXXMethodTemplateRecord> : public std::true_type {
1103
+ };
1104
+ template <>
1105
+ struct has_function_signature <CXXMethodTemplateSpecializationRecord>
1106
+ : public std::true_type {};
1061
1107
1062
1108
template <typename RecordTy> struct has_access : public std ::false_type {};
1063
1109
template <> struct has_access <CXXMethodRecord> : public std::true_type {};
1064
1110
template <> struct has_access <CXXFieldRecord> : public std::true_type {};
1111
+ template <>
1112
+ struct has_access <CXXMethodTemplateRecord> : public std::true_type {};
1113
+ template <>
1114
+ struct has_access <CXXMethodTemplateSpecializationRecord>
1115
+ : public std::true_type {};
1065
1116
1066
1117
template <typename RecordTy> struct has_template : public std ::false_type {};
1067
1118
template <> struct has_template <ClassTemplateRecord> : public std::true_type {};
@@ -1074,6 +1125,8 @@ struct has_template<GlobalVariableTemplateRecord> : public std::true_type {};
1074
1125
template <>
1075
1126
struct has_template <GlobalVariableTemplatePartialSpecializationRecord>
1076
1127
: public std::true_type {};
1128
+ template <>
1129
+ struct has_template <CXXMethodTemplateRecord> : public std::true_type {};
1077
1130
1078
1131
template <>
1079
1132
struct has_template <GlobalFunctionTemplateRecord> : public std::true_type {};
@@ -1253,6 +1306,20 @@ class APISet {
1253
1306
FunctionSignature Signature, bool IsConstructor, AccessControl Access,
1254
1307
bool IsFromSystemHeader);
1255
1308
1309
+ CXXMethodTemplateRecord *addCXXMethodTemplate (
1310
+ APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1311
+ AvailabilitySet Availability, const DocComment &Comment,
1312
+ DeclarationFragments Declaration, DeclarationFragments SubHeading,
1313
+ FunctionSignature Signature, AccessControl Access, Template Template,
1314
+ bool IsFromSystemHeader);
1315
+
1316
+ CXXMethodTemplateSpecializationRecord *addCXXMethodTemplateSpec (
1317
+ APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1318
+ AvailabilitySet Availability, const DocComment &Comment,
1319
+ DeclarationFragments Declaration, DeclarationFragments SubHeading,
1320
+ FunctionSignature Signature, AccessControl Access,
1321
+ bool IsFromSystemHeader);
1322
+
1256
1323
ConceptRecord *addConcept (StringRef Name, StringRef USR, PresumedLoc Loc,
1257
1324
AvailabilitySet Availability,
1258
1325
const DocComment &Comment,
@@ -1408,6 +1475,13 @@ class APISet {
1408
1475
const RecordMap<EnumRecord> &getEnums () const { return Enums; }
1409
1476
const RecordMap<StructRecord> &getStructs () const { return Structs; }
1410
1477
const RecordMap<CXXClassRecord> &getCXXClasses () const { return CXXClasses; }
1478
+ const RecordMap<CXXMethodTemplateRecord> &getCXXMethodTemplates () const {
1479
+ return CXXMethodTemplates;
1480
+ }
1481
+ const RecordMap<CXXMethodTemplateSpecializationRecord> &
1482
+ getCXXMethodTemplateSpecializations () const {
1483
+ return CXXMethodTemplateSpecializations;
1484
+ }
1411
1485
const RecordMap<ConceptRecord> &getConcepts () const { return Concepts; }
1412
1486
const RecordMap<ClassTemplateRecord> &getClassTemplates () const {
1413
1487
return ClassTemplates;
@@ -1487,6 +1561,9 @@ class APISet {
1487
1561
RecordMap<EnumRecord> Enums;
1488
1562
RecordMap<StructRecord> Structs;
1489
1563
RecordMap<CXXClassRecord> CXXClasses;
1564
+ RecordMap<CXXMethodTemplateRecord> CXXMethodTemplates;
1565
+ RecordMap<CXXMethodTemplateSpecializationRecord>
1566
+ CXXMethodTemplateSpecializations;
1490
1567
RecordMap<ClassTemplateRecord> ClassTemplates;
1491
1568
RecordMap<ClassTemplateSpecializationRecord> ClassTemplateSpecializations;
1492
1569
RecordMap<ClassTemplatePartialSpecializationRecord>
0 commit comments