//===-- MethodListRecordBuilder.cpp ---------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/CodeView/MethodListRecordBuilder.h" #include "llvm/DebugInfo/CodeView/FieldListRecordBuilder.h" using namespace llvm; using namespace codeview; MethodListRecordBuilder::MethodListRecordBuilder() : ListRecordBuilder(TypeRecordKind::MethodOverloadList) {} void MethodListRecordBuilder::writeMethod(MemberAccess Access, MethodKind Kind, MethodOptions Options, TypeIndex Type, int32_t VTableSlotOffset) { TypeRecordBuilder &Builder = getBuilder(); uint16_t Flags = static_cast(Access); Flags |= static_cast(Kind) << MethodKindShift; Flags |= static_cast(Options); Builder.writeUInt16(Flags); Builder.writeUInt16(0); Builder.writeTypeIndex(Type); switch (Kind) { case MethodKind::IntroducingVirtual: case MethodKind::PureIntroducingVirtual: assert(VTableSlotOffset >= 0); Builder.writeInt32(VTableSlotOffset); break; default: assert(VTableSlotOffset == -1); break; } // TODO: Fail if too big? } void MethodListRecordBuilder::writeMethod(const MethodInfo &Method) { writeMethod(Method.getAccess(), Method.getKind(), Method.getOptions(), Method.getType(), Method.getVTableSlotOffset()); }