Skip to content

Commit a9cb2dd

Browse files
author
Julie Hockett
committed
Revert "[clang-doc] Refactoring mapper to map by scope"
This reverts commit r338738 as it's breaking the bots. llvm-svn: 338748
1 parent 90dc82e commit a9cb2dd

36 files changed

+1629
-4149
lines changed

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

+10-71
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,6 @@ bool decodeRecord(Record R, FieldId &Field, llvm::StringRef Blob) {
100100
case FieldId::F_parent:
101101
case FieldId::F_vparent:
102102
case FieldId::F_type:
103-
case FieldId::F_child_namespace:
104-
case FieldId::F_child_record:
105103
case FieldId::F_default:
106104
Field = F;
107105
return true;
@@ -374,12 +372,6 @@ template <> void addReference(NamespaceInfo *I, Reference &&R, FieldId F) {
374372
case FieldId::F_namespace:
375373
I->Namespace.emplace_back(std::move(R));
376374
break;
377-
case FieldId::F_child_namespace:
378-
I->ChildNamespaces.emplace_back(std::move(R));
379-
break;
380-
case FieldId::F_child_record:
381-
I->ChildRecords.emplace_back(std::move(R));
382-
break;
383375
default:
384376
llvm::errs() << "Invalid field type for info.\n";
385377
exit(1);
@@ -411,37 +403,12 @@ template <> void addReference(RecordInfo *I, Reference &&R, FieldId F) {
411403
case FieldId::F_vparent:
412404
I->VirtualParents.emplace_back(std::move(R));
413405
break;
414-
case FieldId::F_child_record:
415-
I->ChildRecords.emplace_back(std::move(R));
416-
break;
417406
default:
418407
llvm::errs() << "Invalid field type for info.\n";
419408
exit(1);
420409
}
421410
}
422411

423-
template <typename T, typename ChildInfoType>
424-
void addChild(T I, ChildInfoType &&R) {
425-
llvm::errs() << "Invalid child type for info.\n";
426-
exit(1);
427-
}
428-
429-
template <> void addChild(NamespaceInfo *I, FunctionInfo &&R) {
430-
I->ChildFunctions.emplace_back(std::move(R));
431-
}
432-
433-
template <> void addChild(NamespaceInfo *I, EnumInfo &&R) {
434-
I->ChildEnums.emplace_back(std::move(R));
435-
}
436-
437-
template <> void addChild(RecordInfo *I, FunctionInfo &&R) {
438-
I->ChildFunctions.emplace_back(std::move(R));
439-
}
440-
441-
template <> void addChild(RecordInfo *I, EnumInfo &&R) {
442-
I->ChildEnums.emplace_back(std::move(R));
443-
}
444-
445412
// Read records from bitcode into a given info.
446413
template <typename T> bool ClangDocBitcodeReader::readRecord(unsigned ID, T I) {
447414
Record R;
@@ -488,8 +455,7 @@ template <typename T> bool ClangDocBitcodeReader::readBlock(unsigned ID, T I) {
488455
template <typename T>
489456
bool ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
490457
switch (ID) {
491-
// Blocks can only have Comment, Reference, TypeInfo, FunctionInfo, or
492-
// EnumInfo subblocks
458+
// Blocks can only have Comment, Reference, or TypeInfo subblocks
493459
case BI_COMMENT_BLOCK_ID:
494460
if (readBlock(ID, getCommentInfo(I)))
495461
return true;
@@ -526,22 +492,6 @@ bool ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
526492
}
527493
return false;
528494
}
529-
case BI_FUNCTION_BLOCK_ID: {
530-
FunctionInfo F;
531-
if (readBlock(ID, &F)) {
532-
addChild(I, std::move(F));
533-
return true;
534-
}
535-
return false;
536-
}
537-
case BI_ENUM_BLOCK_ID: {
538-
EnumInfo E;
539-
if (readBlock(ID, &E)) {
540-
addChild(I, std::move(E));
541-
return true;
542-
}
543-
return false;
544-
}
545495
default:
546496
llvm::errs() << "Invalid subblock type.\n";
547497
return false;
@@ -623,21 +573,16 @@ std::unique_ptr<Info> ClangDocBitcodeReader::readBlockToInfo(unsigned ID) {
623573
}
624574

625575
// Entry point
626-
llvm::Expected<std::vector<std::unique_ptr<Info>>>
627-
ClangDocBitcodeReader::readBitcode() {
576+
std::vector<std::unique_ptr<Info>> ClangDocBitcodeReader::readBitcode() {
628577
std::vector<std::unique_ptr<Info>> Infos;
629578
if (!validateStream())
630-
return llvm::make_error<llvm::StringError>("Invalid bitcode stream.\n",
631-
llvm::inconvertibleErrorCode());
632-
;
579+
return Infos;
633580

634581
// Read the top level blocks.
635582
while (!Stream.AtEndOfStream()) {
636583
unsigned Code = Stream.ReadCode();
637584
if (Code != llvm::bitc::ENTER_SUBBLOCK)
638-
return llvm::make_error<llvm::StringError>(
639-
"Missing subblock in bitcode.\n", llvm::inconvertibleErrorCode());
640-
;
585+
return Infos;
641586

642587
unsigned ID = Stream.ReadSubBlockID();
643588
switch (ID) {
@@ -647,30 +592,24 @@ ClangDocBitcodeReader::readBitcode() {
647592
case BI_MEMBER_TYPE_BLOCK_ID:
648593
case BI_COMMENT_BLOCK_ID:
649594
case BI_REFERENCE_BLOCK_ID:
650-
return llvm::make_error<llvm::StringError>(
651-
"Invalid top level block in bitcode.\n",
652-
llvm::inconvertibleErrorCode());
653-
;
595+
llvm::errs() << "Invalid top level block.\n";
596+
return Infos;
654597
case BI_NAMESPACE_BLOCK_ID:
655598
case BI_RECORD_BLOCK_ID:
656599
case BI_ENUM_BLOCK_ID:
657600
case BI_FUNCTION_BLOCK_ID:
658-
if (std::unique_ptr<Info> I = readBlockToInfo(ID))
601+
if (std::unique_ptr<Info> I = readBlockToInfo(ID)) {
659602
Infos.emplace_back(std::move(I));
603+
}
660604
return Infos;
661605
case BI_VERSION_BLOCK_ID:
662606
if (readBlock(ID, VersionNumber))
663607
continue;
664-
return llvm::make_error<llvm::StringError>(
665-
"Invalid bitcode version in bitcode.\n",
666-
llvm::inconvertibleErrorCode());
667-
;
608+
return Infos;
668609
case llvm::bitc::BLOCKINFO_BLOCK_ID:
669610
if (readBlockInfoBlock())
670611
continue;
671-
return llvm::make_error<llvm::StringError>(
672-
"Invalid BlockInfo in bitcode.\n", llvm::inconvertibleErrorCode());
673-
;
612+
return Infos;
674613
default:
675614
if (!Stream.SkipBlock())
676615
continue;

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#include "BitcodeWriter.h"
2020
#include "Representation.h"
2121
#include "clang/AST/AST.h"
22-
#include "llvm/ADT/Optional.h"
2322
#include "llvm/ADT/SmallVector.h"
2423
#include "llvm/Bitcode/BitstreamReader.h"
2524

@@ -32,7 +31,7 @@ class ClangDocBitcodeReader {
3231
ClangDocBitcodeReader(llvm::BitstreamCursor &Stream) : Stream(Stream) {}
3332

3433
// Main entry point, calls readBlock to read each block in the given stream.
35-
llvm::Expected<std::vector<std::unique_ptr<Info>>> readBitcode();
34+
std::vector<std::unique_ptr<Info>> readBitcode();
3635

3736
private:
3837
enum class Cursor { BadBlock = 1, Record, BlockEnd, BlockBegin };

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

-14
Original file line numberDiff line numberDiff line change
@@ -434,14 +434,6 @@ void ClangDocBitcodeWriter::emitBlock(const NamespaceInfo &I) {
434434
emitBlock(N, FieldId::F_namespace);
435435
for (const auto &CI : I.Description)
436436
emitBlock(CI);
437-
for (const auto &C : I.ChildNamespaces)
438-
emitBlock(C, FieldId::F_child_namespace);
439-
for (const auto &C : I.ChildRecords)
440-
emitBlock(C, FieldId::F_child_record);
441-
for (const auto &C : I.ChildFunctions)
442-
emitBlock(C);
443-
for (const auto &C : I.ChildEnums)
444-
emitBlock(C);
445437
}
446438

447439
void ClangDocBitcodeWriter::emitBlock(const EnumInfo &I) {
@@ -480,12 +472,6 @@ void ClangDocBitcodeWriter::emitBlock(const RecordInfo &I) {
480472
emitBlock(P, FieldId::F_parent);
481473
for (const auto &P : I.VirtualParents)
482474
emitBlock(P, FieldId::F_vparent);
483-
for (const auto &C : I.ChildRecords)
484-
emitBlock(C, FieldId::F_child_record);
485-
for (const auto &C : I.ChildFunctions)
486-
emitBlock(C);
487-
for (const auto &C : I.ChildEnums)
488-
emitBlock(C);
489475
}
490476

491477
void ClangDocBitcodeWriter::emitBlock(const FunctionInfo &I) {

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

+9-17
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,11 @@ enum BlockId {
6868

6969
// New Ids need to be added to the enum here, and to the relevant IdNameMap and
7070
// initialization list in the implementation file.
71+
#define INFORECORDS(X) X##_USR, X##_NAME
72+
7173
enum RecordId {
7274
VERSION = 1,
73-
FUNCTION_USR,
74-
FUNCTION_NAME,
75+
INFORECORDS(FUNCTION),
7576
FUNCTION_DEFLOCATION,
7677
FUNCTION_LOCATION,
7778
FUNCTION_ACCESS,
@@ -90,16 +91,13 @@ enum RecordId {
9091
FIELD_TYPE_NAME,
9192
MEMBER_TYPE_NAME,
9293
MEMBER_TYPE_ACCESS,
93-
NAMESPACE_USR,
94-
NAMESPACE_NAME,
95-
ENUM_USR,
96-
ENUM_NAME,
94+
INFORECORDS(NAMESPACE),
95+
INFORECORDS(ENUM),
9796
ENUM_DEFLOCATION,
9897
ENUM_LOCATION,
9998
ENUM_MEMBER,
10099
ENUM_SCOPED,
101-
RECORD_USR,
102-
RECORD_NAME,
100+
INFORECORDS(RECORD),
103101
RECORD_DEFLOCATION,
104102
RECORD_LOCATION,
105103
RECORD_TAG_TYPE,
@@ -114,16 +112,10 @@ enum RecordId {
114112
static constexpr unsigned BlockIdCount = BI_LAST - BI_FIRST;
115113
static constexpr unsigned RecordIdCount = RI_LAST - RI_FIRST;
116114

115+
#undef INFORECORDS
116+
117117
// Identifiers for differentiating between subblocks
118-
enum class FieldId {
119-
F_default,
120-
F_namespace,
121-
F_parent,
122-
F_vparent,
123-
F_type,
124-
F_child_namespace,
125-
F_child_record
126-
};
118+
enum class FieldId { F_default, F_namespace, F_parent, F_vparent, F_type };
127119

128120
class ClangDocBitcodeWriter {
129121
public:

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

+5-7
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include "clang/AST/Comment.h"
1414
#include "clang/Index/USRGeneration.h"
1515
#include "llvm/ADT/StringExtras.h"
16-
#include "llvm/Support/Error.h"
1716

1817
using clang::comments::FullComment;
1918

@@ -34,15 +33,14 @@ template <typename T> bool MapASTVisitor::mapDecl(const T *D) {
3433
if (index::generateUSRForDecl(D, USR))
3534
return true;
3635

37-
auto I = serialize::emitInfo(
36+
std::string info = serialize::emitInfo(
3837
D, getComment(D, D->getASTContext()), getLine(D, D->getASTContext()),
3938
getFile(D, D->getASTContext()), CDCtx.PublicOnly);
4039

41-
// A null in place of I indicates that the serializer is skipping this decl
42-
// for some reason (e.g. we're only reporting public decls).
43-
if (I)
44-
CDCtx.ECtx->reportResult(llvm::toHex(llvm::toStringRef(I->USR)),
45-
serialize::serialize(I));
40+
if (info != "")
41+
CDCtx.ECtx->reportResult(
42+
llvm::toHex(llvm::toStringRef(serialize::hashUSR(USR))), info);
43+
4644
return true;
4745
}
4846

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

+4-66
Original file line numberDiff line numberDiff line change
@@ -26,70 +26,17 @@
2626
namespace clang {
2727
namespace doc {
2828

29-
namespace {
30-
31-
const SymbolID EmptySID = SymbolID();
29+
static const SymbolID EmptySID = SymbolID();
3230

3331
template <typename T>
34-
llvm::Expected<std::unique_ptr<Info>>
35-
reduce(std::vector<std::unique_ptr<Info>> &Values) {
36-
if (Values.empty())
37-
return llvm::make_error<llvm::StringError>(" No values to reduce.\n",
38-
llvm::inconvertibleErrorCode());
39-
std::unique_ptr<Info> Merged = llvm::make_unique<T>(Values[0]->USR);
32+
std::unique_ptr<Info> reduce(std::vector<std::unique_ptr<Info>> &Values) {
33+
std::unique_ptr<Info> Merged = llvm::make_unique<T>();
4034
T *Tmp = static_cast<T *>(Merged.get());
4135
for (auto &I : Values)
4236
Tmp->merge(std::move(*static_cast<T *>(I.get())));
4337
return Merged;
4438
}
4539

46-
// Return the index of the matching child in the vector, or -1 if merge is not
47-
// necessary.
48-
template <typename T>
49-
int getChildIndexIfExists(std::vector<T> &Children, T &ChildToMerge) {
50-
for (unsigned long I = 0; I < Children.size(); I++) {
51-
if (ChildToMerge.USR == Children[I].USR)
52-
return I;
53-
}
54-
return -1;
55-
}
56-
57-
// For References, we don't need to actually merge them, we just don't want
58-
// duplicates.
59-
void reduceChildren(std::vector<Reference> &Children,
60-
std::vector<Reference> &&ChildrenToMerge) {
61-
for (auto &ChildToMerge : ChildrenToMerge) {
62-
if (getChildIndexIfExists(Children, ChildToMerge) == -1)
63-
Children.push_back(std::move(ChildToMerge));
64-
}
65-
}
66-
67-
void reduceChildren(std::vector<FunctionInfo> &Children,
68-
std::vector<FunctionInfo> &&ChildrenToMerge) {
69-
for (auto &ChildToMerge : ChildrenToMerge) {
70-
int mergeIdx = getChildIndexIfExists(Children, ChildToMerge);
71-
if (mergeIdx == -1) {
72-
Children.push_back(std::move(ChildToMerge));
73-
continue;
74-
}
75-
Children[mergeIdx].merge(std::move(ChildToMerge));
76-
}
77-
}
78-
79-
void reduceChildren(std::vector<EnumInfo> &Children,
80-
std::vector<EnumInfo> &&ChildrenToMerge) {
81-
for (auto &ChildToMerge : ChildrenToMerge) {
82-
int mergeIdx = getChildIndexIfExists(Children, ChildToMerge);
83-
if (mergeIdx == -1) {
84-
Children.push_back(std::move(ChildToMerge));
85-
continue;
86-
}
87-
Children[mergeIdx].merge(std::move(ChildToMerge));
88-
}
89-
}
90-
91-
} // namespace
92-
9340
// Dispatch function.
9441
llvm::Expected<std::unique_ptr<Info>>
9542
mergeInfos(std::vector<std::unique_ptr<Info>> &Values) {
@@ -126,7 +73,7 @@ void Info::mergeBase(Info &&Other) {
12673
}
12774

12875
bool Info::mergeable(const Info &Other) {
129-
return IT == Other.IT && USR == Other.USR;
76+
return IT == Other.IT && (USR == EmptySID || USR == Other.USR);
13077
}
13178

13279
void SymbolInfo::merge(SymbolInfo &&Other) {
@@ -140,11 +87,6 @@ void SymbolInfo::merge(SymbolInfo &&Other) {
14087

14188
void NamespaceInfo::merge(NamespaceInfo &&Other) {
14289
assert(mergeable(Other));
143-
// Reduce children if necessary.
144-
reduceChildren(ChildNamespaces, std::move(Other.ChildNamespaces));
145-
reduceChildren(ChildRecords, std::move(Other.ChildRecords));
146-
reduceChildren(ChildFunctions, std::move(Other.ChildFunctions));
147-
reduceChildren(ChildEnums, std::move(Other.ChildEnums));
14890
mergeBase(std::move(Other));
14991
}
15092

@@ -158,10 +100,6 @@ void RecordInfo::merge(RecordInfo &&Other) {
158100
Parents = std::move(Other.Parents);
159101
if (VirtualParents.empty())
160102
VirtualParents = std::move(Other.VirtualParents);
161-
// Reduce children if necessary.
162-
reduceChildren(ChildRecords, std::move(Other.ChildRecords));
163-
reduceChildren(ChildFunctions, std::move(Other.ChildFunctions));
164-
reduceChildren(ChildEnums, std::move(Other.ChildEnums));
165103
SymbolInfo::merge(std::move(Other));
166104
}
167105

0 commit comments

Comments
 (0)