@@ -157,6 +157,7 @@ struct APIRecord {
157
157
// / Discriminator for LLVM-style RTTI (dyn_cast<> et al.)
158
158
enum RecordKind {
159
159
RK_Unknown,
160
+ RK_Namespace,
160
161
RK_GlobalFunction,
161
162
RK_GlobalFunctionTemplate,
162
163
RK_GlobalFunctionTemplateSpecialization,
@@ -267,6 +268,20 @@ struct APIRecord {
267
268
virtual ~APIRecord () = 0 ;
268
269
};
269
270
271
+ struct NamespaceRecord : APIRecord {
272
+ NamespaceRecord (StringRef USR, StringRef Name, PresumedLoc Loc,
273
+ AvailabilitySet Availabilities, LinkageInfo Linkage,
274
+ const DocComment &Comment, DeclarationFragments Declaration,
275
+ DeclarationFragments SubHeading, bool IsFromSystemHeader)
276
+ : APIRecord(RK_Namespace, USR, Name, Loc, std::move(Availabilities),
277
+ Linkage, Comment, Declaration, SubHeading,
278
+ IsFromSystemHeader) {}
279
+
280
+ static bool classof (const APIRecord *Record) {
281
+ return Record->getKind () == RK_Namespace;
282
+ }
283
+ };
284
+
270
285
// / This holds information associated with global functions.
271
286
struct GlobalFunctionRecord : APIRecord {
272
287
FunctionSignature Signature;
@@ -900,15 +915,17 @@ struct CXXClassRecord : APIRecord {
900
915
SmallVector<std::unique_ptr<CXXFieldRecord>> Fields;
901
916
SmallVector<std::unique_ptr<CXXMethodRecord>> Methods;
902
917
SmallVector<SymbolReference> Bases;
918
+ AccessControl Access;
903
919
904
920
CXXClassRecord (StringRef USR, StringRef Name, PresumedLoc Loc,
905
921
AvailabilitySet Availabilities, const DocComment &Comment,
906
922
DeclarationFragments Declaration,
907
923
DeclarationFragments SubHeading, RecordKind Kind,
908
- bool IsFromSystemHeader)
924
+ AccessControl Access, bool IsFromSystemHeader)
909
925
: APIRecord(Kind, USR, Name, Loc, std::move(Availabilities),
910
926
LinkageInfo::none (), Comment, Declaration, SubHeading,
911
- IsFromSystemHeader) {}
927
+ IsFromSystemHeader),
928
+ Access(Access) {}
912
929
913
930
static bool classof (const APIRecord *Record) {
914
931
return (Record->getKind () == RK_CXXClass);
@@ -925,9 +942,9 @@ struct ClassTemplateRecord : CXXClassRecord {
925
942
AvailabilitySet Availabilities, const DocComment &Comment,
926
943
DeclarationFragments Declaration,
927
944
DeclarationFragments SubHeading, Template Template,
928
- bool IsFromSystemHeader)
945
+ AccessControl Access, bool IsFromSystemHeader)
929
946
: CXXClassRecord(USR, Name, Loc, std::move(Availabilities), Comment,
930
- Declaration, SubHeading, RK_ClassTemplate,
947
+ Declaration, SubHeading, RK_ClassTemplate, Access,
931
948
IsFromSystemHeader),
932
949
Templ (Template) {}
933
950
@@ -937,16 +954,14 @@ struct ClassTemplateRecord : CXXClassRecord {
937
954
};
938
955
939
956
struct ClassTemplateSpecializationRecord : CXXClassRecord {
940
- ClassTemplateSpecializationRecord (StringRef USR, StringRef Name,
941
- PresumedLoc Loc,
942
- AvailabilitySet Availabilities,
943
- const DocComment &Comment,
944
- DeclarationFragments Declaration,
945
- DeclarationFragments SubHeading,
946
- bool IsFromSystemHeader)
957
+ ClassTemplateSpecializationRecord (
958
+ StringRef USR, StringRef Name, PresumedLoc Loc,
959
+ AvailabilitySet Availabilities, const DocComment &Comment,
960
+ DeclarationFragments Declaration, DeclarationFragments SubHeading,
961
+ AccessControl Access, bool IsFromSystemHeader)
947
962
: CXXClassRecord(USR, Name, Loc, std::move(Availabilities), Comment,
948
963
Declaration, SubHeading, RK_ClassTemplateSpecialization,
949
- IsFromSystemHeader) {}
964
+ Access, IsFromSystemHeader) {}
950
965
951
966
static bool classof (const APIRecord *Record) {
952
967
return Record->getKind () == RK_ClassTemplateSpecialization;
@@ -959,10 +974,10 @@ struct ClassTemplatePartialSpecializationRecord : CXXClassRecord {
959
974
StringRef USR, StringRef Name, PresumedLoc Loc,
960
975
AvailabilitySet Availabilities, const DocComment &Comment,
961
976
DeclarationFragments Declaration, DeclarationFragments SubHeading,
962
- Template Template, bool IsFromSystemHeader)
977
+ Template Template, AccessControl Access, bool IsFromSystemHeader)
963
978
: CXXClassRecord(USR, Name, Loc, std::move(Availabilities), Comment,
964
979
Declaration, SubHeading, RK_ClassTemplateSpecialization,
965
- IsFromSystemHeader),
980
+ Access, IsFromSystemHeader),
966
981
Templ (Template) {}
967
982
968
983
static bool classof (const APIRecord *Record) {
@@ -1132,6 +1147,13 @@ struct has_access<CXXMethodTemplateSpecializationRecord>
1132
1147
: public std::true_type {};
1133
1148
template <>
1134
1149
struct has_access <CXXFieldTemplateRecord> : public std::true_type {};
1150
+ template <> struct has_access <CXXClassRecord> : public std::true_type {};
1151
+ template <> struct has_access <ClassTemplateRecord> : public std::true_type {};
1152
+ template <>
1153
+ struct has_access <ClassTemplateSpecializationRecord> : public std::true_type {};
1154
+ template <>
1155
+ struct has_access <ClassTemplatePartialSpecializationRecord>
1156
+ : public std::true_type {};
1135
1157
1136
1158
template <typename RecordTy> struct has_template : public std ::false_type {};
1137
1159
template <> struct has_template <ClassTemplateRecord> : public std::true_type {};
@@ -1161,6 +1183,13 @@ struct has_function_signature<GlobalFunctionTemplateSpecializationRecord>
1161
1183
// / APISet holds the set of API records collected from given inputs.
1162
1184
class APISet {
1163
1185
public:
1186
+ NamespaceRecord *addNamespace (APIRecord *Parent, StringRef Name,
1187
+ StringRef USR, PresumedLoc Loc,
1188
+ AvailabilitySet Availability,
1189
+ LinkageInfo Linkage, const DocComment &Comment,
1190
+ DeclarationFragments Declaration,
1191
+ DeclarationFragments SubHeading,
1192
+ bool IsFromSystemHeaderg);
1164
1193
// / Create and add a global variable record into the API set.
1165
1194
// /
1166
1195
// / Note: the caller is responsible for keeping the StringRef \p Name and
@@ -1278,31 +1307,33 @@ class APISet {
1278
1307
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1279
1308
AccessControl Access, Template Template, bool IsFromSystemHeader);
1280
1309
1281
- CXXClassRecord *
1282
- addCXXClass (StringRef Name, StringRef USR, PresumedLoc Loc,
1283
- AvailabilitySet Availability, const DocComment &Comment,
1284
- DeclarationFragments Declaration, DeclarationFragments SubHeading,
1285
- APIRecord::RecordKind Kind, bool IsFromSystemHeader);
1310
+ CXXClassRecord *addCXXClass (APIRecord *Parent, StringRef Name, StringRef USR,
1311
+ PresumedLoc Loc, AvailabilitySet Availability,
1312
+ const DocComment &Comment,
1313
+ DeclarationFragments Declaration,
1314
+ DeclarationFragments SubHeading,
1315
+ APIRecord::RecordKind Kind, AccessControl Access,
1316
+ bool IsFromSystemHeader);
1286
1317
1287
1318
ClassTemplateRecord *
1288
- addClassTemplate (StringRef Name , StringRef USR, PresumedLoc Loc ,
1289
- AvailabilitySet Availability, const DocComment &Comment ,
1290
- DeclarationFragments Declaration,
1319
+ addClassTemplate (APIRecord *Parent , StringRef Name, StringRef USR ,
1320
+ PresumedLoc Loc, AvailabilitySet Availability ,
1321
+ const DocComment &Comment, DeclarationFragments Declaration,
1291
1322
DeclarationFragments SubHeading, Template Template,
1292
- bool IsFromSystemHeader);
1323
+ AccessControl Access, bool IsFromSystemHeader);
1293
1324
1294
1325
ClassTemplateSpecializationRecord *addClassTemplateSpecialization (
1295
- StringRef Name, StringRef USR, PresumedLoc Loc,
1326
+ APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1296
1327
AvailabilitySet Availability, const DocComment &Comment,
1297
1328
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1298
- bool IsFromSystemHeader);
1329
+ AccessControl Access, bool IsFromSystemHeader);
1299
1330
1300
1331
ClassTemplatePartialSpecializationRecord *
1301
1332
addClassTemplatePartialSpecialization (
1302
- StringRef Name, StringRef USR, PresumedLoc Loc,
1333
+ APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1303
1334
AvailabilitySet Availability, const DocComment &Comment,
1304
1335
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1305
- Template Template, bool IsFromSystemHeader);
1336
+ Template Template, AccessControl Access, bool IsFromSystemHeader);
1306
1337
1307
1338
GlobalVariableTemplateSpecializationRecord *
1308
1339
addGlobalVariableTemplateSpecialization (
@@ -1477,6 +1508,7 @@ class APISet {
1477
1508
// / Get the language used by the APIs.
1478
1509
Language getLanguage () const { return Lang; }
1479
1510
1511
+ const RecordMap<NamespaceRecord> &getNamespaces () const { return Namespaces; }
1480
1512
const RecordMap<GlobalFunctionRecord> &getGlobalFunctions () const {
1481
1513
return GlobalFunctions;
1482
1514
}
@@ -1590,6 +1622,7 @@ class APISet {
1590
1622
const Language Lang;
1591
1623
1592
1624
llvm::DenseMap<StringRef, APIRecord *> USRBasedLookupTable;
1625
+ RecordMap<NamespaceRecord> Namespaces;
1593
1626
RecordMap<GlobalFunctionRecord> GlobalFunctions;
1594
1627
RecordMap<GlobalFunctionTemplateRecord> GlobalFunctionTemplates;
1595
1628
RecordMap<GlobalFunctionTemplateSpecializationRecord>
0 commit comments