1de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===-- TypeRecord.cpp ------------------------------------------*- C++ -*-===// 2de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 3de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// The LLVM Compiler Infrastructure 4de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 5de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source 6de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// License. See LICENSE.TXT for details. 7de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// 8de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===// 9de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 10de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/TypeRecord.h" 11de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/TypeIndex.h" 12de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include "llvm/DebugInfo/CodeView/RecordSerialization.h" 13de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 14de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing namespace llvm; 15de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarusing namespace llvm::codeview; 16de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 17de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===// 18de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// Type record deserialization 19de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===// 20de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 21de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<MemberPointerInfo> 22de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarMemberPointerInfo::deserialize(ArrayRef<uint8_t> &Data) { 23de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 24de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (auto EC = consumeObject(Data, L)) 25de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EC; 26de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 27de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex T = L->ClassType; 28de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t R = L->Representation; 29de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar PointerToMemberRepresentation PMR = 30de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar static_cast<PointerToMemberRepresentation>(R); 31de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return MemberPointerInfo(T, PMR); 32de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 33de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 34de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<ModifierRecord> ModifierRecord::deserialize(TypeRecordKind Kind, 35de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 36de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 37de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (auto EC = consumeObject(Data, L)) 38de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EC; 39de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 40de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar TypeIndex M = L->ModifiedType; 41de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t O = L->Modifiers; 42de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ModifierOptions MO = static_cast<ModifierOptions>(O); 43de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ModifierRecord(M, MO); 44de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 45de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 46de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<ProcedureRecord> ProcedureRecord::deserialize(TypeRecordKind Kind, 47de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 48de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 49de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (auto EC = consumeObject(Data, L)) 50de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EC; 51de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ProcedureRecord(L->ReturnType, L->CallConv, L->Options, 52de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar L->NumParameters, L->ArgListType); 53de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 54de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 55de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<MemberFunctionRecord> 56de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarMemberFunctionRecord::deserialize(TypeRecordKind Kind, 57de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 58de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 59de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L); 60de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return MemberFunctionRecord(L->ReturnType, L->ClassType, L->ThisType, 61de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar L->CallConv, L->Options, L->NumParameters, 62de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar L->ArgListType, L->ThisAdjustment); 63de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 64de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 65de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<MemberFuncIdRecord> 66de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarMemberFuncIdRecord::deserialize(TypeRecordKind Kind, ArrayRef<uint8_t> &Data) { 67de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 68de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 69de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name); 70de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return MemberFuncIdRecord(L->ClassType, L->FunctionType, Name); 71de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 72de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 73de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<ArgListRecord> ArgListRecord::deserialize(TypeRecordKind Kind, 74de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 75de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Kind != TypeRecordKind::StringList && Kind != TypeRecordKind::ArgList) 76de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return std::make_error_code(std::errc::illegal_byte_sequence); 77de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 78de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 79de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<TypeIndex> Indices; 80de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_ARRAY_FIELD_N(Indices, L->NumArgs)); 81de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ArgListRecord(Kind, Indices); 82de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 83de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 84de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<PointerRecord> PointerRecord::deserialize(TypeRecordKind Kind, 85de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 86de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 87de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (auto EC = consumeObject(Data, L)) 88de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EC; 89de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 90de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar PointerKind PtrKind = L->getPtrKind(); 91de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar PointerMode Mode = L->getPtrMode(); 92de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint32_t Opts = L->Attrs; 93de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar PointerOptions Options = static_cast<PointerOptions>(Opts); 94de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Size = L->getPtrSize(); 95de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 96de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (L->isPointerToMember()) { 97de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar auto E = MemberPointerInfo::deserialize(Data); 98de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (E.getError()) 99de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return std::make_error_code(std::errc::illegal_byte_sequence); 100de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return PointerRecord(L->PointeeType, PtrKind, Mode, Options, Size, *E); 101de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 102de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 103de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return PointerRecord(L->PointeeType, PtrKind, Mode, Options, Size); 104de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 105de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 106de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<NestedTypeRecord> 107de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarNestedTypeRecord::deserialize(TypeRecordKind Kind, ArrayRef<uint8_t> &Data) { 108de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 109de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 110de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name); 111de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return NestedTypeRecord(L->Type, Name); 112de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 113de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 114de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<ArrayRecord> ArrayRecord::deserialize(TypeRecordKind Kind, 115de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 116de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 117de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint64_t Size; 118de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 119de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_NUMERIC_FIELD(Size), Name); 120de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ArrayRecord(L->ElementType, L->IndexType, Size, Name); 121de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 122de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 123de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<ClassRecord> ClassRecord::deserialize(TypeRecordKind Kind, 124de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 125de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint64_t Size = 0; 126de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 127de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef UniqueName; 128de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t Props; 129de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 130de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 131de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_NUMERIC_FIELD(Size), Name, 132de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_CONDITIONAL_FIELD(UniqueName, L->hasUniqueName())); 133de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 134de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Props = L->Properties; 135de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t WrtValue = (Props & WinRTKindMask) >> WinRTKindShift; 136de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar WindowsRTClassKind WRT = static_cast<WindowsRTClassKind>(WrtValue); 137de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t HfaMask = (Props & HfaKindMask) >> HfaKindShift; 138de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar HfaKind Hfa = static_cast<HfaKind>(HfaMask); 139de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 140de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ClassOptions Options = static_cast<ClassOptions>(Props); 141de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ClassRecord(Kind, L->MemberCount, Options, Hfa, WRT, L->FieldList, 142de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar L->DerivedFrom, L->VShape, Size, Name, UniqueName); 143de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 144de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 145de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<UnionRecord> UnionRecord::deserialize(TypeRecordKind Kind, 146de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 147de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint64_t Size = 0; 148de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 149de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef UniqueName; 150de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t Props; 151de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 152de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 153de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_NUMERIC_FIELD(Size), Name, 154de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_CONDITIONAL_FIELD(UniqueName, L->hasUniqueName())); 155de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 156de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Props = L->Properties; 157de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 158de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t HfaMask = (Props & HfaKindMask) >> HfaKindShift; 159de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar HfaKind Hfa = static_cast<HfaKind>(HfaMask); 160de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ClassOptions Options = static_cast<ClassOptions>(Props); 161de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return UnionRecord(L->MemberCount, Options, Hfa, L->FieldList, Size, Name, 162de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar UniqueName); 163de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 164de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 165de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<EnumRecord> EnumRecord::deserialize(TypeRecordKind Kind, 166de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 167de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 168de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 169de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef UniqueName; 170de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name, 171de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_CONDITIONAL_FIELD(UniqueName, L->hasUniqueName())); 172de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 173de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t P = L->Properties; 174de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ClassOptions Options = static_cast<ClassOptions>(P); 175de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EnumRecord(L->NumEnumerators, Options, L->FieldListType, Name, 176de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar UniqueName, L->UnderlyingType); 177de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 178de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 179de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<BitFieldRecord> BitFieldRecord::deserialize(TypeRecordKind Kind, 180de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 181de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 182de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L); 183de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return BitFieldRecord(L->Type, L->BitSize, L->BitOffset); 184de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 185de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 186de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<VFTableShapeRecord> 187de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarVFTableShapeRecord::deserialize(TypeRecordKind Kind, ArrayRef<uint8_t> &Data) { 188de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 189de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (auto EC = consumeObject(Data, L)) 190de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EC; 191de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 192de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::vector<VFTableSlotKind> Slots; 193de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint16_t Count = L->VFEntryCount; 194de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar while (Count > 0) { 195de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Data.empty()) 196de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return std::make_error_code(std::errc::illegal_byte_sequence); 197de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 198de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Process up to 2 nibbles at a time (if there are at least 2 remaining) 199de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint8_t Value = Data[0] & 0x0F; 200de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Slots.push_back(static_cast<VFTableSlotKind>(Value)); 201de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (--Count > 0) { 202de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Value = (Data[0] & 0xF0) >> 4; 203de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Slots.push_back(static_cast<VFTableSlotKind>(Value)); 204de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar --Count; 205de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 206de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Data = Data.slice(1); 207de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 208de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 209de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return VFTableShapeRecord(Slots); 210de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 211de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 212de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<TypeServer2Record> 213de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarTypeServer2Record::deserialize(TypeRecordKind Kind, ArrayRef<uint8_t> &Data) { 214de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 215de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 216de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name); 217de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return TypeServer2Record(StringRef(L->Guid, 16), L->Age, Name); 218de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 219de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 220de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<StringIdRecord> StringIdRecord::deserialize(TypeRecordKind Kind, 221de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 222de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 223de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 224de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name); 225de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return StringIdRecord(L->id, Name); 226de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 227de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 228de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<FuncIdRecord> FuncIdRecord::deserialize(TypeRecordKind Kind, 229de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 230de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 231de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 232de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name); 233de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return FuncIdRecord(L->ParentScope, L->FunctionType, Name); 234de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 235de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 236de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<UdtSourceLineRecord> 237de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarUdtSourceLineRecord::deserialize(TypeRecordKind Kind, ArrayRef<uint8_t> &Data) { 238de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 239de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L); 240de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return UdtSourceLineRecord(L->UDT, L->SourceFile, L->LineNumber); 241de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 242de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 243de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<BuildInfoRecord> BuildInfoRecord::deserialize(TypeRecordKind Kind, 244de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 245de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 246de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<TypeIndex> Indices; 247de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_ARRAY_FIELD_N(Indices, L->NumArgs)); 248de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return BuildInfoRecord(Indices); 249de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 250de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 251de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<VFTableRecord> VFTableRecord::deserialize(TypeRecordKind Kind, 252de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 253de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 254de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 255de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::vector<StringRef> Names; 256de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name, CV_ARRAY_FIELD_TAIL(Names)); 257de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return VFTableRecord(L->CompleteClass, L->OverriddenVFTable, L->VFPtrOffset, 258de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Name, Names); 259de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 260de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 261de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<OneMethodRecord> OneMethodRecord::deserialize(TypeRecordKind Kind, 262de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 263de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 264de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 265de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar int32_t VFTableOffset = -1; 266de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 267de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_CONDITIONAL_FIELD(VFTableOffset, 268de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar L->Attrs.isIntroducedVirtual()), 269de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Name); 270de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 271de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MethodOptions Options = L->Attrs.getFlags(); 272de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MethodKind MethKind = L->Attrs.getMethodKind(); 273de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MemberAccess Access = L->Attrs.getAccess(); 274de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar OneMethodRecord Method(L->Type, MethKind, Options, Access, VFTableOffset, 275de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Name); 276de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Validate the vftable offset. 277de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Method.isIntroducingVirtual() && Method.getVFTableOffset() < 0) 278de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return std::make_error_code(std::errc::illegal_byte_sequence); 279de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Method; 280de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 281de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 282de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<MethodOverloadListRecord> 283de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarMethodOverloadListRecord::deserialize(TypeRecordKind Kind, 284de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 285de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar std::vector<OneMethodRecord> Methods; 286de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar while (!Data.empty()) { 287de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 288de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar int32_t VFTableOffset = -1; 289de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_CONDITIONAL_FIELD( 290de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar VFTableOffset, L->Attrs.isIntroducedVirtual())); 291de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 292de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MethodOptions Options = L->Attrs.getFlags(); 293de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MethodKind MethKind = L->Attrs.getMethodKind(); 294de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar MemberAccess Access = L->Attrs.getAccess(); 295de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 296de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Methods.emplace_back(L->Type, MethKind, Options, Access, VFTableOffset, 297de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef()); 298de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 299de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Validate the vftable offset. 300de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar auto &Method = Methods.back(); 301de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Method.isIntroducingVirtual() && Method.getVFTableOffset() < 0) 302de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return std::make_error_code(std::errc::illegal_byte_sequence); 303de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 304de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return MethodOverloadListRecord(Methods); 305de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 306de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 307de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<OverloadedMethodRecord> 308de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarOverloadedMethodRecord::deserialize(TypeRecordKind Kind, 309de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 310de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 311de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 312de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name); 313de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return OverloadedMethodRecord(L->MethodCount, L->MethList, Name); 314de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 315de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 316de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<DataMemberRecord> 317de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarDataMemberRecord::deserialize(TypeRecordKind Kind, ArrayRef<uint8_t> &Data) { 318de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 319de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint64_t Offset; 320de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 321de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_NUMERIC_FIELD(Offset), Name); 322de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return DataMemberRecord(L->Attrs.getAccess(), L->Type, Offset, Name); 323de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 324de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 325de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<StaticDataMemberRecord> 326de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarStaticDataMemberRecord::deserialize(TypeRecordKind Kind, 327de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 328de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 329de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 330de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Name); 331de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return StaticDataMemberRecord(L->Attrs.getAccess(), L->Type, Name); 332de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 333de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 334de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<EnumeratorRecord> 335de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarEnumeratorRecord::deserialize(TypeRecordKind Kind, ArrayRef<uint8_t> &Data) { 336de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 337de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar APSInt Value; 338de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar StringRef Name; 339de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, Value, Name); 340de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EnumeratorRecord(L->Attrs.getAccess(), Value, Name); 341de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 342de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 343de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<VFPtrRecord> VFPtrRecord::deserialize(TypeRecordKind Kind, 344de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 345de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 346de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (auto EC = consumeObject(Data, L)) 347de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return EC; 348de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return VFPtrRecord(L->Type); 349de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 350de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 351de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<BaseClassRecord> BaseClassRecord::deserialize(TypeRecordKind Kind, 352de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 353de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 354de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint64_t Offset; 355de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_NUMERIC_FIELD(Offset)); 356de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return BaseClassRecord(L->Attrs.getAccess(), L->BaseType, Offset); 357de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 358de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 359de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<VirtualBaseClassRecord> 360de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarVirtualBaseClassRecord::deserialize(TypeRecordKind Kind, 361de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 362de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 363de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint64_t Offset; 364de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar uint64_t Index; 365de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L, CV_NUMERIC_FIELD(Offset), CV_NUMERIC_FIELD(Index)); 366de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return VirtualBaseClassRecord(L->Attrs.getAccess(), L->BaseType, L->VBPtrType, 367de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Offset, Index); 368de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 369de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 370de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarErrorOr<ListContinuationRecord> 371de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga NainarListContinuationRecord::deserialize(TypeRecordKind Kind, 372de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar ArrayRef<uint8_t> &Data) { 373de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar const Layout *L = nullptr; 374de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar CV_DESERIALIZE(Data, L); 375de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return ListContinuationRecord(L->ContinuationIndex); 376de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 377de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 378de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===// 379de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar// Type index remapping 380de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar//===----------------------------------------------------------------------===// 381de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 382de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarstatic bool remapIndex(ArrayRef<TypeIndex> IndexMap, TypeIndex &Idx) { 383de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // Simple types are unchanged. 384de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (Idx.isSimple()) 385de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return true; 386de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar unsigned MapPos = Idx.getIndex() - TypeIndex::FirstNonSimpleIndex; 387de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (MapPos < IndexMap.size()) { 388de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Idx = IndexMap[MapPos]; 389de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return true; 390de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 391de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 392de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // This type index is invalid. Remap this to "not translated by cvpack", 393de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar // and return failure. 394de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Idx = TypeIndex(SimpleTypeKind::NotTranslated, SimpleTypeMode::Direct); 395de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return false; 396de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 397de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 398de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool ModifierRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 399de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, ModifiedType); 400de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 401de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 402de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool ProcedureRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 403de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 404de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ReturnType); 405de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ArgumentList); 406de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 407de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 408de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 409de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool MemberFunctionRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 410de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 411de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ReturnType); 412de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ClassType); 413de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ThisType); 414de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ArgumentList); 415de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 416de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 417de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 418de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool MemberFuncIdRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 419de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 420de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ClassType); 421de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, FunctionType); 422de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 423de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 424de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 425de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool ArgListRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 426de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 427de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (TypeIndex &Str : StringIndices) 428de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, Str); 429de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 430de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 431de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 432de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool MemberPointerInfo::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 433de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, ContainingType); 434de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 435de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 436de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool PointerRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 437de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 438de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ReferentType); 439de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if (isPointerToMember()) 440de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= MemberInfo.remapTypeIndices(IndexMap); 441de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 442de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 443de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 444de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool NestedTypeRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 445de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, Type); 446de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 447de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 448de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool ArrayRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 449de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 450de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ElementType); 451de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, IndexType); 452de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 453de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 454de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 455de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool TagRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 456de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, FieldList); 457de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 458de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 459de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool ClassRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 460de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 461de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= TagRecord::remapTypeIndices(IndexMap); 462de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, DerivationList); 463de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, VTableShape); 464de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 465de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 466de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 467de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool EnumRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 468de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 469de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= TagRecord::remapTypeIndices(IndexMap); 470de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, UnderlyingType); 471de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 472de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 473de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 474de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool BitFieldRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 475de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, Type); 476de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 477de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 478de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool VFTableShapeRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 479de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return true; 480de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 481de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 482de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool TypeServer2Record::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 483de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return true; 484de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 485de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 486de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool StringIdRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 487de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, Id); 488de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 489de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 490de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool FuncIdRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 491de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 492de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, ParentScope); 493de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, FunctionType); 494de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 495de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 496de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 497de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool UdtSourceLineRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 498de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 499de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, UDT); 500de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, SourceFile); 501de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 502de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 503de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 504de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool UdtModSourceLineRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 505de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 506de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, UDT); 507de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, SourceFile); 508de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 509de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 510de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 511de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool BuildInfoRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 512de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 513de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (TypeIndex &Arg : ArgIndices) 514de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, Arg); 515de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 516de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 517de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 518de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool VFTableRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 519de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 520de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, CompleteClass); 521de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, OverriddenVFTable); 522de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 523de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 524de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 525de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool OneMethodRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 526de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 527de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, Type); 528de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 529de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 530de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 531de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool MethodOverloadListRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 532de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 533de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (OneMethodRecord &Meth : Methods) 534de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar if ((Success = Meth.remapTypeIndices(IndexMap))) 535de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 536de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 537de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 538de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 539de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool OverloadedMethodRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 540de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, MethodList); 541de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 542de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 543de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool DataMemberRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 544de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, Type); 545de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 546de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 547de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool StaticDataMemberRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 548de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, Type); 549de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 550de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 551de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool EnumeratorRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 552de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return true; 553de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 554de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 555de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool VFPtrRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 556de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, Type); 557de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 558de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 559de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool BaseClassRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 560de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, Type); 561de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 562de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 563de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool VirtualBaseClassRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 564de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar bool Success = true; 565de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, BaseType); 566de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar Success &= remapIndex(IndexMap, VBPtrType); 567de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return Success; 568de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 569de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 570de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainarbool ListContinuationRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) { 571de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar return remapIndex(IndexMap, ContinuationIndex); 572de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} 573