From 43c7bd0b8206527436818235dc7c80e4fa1371c6 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Thu, 16 Jun 2016 14:47:23 +0000 Subject: [PATCH] [codeview] Pass CVRecord to visitTypeBegin callback. Both parameters to visitTypeBegin are actually members of CVRecord, so we can just pass CVRecord instead of destructuring it. Differential Revision: http://reviews.llvm.org/D21435 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272899 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../llvm/DebugInfo/CodeView/CVTypeVisitor.h | 13 +++++----- lib/DebugInfo/CodeView/TypeDumper.cpp | 26 ++++++++----------- lib/DebugInfo/CodeView/TypeStreamMerger.cpp | 15 +++++------ lib/DebugInfo/PDB/Raw/TpiStream.cpp | 4 +-- 4 files changed, 24 insertions(+), 34 deletions(-) diff --git a/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h b/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h index a58b344dba4..fe0e1efe41b 100644 --- a/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h +++ b/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h @@ -52,12 +52,11 @@ public: void visitTypeRecord(const CVRecord &Record) { ArrayRef LeafData = Record.Data; - ArrayRef RecordData = LeafData; auto *DerivedThis = static_cast(this); - DerivedThis->visitTypeBegin(Record.Type, RecordData); + DerivedThis->visitTypeBegin(Record); switch (Record.Type) { default: - DerivedThis->visitUnknownType(Record.Type, RecordData); + DerivedThis->visitUnknownType(Record); break; case LF_FIELDLIST: DerivedThis->visitFieldList(Record.Type, LeafData); @@ -76,7 +75,7 @@ public: #define MEMBER_RECORD(EnumName, EnumVal, Name) #include "TypeRecords.def" } - DerivedThis->visitTypeEnd(Record.Type, RecordData); + DerivedThis->visitTypeEnd(Record); } /// Visits the type records in Data. Sets the error flag on parse failures. @@ -89,12 +88,12 @@ public: } /// Action to take on unknown types. By default, they are ignored. - void visitUnknownType(TypeLeafKind Leaf, ArrayRef RecordData) {} + void visitUnknownType(const CVRecord &Record) {} /// Paired begin/end actions for all types. Receives all record data, /// including the fixed-length record prefix. - void visitTypeBegin(TypeLeafKind Leaf, ArrayRef RecordData) {} - void visitTypeEnd(TypeLeafKind Leaf, ArrayRef RecordData) {} + void visitTypeBegin(const CVRecord &Record) {} + void visitTypeEnd(const CVRecord &Record) {} ArrayRef skipPadding(ArrayRef Data) { if (Data.empty()) diff --git a/lib/DebugInfo/CodeView/TypeDumper.cpp b/lib/DebugInfo/CodeView/TypeDumper.cpp index 2bf9828ff0b..b181ffb7c4d 100644 --- a/lib/DebugInfo/CodeView/TypeDumper.cpp +++ b/lib/DebugInfo/CodeView/TypeDumper.cpp @@ -209,10 +209,10 @@ public: #include "llvm/DebugInfo/CodeView/TypeRecords.def" void visitUnknownMember(TypeLeafKind Leaf); - void visitUnknownType(TypeLeafKind Leaf, ArrayRef LeafData); + void visitUnknownType(const CVRecord &Record); - void visitTypeBegin(TypeLeafKind Leaf, ArrayRef LeafData); - void visitTypeEnd(TypeLeafKind Leaf, ArrayRef LeafData); + void visitTypeBegin(const CVRecord &Record); + void visitTypeEnd(const CVRecord &Record); void printMemberAttributes(MemberAttributes Attrs); void printMemberAttributes(MemberAccess Access, MethodKind Kind, @@ -250,25 +250,22 @@ static StringRef getLeafTypeName(TypeLeafKind LT) { return "UnknownLeaf"; } -void CVTypeDumperImpl::visitTypeBegin(TypeLeafKind Leaf, - ArrayRef LeafData) { +void CVTypeDumperImpl::visitTypeBegin(const CVRecord &Rec) { // Reset Name to the empty string. If the visitor sets it, we know it. Name = ""; - W.startLine() << getLeafTypeName(Leaf) << " (" + W.startLine() << getLeafTypeName(Rec.Type) << " (" << HexNumber(CVTD.getNextTypeIndex()) << ") {\n"; W.indent(); - W.printEnum("TypeLeafKind", unsigned(Leaf), makeArrayRef(LeafTypeNames)); + W.printEnum("TypeLeafKind", unsigned(Rec.Type), makeArrayRef(LeafTypeNames)); } -void CVTypeDumperImpl::visitTypeEnd(TypeLeafKind Leaf, - ArrayRef LeafData) { +void CVTypeDumperImpl::visitTypeEnd(const CVRecord &Rec) { // Always record some name for every type, even if Name is empty. CVUDTNames // is indexed by type index, and must have one entry for every type. CVTD.recordType(Name); - if (PrintRecordBytes) - W.printBinaryBlock("LeafData", getBytesAsCharacters(LeafData)); + W.printBinaryBlock("LeafData", getBytesAsCharacters(Rec.Data)); W.unindent(); W.startLine() << "}\n"; @@ -545,11 +542,10 @@ void CVTypeDumperImpl::visitUnknownMember(TypeLeafKind Leaf) { W.printHex("UnknownMember", unsigned(Leaf)); } -void CVTypeDumperImpl::visitUnknownType(TypeLeafKind Leaf, - ArrayRef RecordData) { +void CVTypeDumperImpl::visitUnknownType(const CVRecord &Rec) { DictScope S(W, "UnknownType"); - W.printEnum("Kind", uint16_t(Leaf), makeArrayRef(LeafTypeNames)); - W.printNumber("Length", uint32_t(RecordData.size())); + W.printEnum("Kind", uint16_t(Rec.Type), makeArrayRef(LeafTypeNames)); + W.printNumber("Length", uint32_t(Rec.Data.size())); } void CVTypeDumperImpl::visitNestedType(NestedTypeRecord &Nested) { diff --git a/lib/DebugInfo/CodeView/TypeStreamMerger.cpp b/lib/DebugInfo/CodeView/TypeStreamMerger.cpp index a405d790350..f71a31d6e38 100644 --- a/lib/DebugInfo/CodeView/TypeStreamMerger.cpp +++ b/lib/DebugInfo/CodeView/TypeStreamMerger.cpp @@ -64,10 +64,10 @@ public: #define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) #include "llvm/DebugInfo/CodeView/TypeRecords.def" - void visitUnknownType(TypeLeafKind Leaf, ArrayRef RecordData); + void visitUnknownType(const CVRecord &Record); - void visitTypeBegin(TypeLeafKind Leaf, ArrayRef RecordData); - void visitTypeEnd(TypeLeafKind Leaf, ArrayRef RecordData); + void visitTypeBegin(const CVRecord &Record); + void visitTypeEnd(const CVRecord &Record); void visitFieldList(TypeLeafKind Leaf, ArrayRef FieldData); @@ -91,13 +91,11 @@ private: } // end anonymous namespace -void TypeStreamMerger::visitTypeBegin(TypeLeafKind Leaf, - ArrayRef RecordData) { +void TypeStreamMerger::visitTypeBegin(const CVRecord &Rec) { BeginIndexMapSize = IndexMap.size(); } -void TypeStreamMerger::visitTypeEnd(TypeLeafKind Leaf, - ArrayRef RecordData) { +void TypeStreamMerger::visitTypeEnd(const CVRecord &Rec) { assert(IndexMap.size() == BeginIndexMapSize + 1); } @@ -122,8 +120,7 @@ void TypeStreamMerger::visitFieldList(TypeLeafKind Leaf, #define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) #include "llvm/DebugInfo/CodeView/TypeRecords.def" -void TypeStreamMerger::visitUnknownType(TypeLeafKind Leaf, - ArrayRef RecordData) { +void TypeStreamMerger::visitUnknownType(const CVRecord &Rec) { // We failed to translate a type. Translate this index as "not translated". IndexMap.push_back( TypeIndex(SimpleTypeKind::NotTranslated, SimpleTypeMode::Direct)); diff --git a/lib/DebugInfo/PDB/Raw/TpiStream.cpp b/lib/DebugInfo/PDB/Raw/TpiStream.cpp index 5956a8b3378..99e5037ad63 100644 --- a/lib/DebugInfo/PDB/Raw/TpiStream.cpp +++ b/lib/DebugInfo/PDB/Raw/TpiStream.cpp @@ -102,9 +102,7 @@ public: void visitStruct(ClassRecord &Rec) { verify(Rec); } void visitUnion(UnionRecord &Rec) { verify(Rec); } - void visitTypeEnd(TypeLeafKind Leaf, ArrayRef RecordData) { - ++Index; - } + void visitTypeEnd(const CVRecord &Record) { ++Index; } private: template void verify(T &Rec) { -- 2.50.1