@@ -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,
@@ -271,6 +272,20 @@ struct APIRecord {
271
272
virtual ~APIRecord () = 0 ;
272
273
};
273
274
275
+ struct NamespaceRecord : APIRecord {
276
+ NamespaceRecord (StringRef USR, StringRef Name, PresumedLoc Loc,
277
+ AvailabilitySet Availabilities, LinkageInfo Linkage,
278
+ const DocComment &Comment, DeclarationFragments Declaration,
279
+ DeclarationFragments SubHeading, bool IsFromSystemHeader)
280
+ : APIRecord(RK_Namespace, USR, Name, Loc, std::move(Availabilities),
281
+ Linkage, Comment, Declaration, SubHeading,
282
+ IsFromSystemHeader) {}
283
+
284
+ static bool classof (const APIRecord *Record) {
285
+ return Record->getKind () == RK_Namespace;
286
+ }
287
+ };
288
+
274
289
// / This holds information associated with global functions.
275
290
struct GlobalFunctionRecord : APIRecord {
276
291
FunctionSignature Signature;
@@ -904,15 +919,17 @@ struct CXXClassRecord : APIRecord {
904
919
SmallVector<std::unique_ptr<CXXFieldRecord>> Fields;
905
920
SmallVector<std::unique_ptr<CXXMethodRecord>> Methods;
906
921
SmallVector<SymbolReference> Bases;
922
+ AccessControl Access;
907
923
908
924
CXXClassRecord (StringRef USR, StringRef Name, PresumedLoc Loc,
909
925
AvailabilitySet Availabilities, const DocComment &Comment,
910
926
DeclarationFragments Declaration,
911
927
DeclarationFragments SubHeading, RecordKind Kind,
912
- bool IsFromSystemHeader)
928
+ AccessControl Access, bool IsFromSystemHeader)
913
929
: APIRecord(Kind, USR, Name, Loc, std::move(Availabilities),
914
930
LinkageInfo::none (), Comment, Declaration, SubHeading,
915
- IsFromSystemHeader) {}
931
+ IsFromSystemHeader),
932
+ Access(Access) {}
916
933
917
934
static bool classof (const APIRecord *Record) {
918
935
return (Record->getKind () == RK_CXXClass);
@@ -929,9 +946,9 @@ struct ClassTemplateRecord : CXXClassRecord {
929
946
AvailabilitySet Availabilities, const DocComment &Comment,
930
947
DeclarationFragments Declaration,
931
948
DeclarationFragments SubHeading, Template Template,
932
- bool IsFromSystemHeader)
949
+ AccessControl Access, bool IsFromSystemHeader)
933
950
: CXXClassRecord(USR, Name, Loc, std::move(Availabilities), Comment,
934
- Declaration, SubHeading, RK_ClassTemplate,
951
+ Declaration, SubHeading, RK_ClassTemplate, Access,
935
952
IsFromSystemHeader),
936
953
Templ (Template) {}
937
954
@@ -941,16 +958,14 @@ struct ClassTemplateRecord : CXXClassRecord {
941
958
};
942
959
943
960
struct ClassTemplateSpecializationRecord : CXXClassRecord {
944
- ClassTemplateSpecializationRecord (StringRef USR, StringRef Name,
945
- PresumedLoc Loc,
946
- AvailabilitySet Availabilities,
947
- const DocComment &Comment,
948
- DeclarationFragments Declaration,
949
- DeclarationFragments SubHeading,
950
- bool IsFromSystemHeader)
961
+ ClassTemplateSpecializationRecord (
962
+ StringRef USR, StringRef Name, PresumedLoc Loc,
963
+ AvailabilitySet Availabilities, const DocComment &Comment,
964
+ DeclarationFragments Declaration, DeclarationFragments SubHeading,
965
+ AccessControl Access, bool IsFromSystemHeader)
951
966
: CXXClassRecord(USR, Name, Loc, std::move(Availabilities), Comment,
952
967
Declaration, SubHeading, RK_ClassTemplateSpecialization,
953
- IsFromSystemHeader) {}
968
+ Access, IsFromSystemHeader) {}
954
969
955
970
static bool classof (const APIRecord *Record) {
956
971
return Record->getKind () == RK_ClassTemplateSpecialization;
@@ -963,10 +978,10 @@ struct ClassTemplatePartialSpecializationRecord : CXXClassRecord {
963
978
StringRef USR, StringRef Name, PresumedLoc Loc,
964
979
AvailabilitySet Availabilities, const DocComment &Comment,
965
980
DeclarationFragments Declaration, DeclarationFragments SubHeading,
966
- Template Template, bool IsFromSystemHeader)
981
+ Template Template, AccessControl Access, bool IsFromSystemHeader)
967
982
: CXXClassRecord(USR, Name, Loc, std::move(Availabilities), Comment,
968
983
Declaration, SubHeading, RK_ClassTemplateSpecialization,
969
- IsFromSystemHeader),
984
+ Access, IsFromSystemHeader),
970
985
Templ (Template) {}
971
986
972
987
static bool classof (const APIRecord *Record) {
@@ -1138,6 +1153,13 @@ struct has_access<CXXMethodTemplateSpecializationRecord>
1138
1153
: public std::true_type {};
1139
1154
template <>
1140
1155
struct has_access <CXXFieldTemplateRecord> : public std::true_type {};
1156
+ template <> struct has_access <CXXClassRecord> : public std::true_type {};
1157
+ template <> struct has_access <ClassTemplateRecord> : public std::true_type {};
1158
+ template <>
1159
+ struct has_access <ClassTemplateSpecializationRecord> : public std::true_type {};
1160
+ template <>
1161
+ struct has_access <ClassTemplatePartialSpecializationRecord>
1162
+ : public std::true_type {};
1141
1163
1142
1164
template <typename RecordTy> struct has_template : public std ::false_type {};
1143
1165
template <> struct has_template <ClassTemplateRecord> : public std::true_type {};
@@ -1167,6 +1189,13 @@ struct has_function_signature<GlobalFunctionTemplateSpecializationRecord>
1167
1189
// / APISet holds the set of API records collected from given inputs.
1168
1190
class APISet {
1169
1191
public:
1192
+ NamespaceRecord *addNamespace (APIRecord *Parent, StringRef Name,
1193
+ StringRef USR, PresumedLoc Loc,
1194
+ AvailabilitySet Availability,
1195
+ LinkageInfo Linkage, const DocComment &Comment,
1196
+ DeclarationFragments Declaration,
1197
+ DeclarationFragments SubHeading,
1198
+ bool IsFromSystemHeaderg);
1170
1199
// / Create and add a global variable record into the API set.
1171
1200
// /
1172
1201
// / Note: the caller is responsible for keeping the StringRef \p Name and
@@ -1284,31 +1313,33 @@ class APISet {
1284
1313
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1285
1314
AccessControl Access, Template Template, bool IsFromSystemHeader);
1286
1315
1287
- CXXClassRecord *
1288
- addCXXClass (StringRef Name, StringRef USR, PresumedLoc Loc,
1289
- AvailabilitySet Availability, const DocComment &Comment,
1290
- DeclarationFragments Declaration, DeclarationFragments SubHeading,
1291
- APIRecord::RecordKind Kind, bool IsFromSystemHeader);
1316
+ CXXClassRecord *addCXXClass (APIRecord *Parent, StringRef Name, StringRef USR,
1317
+ PresumedLoc Loc, AvailabilitySet Availability,
1318
+ const DocComment &Comment,
1319
+ DeclarationFragments Declaration,
1320
+ DeclarationFragments SubHeading,
1321
+ APIRecord::RecordKind Kind, AccessControl Access,
1322
+ bool IsFromSystemHeader);
1292
1323
1293
1324
ClassTemplateRecord *
1294
- addClassTemplate (StringRef Name , StringRef USR, PresumedLoc Loc ,
1295
- AvailabilitySet Availability, const DocComment &Comment ,
1296
- DeclarationFragments Declaration,
1325
+ addClassTemplate (APIRecord *Parent , StringRef Name, StringRef USR ,
1326
+ PresumedLoc Loc, AvailabilitySet Availability ,
1327
+ const DocComment &Comment, DeclarationFragments Declaration,
1297
1328
DeclarationFragments SubHeading, Template Template,
1298
- bool IsFromSystemHeader);
1329
+ AccessControl Access, bool IsFromSystemHeader);
1299
1330
1300
1331
ClassTemplateSpecializationRecord *addClassTemplateSpecialization (
1301
- StringRef Name, StringRef USR, PresumedLoc Loc,
1332
+ APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1302
1333
AvailabilitySet Availability, const DocComment &Comment,
1303
1334
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1304
- bool IsFromSystemHeader);
1335
+ AccessControl Access, bool IsFromSystemHeader);
1305
1336
1306
1337
ClassTemplatePartialSpecializationRecord *
1307
1338
addClassTemplatePartialSpecialization (
1308
- StringRef Name, StringRef USR, PresumedLoc Loc,
1339
+ APIRecord *Parent, StringRef Name, StringRef USR, PresumedLoc Loc,
1309
1340
AvailabilitySet Availability, const DocComment &Comment,
1310
1341
DeclarationFragments Declaration, DeclarationFragments SubHeading,
1311
- Template Template, bool IsFromSystemHeader);
1342
+ Template Template, AccessControl Access, bool IsFromSystemHeader);
1312
1343
1313
1344
GlobalVariableTemplateSpecializationRecord *
1314
1345
addGlobalVariableTemplateSpecialization (
@@ -1483,6 +1514,7 @@ class APISet {
1483
1514
// / Get the language used by the APIs.
1484
1515
Language getLanguage () const { return Lang; }
1485
1516
1517
+ const RecordMap<NamespaceRecord> &getNamespaces () const { return Namespaces; }
1486
1518
const RecordMap<GlobalFunctionRecord> &getGlobalFunctions () const {
1487
1519
return GlobalFunctions;
1488
1520
}
@@ -1596,6 +1628,7 @@ class APISet {
1596
1628
const Language Lang;
1597
1629
1598
1630
llvm::DenseMap<StringRef, APIRecord *> USRBasedLookupTable;
1631
+ RecordMap<NamespaceRecord> Namespaces;
1599
1632
RecordMap<GlobalFunctionRecord> GlobalFunctions;
1600
1633
RecordMap<GlobalFunctionTemplateRecord> GlobalFunctionTemplates;
1601
1634
RecordMap<GlobalFunctionTemplateSpecializationRecord>
0 commit comments