Skip to content

Commit 6d81781

Browse files
authored
[clang-doc] serialize IsBuiltIn and IsTemplate for types (#146149)
IsBuiltIn and IsTemplate were being emitted as their default values.
1 parent 71d4c9c commit 6d81781

File tree

8 files changed

+51
-14
lines changed

8 files changed

+51
-14
lines changed

clang-tools-extra/clang-doc/BitcodeReader.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,15 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
283283

284284
static llvm::Error parseRecord(const Record &R, unsigned ID,
285285
llvm::StringRef Blob, TypeInfo *I) {
286-
return llvm::Error::success();
286+
switch (ID) {
287+
case TYPE_IS_BUILTIN:
288+
return decodeRecord(R, I->IsBuiltIn, Blob);
289+
case TYPE_IS_TEMPLATE:
290+
return decodeRecord(R, I->IsTemplate, Blob);
291+
default:
292+
return llvm::createStringError(llvm::inconvertibleErrorCode(),
293+
"invalid field for TypeInfo");
294+
}
287295
}
288296

289297
static llvm::Error parseRecord(const Record &R, unsigned ID,
@@ -293,6 +301,10 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
293301
return decodeRecord(R, I->Name, Blob);
294302
case FIELD_DEFAULT_VALUE:
295303
return decodeRecord(R, I->DefaultValue, Blob);
304+
case FIELD_TYPE_IS_BUILTIN:
305+
return decodeRecord(R, I->IsBuiltIn, Blob);
306+
case FIELD_TYPE_IS_TEMPLATE:
307+
return decodeRecord(R, I->IsTemplate, Blob);
296308
default:
297309
return llvm::createStringError(llvm::inconvertibleErrorCode(),
298310
"invalid field for TypeInfo");
@@ -308,6 +320,10 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
308320
return decodeRecord(R, I->Access, Blob);
309321
case MEMBER_TYPE_IS_STATIC:
310322
return decodeRecord(R, I->IsStatic, Blob);
323+
case MEMBER_TYPE_IS_BUILTIN:
324+
return decodeRecord(R, I->IsBuiltIn, Blob);
325+
case MEMBER_TYPE_IS_TEMPLATE:
326+
return decodeRecord(R, I->IsTemplate, Blob);
311327
default:
312328
return llvm::createStringError(llvm::inconvertibleErrorCode(),
313329
"invalid field for MemberTypeInfo");

clang-tools-extra/clang-doc/BitcodeWriter.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,15 @@ static const llvm::IndexedMap<RecordIdDsc, RecordIdToIndexFunctor>
161161
{COMMENT_ARG, {"Arg", &genStringAbbrev}},
162162
{FIELD_TYPE_NAME, {"Name", &genStringAbbrev}},
163163
{FIELD_DEFAULT_VALUE, {"DefaultValue", &genStringAbbrev}},
164+
{FIELD_TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
165+
{FIELD_TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
164166
{MEMBER_TYPE_NAME, {"Name", &genStringAbbrev}},
165167
{MEMBER_TYPE_ACCESS, {"Access", &genIntAbbrev}},
166168
{MEMBER_TYPE_IS_STATIC, {"IsStatic", &genBoolAbbrev}},
169+
{MEMBER_TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
170+
{MEMBER_TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
171+
{TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
172+
{TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
167173
{NAMESPACE_USR, {"USR", &genSymbolIdAbbrev}},
168174
{NAMESPACE_NAME, {"Name", &genStringAbbrev}},
169175
{NAMESPACE_PATH, {"Path", &genStringAbbrev}},
@@ -239,12 +245,15 @@ static const std::vector<std::pair<BlockId, std::vector<RecordId>>>
239245
COMMENT_PARAMNAME, COMMENT_CLOSENAME, COMMENT_SELFCLOSING,
240246
COMMENT_EXPLICIT, COMMENT_ATTRKEY, COMMENT_ATTRVAL, COMMENT_ARG}},
241247
// Type Block
242-
{BI_TYPE_BLOCK_ID, {}},
248+
{BI_TYPE_BLOCK_ID, {TYPE_IS_BUILTIN, TYPE_IS_TEMPLATE}},
243249
// FieldType Block
244-
{BI_FIELD_TYPE_BLOCK_ID, {FIELD_TYPE_NAME, FIELD_DEFAULT_VALUE}},
250+
{BI_FIELD_TYPE_BLOCK_ID,
251+
{FIELD_TYPE_NAME, FIELD_DEFAULT_VALUE, FIELD_TYPE_IS_BUILTIN,
252+
FIELD_TYPE_IS_TEMPLATE}},
245253
// MemberType Block
246254
{BI_MEMBER_TYPE_BLOCK_ID,
247-
{MEMBER_TYPE_NAME, MEMBER_TYPE_ACCESS, MEMBER_TYPE_IS_STATIC}},
255+
{MEMBER_TYPE_NAME, MEMBER_TYPE_ACCESS, MEMBER_TYPE_IS_STATIC,
256+
MEMBER_TYPE_IS_BUILTIN, MEMBER_TYPE_IS_TEMPLATE}},
248257
// Enum Block
249258
{BI_ENUM_BLOCK_ID,
250259
{ENUM_USR, ENUM_NAME, ENUM_DEFLOCATION, ENUM_LOCATION, ENUM_SCOPED}},
@@ -470,6 +479,8 @@ void ClangDocBitcodeWriter::emitBlock(const Reference &R, FieldId Field) {
470479
void ClangDocBitcodeWriter::emitBlock(const TypeInfo &T) {
471480
StreamSubBlockGuard Block(Stream, BI_TYPE_BLOCK_ID);
472481
emitBlock(T.Type, FieldId::F_type);
482+
emitRecord(T.IsBuiltIn, TYPE_IS_BUILTIN);
483+
emitRecord(T.IsTemplate, TYPE_IS_TEMPLATE);
473484
}
474485

475486
void ClangDocBitcodeWriter::emitBlock(const TypedefInfo &T) {
@@ -491,6 +502,8 @@ void ClangDocBitcodeWriter::emitBlock(const FieldTypeInfo &T) {
491502
emitBlock(T.Type, FieldId::F_type);
492503
emitRecord(T.Name, FIELD_TYPE_NAME);
493504
emitRecord(T.DefaultValue, FIELD_DEFAULT_VALUE);
505+
emitRecord(T.IsBuiltIn, FIELD_TYPE_IS_BUILTIN);
506+
emitRecord(T.IsTemplate, FIELD_TYPE_IS_TEMPLATE);
494507
}
495508

496509
void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
@@ -499,6 +512,9 @@ void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
499512
emitRecord(T.Name, MEMBER_TYPE_NAME);
500513
emitRecord(T.Access, MEMBER_TYPE_ACCESS);
501514
emitRecord(T.IsStatic, MEMBER_TYPE_IS_STATIC);
515+
emitRecord(T.IsBuiltIn, MEMBER_TYPE_IS_BUILTIN);
516+
emitRecord(T.IsTemplate, MEMBER_TYPE_IS_TEMPLATE);
517+
emitRecord(T.IsTemplate, MEMBER_TYPE_IS_TEMPLATE);
502518
for (const auto &CI : T.Description)
503519
emitBlock(CI);
504520
}

clang-tools-extra/clang-doc/BitcodeWriter.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,17 @@ enum RecordId {
9696
COMMENT_ATTRKEY,
9797
COMMENT_ATTRVAL,
9898
COMMENT_ARG,
99+
TYPE_IS_BUILTIN,
100+
TYPE_IS_TEMPLATE,
99101
FIELD_TYPE_NAME,
100102
FIELD_DEFAULT_VALUE,
103+
FIELD_TYPE_IS_BUILTIN,
104+
FIELD_TYPE_IS_TEMPLATE,
101105
MEMBER_TYPE_NAME,
102106
MEMBER_TYPE_ACCESS,
103107
MEMBER_TYPE_IS_STATIC,
108+
MEMBER_TYPE_IS_BUILTIN,
109+
MEMBER_TYPE_IS_TEMPLATE,
104110
NAMESPACE_USR,
105111
NAMESPACE_NAME,
106112
NAMESPACE_PATH,

clang-tools-extra/test/clang-doc/json/class-template.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ template<typename T> struct MyClass {
1717
// CHECK-NEXT: ],
1818
// CHECK-NEXT: "ReturnType": {
1919
// CHECK-NEXT: "IsBuiltIn": false,
20-
// CHECK-NEXT: "IsTemplate": false,
20+
// CHECK-NEXT: "IsTemplate": true,
2121
// CHECK-NEXT: "Name": "T",
2222
// CHECK-NEXT: "QualName": "T"
2323
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"

clang-tools-extra/test/clang-doc/json/class.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ struct MyClass {
107107
// CHECK-NEXT: "GlobalNamespace"
108108
// CHECK-NEXT: ],
109109
// CHECK-NEXT: "ReturnType": {
110-
// CHECK-NEXT: "IsBuiltIn": false,
110+
// CHECK-NEXT: "IsBuiltIn": true,
111111
// CHECK-NEXT: "IsTemplate": false,
112112
// CHECK-NEXT: "Name": "int",
113113
// CHECK-NEXT: "QualName": "int",
@@ -137,7 +137,7 @@ struct MyClass {
137137
// CHECK-NEXT: }
138138
// CHECK-NEXT: ],
139139
// CHECK-NEXT: "ReturnType": {
140-
// CHECK-NEXT: "IsBuiltIn": false,
140+
// CHECK-NEXT: "IsBuiltIn": true,
141141
// CHECK-NEXT: "IsTemplate": false,
142142
// CHECK-NEXT: "Name": "int",
143143
// CHECK-NEXT: "QualName": "int",
@@ -184,7 +184,7 @@ struct MyClass {
184184
// CHECK-NEXT: "TypeDeclaration": "",
185185
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}",
186186
// CHECK-NEXT: "Underlying": {
187-
// CHECK-NEXT: "IsBuiltIn": false,
187+
// CHECK-NEXT: "IsBuiltIn": true,
188188
// CHECK-NEXT: "IsTemplate": false,
189189
// CHECK-NEXT: "Name": "int",
190190
// CHECK-NEXT: "QualName": "int",

clang-tools-extra/test/clang-doc/json/function-requires.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ template<Incrementable T> Incrementable auto incrementTwo(T t);
2323
// CHECK-NEXT: }
2424
// CHECK-NEXT: ],
2525
// CHECK-NEXT: "ReturnType": {
26-
// CHECK-NEXT: "IsBuiltIn": false,
26+
// CHECK-NEXT: "IsBuiltIn": true,
2727
// CHECK-NEXT: "IsTemplate": false,
2828
// CHECK-NEXT: "Name": "void",
2929
// CHECK-NEXT: "QualName": "void",

clang-tools-extra/test/clang-doc/json/method-template.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ struct MyClass {
2727
// CHECK-NEXT: ],
2828
// CHECK-NEXT: "ReturnType": {
2929
// CHECK-NEXT: "IsBuiltIn": false,
30-
// CHECK-NEXT: "IsTemplate": false,
30+
// CHECK-NEXT: "IsTemplate": true,
3131
// CHECK-NEXT: "Name": "T",
3232
// CHECK-NEXT: "QualName": "T",
3333
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"

clang-tools-extra/test/clang-doc/json/namespace.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ typedef int MyTypedef;
5656
// CHECK-NEXT: }
5757
// CHECK-NEXT: ],
5858
// CHECK-NEXT: "ReturnType": {
59-
// CHECK-NEXT: "IsBuiltIn": false,
59+
// CHECK-NEXT: "IsBuiltIn": true,
6060
// CHECK-NEXT: "IsTemplate": false,
6161
// CHECK-NEXT: "Name": "void",
6262
// CHECK-NEXT: "QualName": "void",
@@ -93,7 +93,7 @@ typedef int MyTypedef;
9393
// CHECK-NEXT: "TypeDeclaration": "",
9494
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}",
9595
// CHECK-NEXT: "Underlying": {
96-
// CHECK-NEXT: "IsBuiltIn": false,
96+
// CHECK-NEXT: "IsBuiltIn": true,
9797
// CHECK-NEXT: "IsTemplate": false,
9898
// CHECK-NEXT: "Name": "int",
9999
// CHECK-NEXT: "QualName": "int",
@@ -111,8 +111,7 @@ typedef int MyTypedef;
111111
// CHECK-NEXT: },
112112
// CHECK-NEXT: "Name": "Global",
113113
// CHECK-NEXT: "Type": {
114-
// COM: FIXME: IsBuiltIn emits as its default value
115-
// CHECK-NEXT: "IsBuiltIn": false,
114+
// CHECK-NEXT: "IsBuiltIn": true,
116115
// CHECK-NEXT: "IsTemplate": false,
117116
// CHECK-NEXT: "Name": "int",
118117
// CHECK-NEXT: "QualName": "int",

0 commit comments

Comments
 (0)