Skip to content

Commit 42d2995

Browse files
committed
clang-doc improve mustache output
1 parent 4e5109a commit 42d2995

14 files changed

+770
-154
lines changed

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ llvm::Error parseRecord(const Record &R, unsigned ID, llvm::StringRef Blob,
169169
return decodeRecord(R, I->USR, Blob);
170170
case RECORD_NAME:
171171
return decodeRecord(R, I->Name, Blob);
172+
case RECORD_FULLNAME:
173+
return decodeRecord(R, I->FullName, Blob);
172174
case RECORD_PATH:
173175
return decodeRecord(R, I->Path, Blob);
174176
case RECORD_DEFLOCATION:
@@ -268,6 +270,8 @@ llvm::Error parseRecord(const Record &R, unsigned ID, llvm::StringRef Blob,
268270
return decodeRecord(R, I->Name, Blob);
269271
case FUNCTION_DEFLOCATION:
270272
return decodeRecord(R, I->DefLoc, Blob);
273+
case FUNCTION_PROTOTYPE:
274+
return decodeRecord(R, I->ProtoType, Blob);
271275
case FUNCTION_LOCATION:
272276
return decodeRecord(R, I->Loc, Blob);
273277
case FUNCTION_ACCESS:
@@ -282,7 +286,15 @@ llvm::Error parseRecord(const Record &R, unsigned ID, llvm::StringRef Blob,
282286

283287
llvm::Error parseRecord(const Record &R, unsigned ID, llvm::StringRef Blob,
284288
TypeInfo *I) {
285-
return llvm::Error::success();
289+
switch (ID) {
290+
case TYPE_IS_BUILTIN:
291+
return decodeRecord(R, I->IsBuiltIn, Blob);
292+
case TYPE_IS_TEMPLATE:
293+
return decodeRecord(R, I->IsTemplate, Blob);
294+
default:
295+
return llvm::createStringError(llvm::inconvertibleErrorCode(),
296+
"invalid field for TypeInfo");
297+
}
286298
}
287299

288300
llvm::Error parseRecord(const Record &R, unsigned ID, llvm::StringRef Blob,
@@ -468,6 +480,22 @@ template <> llvm::Error addTypeInfo(TypedefInfo *I, TypeInfo &&T) {
468480
return llvm::Error::success();
469481
}
470482

483+
template <> llvm::Error addTypeInfo(FieldTypeInfo *I, TypeInfo &&T) {
484+
I->Type = std::move(T.Type);
485+
I->IsTemplate = T.IsTemplate;
486+
I->IsBuiltIn = T.IsBuiltIn;
487+
return llvm::Error::success();
488+
}
489+
490+
template <> llvm::Error addTypeInfo(MemberTypeInfo *I, FieldTypeInfo &&T) {
491+
I->Type = std::move(T.Type);
492+
I->IsTemplate = T.IsTemplate;
493+
I->IsBuiltIn = T.IsBuiltIn;
494+
I->Name = std::move(T.Name);
495+
I->DefaultValue = std::move(T.DefaultValue);
496+
return llvm::Error::success();
497+
}
498+
471499
template <typename T> llvm::Error addReference(T I, Reference &&R, FieldId F) {
472500
return llvm::createStringError(llvm::inconvertibleErrorCode(),
473501
"invalid type cannot contain Reference");

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

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ static const llvm::IndexedMap<RecordIdDsc, RecordIdToIndexFunctor>
154154
{COMMENT_ARG, {"Arg", &StringAbbrev}},
155155
{FIELD_TYPE_NAME, {"Name", &StringAbbrev}},
156156
{FIELD_DEFAULT_VALUE, {"DefaultValue", &StringAbbrev}},
157+
{TYPE_IS_BUILTIN, {"IsBuiltIn", &BoolAbbrev}},
158+
{TYPE_IS_TEMPLATE, {"IsTemplate", &BoolAbbrev}},
157159
{MEMBER_TYPE_NAME, {"Name", &StringAbbrev}},
158160
{MEMBER_TYPE_ACCESS, {"Access", &IntAbbrev}},
159161
{NAMESPACE_USR, {"USR", &SymbolIDAbbrev}},
@@ -169,6 +171,7 @@ static const llvm::IndexedMap<RecordIdDsc, RecordIdToIndexFunctor>
169171
{ENUM_VALUE_EXPR, {"Expr", &StringAbbrev}},
170172
{RECORD_USR, {"USR", &SymbolIDAbbrev}},
171173
{RECORD_NAME, {"Name", &StringAbbrev}},
174+
{RECORD_FULLNAME, {"FullName", &StringAbbrev}},
172175
{RECORD_PATH, {"Path", &StringAbbrev}},
173176
{RECORD_DEFLOCATION, {"DefLocation", &LocationAbbrev}},
174177
{RECORD_LOCATION, {"Location", &LocationAbbrev}},
@@ -187,6 +190,7 @@ static const llvm::IndexedMap<RecordIdDsc, RecordIdToIndexFunctor>
187190
{FUNCTION_LOCATION, {"Location", &LocationAbbrev}},
188191
{FUNCTION_ACCESS, {"Access", &IntAbbrev}},
189192
{FUNCTION_IS_METHOD, {"IsMethod", &BoolAbbrev}},
193+
{FUNCTION_PROTOTYPE, {"ProtoType", &StringAbbrev}},
190194
{REFERENCE_USR, {"USR", &SymbolIDAbbrev}},
191195
{REFERENCE_NAME, {"Name", &StringAbbrev}},
192196
{REFERENCE_QUAL_NAME, {"QualName", &StringAbbrev}},
@@ -218,7 +222,7 @@ static const std::vector<std::pair<BlockId, std::vector<RecordId>>>
218222
COMMENT_PARAMNAME, COMMENT_CLOSENAME, COMMENT_SELFCLOSING,
219223
COMMENT_EXPLICIT, COMMENT_ATTRKEY, COMMENT_ATTRVAL, COMMENT_ARG}},
220224
// Type Block
221-
{BI_TYPE_BLOCK_ID, {}},
225+
{BI_TYPE_BLOCK_ID, {TYPE_IS_BUILTIN, TYPE_IS_TEMPLATE}},
222226
// FieldType Block
223227
{BI_FIELD_TYPE_BLOCK_ID, {FIELD_TYPE_NAME, FIELD_DEFAULT_VALUE}},
224228
// MemberType Block
@@ -237,7 +241,7 @@ static const std::vector<std::pair<BlockId, std::vector<RecordId>>>
237241
{NAMESPACE_USR, NAMESPACE_NAME, NAMESPACE_PATH}},
238242
// Record Block
239243
{BI_RECORD_BLOCK_ID,
240-
{RECORD_USR, RECORD_NAME, RECORD_PATH, RECORD_DEFLOCATION,
244+
{RECORD_USR, RECORD_NAME, RECORD_FULLNAME, RECORD_PATH, RECORD_DEFLOCATION,
241245
RECORD_LOCATION, RECORD_TAG_TYPE, RECORD_IS_TYPE_DEF}},
242246
// BaseRecord Block
243247
{BI_BASE_RECORD_BLOCK_ID,
@@ -246,11 +250,11 @@ static const std::vector<std::pair<BlockId, std::vector<RecordId>>>
246250
BASE_RECORD_IS_PARENT}},
247251
// Function Block
248252
{BI_FUNCTION_BLOCK_ID,
249-
{FUNCTION_USR, FUNCTION_NAME, FUNCTION_DEFLOCATION, FUNCTION_LOCATION,
250-
FUNCTION_ACCESS, FUNCTION_IS_METHOD}},
253+
{FUNCTION_USR, FUNCTION_PROTOTYPE, FUNCTION_NAME, FUNCTION_DEFLOCATION,
254+
FUNCTION_LOCATION, FUNCTION_ACCESS, FUNCTION_IS_METHOD}},
251255
// Reference Block
252256
{BI_REFERENCE_BLOCK_ID,
253-
{REFERENCE_USR, REFERENCE_NAME, REFERENCE_QUAL_NAME, REFERENCE_TYPE,
257+
{REFERENCE_USR, REFERENCE_NAME, REFERENCE_QUAL_NAME, REFERENCE_TYPE,
254258
REFERENCE_PATH, REFERENCE_FIELD}},
255259
// Template Blocks.
256260
{BI_TEMPLATE_BLOCK_ID, {}},
@@ -425,6 +429,11 @@ void ClangDocBitcodeWriter::emitBlockInfo(BlockId BID,
425429
void ClangDocBitcodeWriter::emitBlock(const Reference &R, FieldId Field) {
426430
if (R.USR == EmptySID && R.Name.empty())
427431
return;
432+
433+
if (R.Name == "const Shape &") {
434+
llvm::outs() << "const Shape & USR: " <<
435+
llvm::toHex(llvm::toStringRef(R.USR)) << "\n";
436+
}
428437
StreamSubBlockGuard Block(Stream, BI_REFERENCE_BLOCK_ID);
429438
emitRecord(R.USR, REFERENCE_USR);
430439
emitRecord(R.Name, REFERENCE_NAME);
@@ -437,6 +446,8 @@ void ClangDocBitcodeWriter::emitBlock(const Reference &R, FieldId Field) {
437446
void ClangDocBitcodeWriter::emitBlock(const TypeInfo &T) {
438447
StreamSubBlockGuard Block(Stream, BI_TYPE_BLOCK_ID);
439448
emitBlock(T.Type, FieldId::F_type);
449+
emitRecord(T.IsBuiltIn, TYPE_IS_BUILTIN);
450+
emitRecord(T.IsTemplate, TYPE_IS_TEMPLATE);
440451
}
441452

442453
void ClangDocBitcodeWriter::emitBlock(const TypedefInfo &T) {
@@ -455,14 +466,14 @@ void ClangDocBitcodeWriter::emitBlock(const TypedefInfo &T) {
455466

456467
void ClangDocBitcodeWriter::emitBlock(const FieldTypeInfo &T) {
457468
StreamSubBlockGuard Block(Stream, BI_FIELD_TYPE_BLOCK_ID);
458-
emitBlock(T.Type, FieldId::F_type);
469+
emitBlock(static_cast<TypeInfo>(T));
459470
emitRecord(T.Name, FIELD_TYPE_NAME);
460471
emitRecord(T.DefaultValue, FIELD_DEFAULT_VALUE);
461472
}
462473

463474
void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
464475
StreamSubBlockGuard Block(Stream, BI_MEMBER_TYPE_BLOCK_ID);
465-
emitBlock(T.Type, FieldId::F_type);
476+
emitBlock(static_cast<FieldTypeInfo>(T));
466477
emitRecord(T.Name, MEMBER_TYPE_NAME);
467478
emitRecord(T.Access, MEMBER_TYPE_ACCESS);
468479
for (const auto &CI : T.Description)
@@ -544,6 +555,7 @@ void ClangDocBitcodeWriter::emitBlock(const RecordInfo &I) {
544555
StreamSubBlockGuard Block(Stream, BI_RECORD_BLOCK_ID);
545556
emitRecord(I.USR, RECORD_USR);
546557
emitRecord(I.Name, RECORD_NAME);
558+
emitRecord(I.FullName, RECORD_FULLNAME);
547559
emitRecord(I.Path, RECORD_PATH);
548560
for (const auto &N : I.Namespace)
549561
emitBlock(N, FieldId::F_namespace);
@@ -593,6 +605,7 @@ void ClangDocBitcodeWriter::emitBlock(const BaseRecordInfo &I) {
593605
void ClangDocBitcodeWriter::emitBlock(const FunctionInfo &I) {
594606
StreamSubBlockGuard Block(Stream, BI_FUNCTION_BLOCK_ID);
595607
emitRecord(I.USR, FUNCTION_USR);
608+
emitRecord(I.ProtoType, FUNCTION_PROTOTYPE);
596609
emitRecord(I.Name, FUNCTION_NAME);
597610
for (const auto &N : I.Namespace)
598611
emitBlock(N, FieldId::F_namespace);

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ enum RecordId {
7777
VERSION = 1,
7878
FUNCTION_USR,
7979
FUNCTION_NAME,
80+
FUNCTION_PROTOTYPE,
8081
FUNCTION_DEFLOCATION,
8182
FUNCTION_LOCATION,
8283
FUNCTION_ACCESS,
@@ -94,6 +95,8 @@ enum RecordId {
9495
COMMENT_ARG,
9596
FIELD_TYPE_NAME,
9697
FIELD_DEFAULT_VALUE,
98+
TYPE_IS_BUILTIN,
99+
TYPE_IS_TEMPLATE,
97100
MEMBER_TYPE_NAME,
98101
MEMBER_TYPE_ACCESS,
99102
NAMESPACE_USR,
@@ -109,6 +112,7 @@ enum RecordId {
109112
ENUM_VALUE_EXPR,
110113
RECORD_USR,
111114
RECORD_NAME,
115+
RECORD_FULLNAME,
112116
RECORD_PATH,
113117
RECORD_DEFLOCATION,
114118
RECORD_LOCATION,

0 commit comments

Comments
 (0)