1//===- FieldListRecordBuilder.h ---------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLVM_DEBUGINFO_CODEVIEW_FIELDLISTRECORDBUILDER_H
11#define LLVM_DEBUGINFO_CODEVIEW_FIELDLISTRECORDBUILDER_H
12
13#include "llvm/DebugInfo/CodeView/ListRecordBuilder.h"
14#include "llvm/DebugInfo/CodeView/TypeRecord.h"
15
16namespace llvm {
17namespace codeview {
18
19class MethodInfo {
20public:
21  MethodInfo() : Access(), Kind(), Options(), Type(), VTableSlotOffset(-1) {}
22
23  MethodInfo(MemberAccess Access, MethodKind Kind, MethodOptions Options,
24             TypeIndex Type, int32_t VTableSlotOffset)
25      : Access(Access), Kind(Kind), Options(Options), Type(Type),
26        VTableSlotOffset(VTableSlotOffset) {}
27
28  MemberAccess getAccess() const { return Access; }
29  MethodKind getKind() const { return Kind; }
30  MethodOptions getOptions() const { return Options; }
31  TypeIndex getType() const { return Type; }
32  int32_t getVTableSlotOffset() const { return VTableSlotOffset; }
33
34private:
35  MemberAccess Access;
36  MethodKind Kind;
37  MethodOptions Options;
38  TypeIndex Type;
39  int32_t VTableSlotOffset;
40};
41
42class FieldListRecordBuilder : public ListRecordBuilder {
43private:
44  FieldListRecordBuilder(const FieldListRecordBuilder &) = delete;
45  void operator=(const FieldListRecordBuilder &) = delete;
46
47public:
48  FieldListRecordBuilder();
49
50  void reset() { ListRecordBuilder::reset(); }
51
52  void writeBaseClass(const BaseClassRecord &Record);
53  void writeEnumerator(const EnumeratorRecord &Record);
54  void writeDataMember(const DataMemberRecord &Record);
55  void writeOneMethod(const OneMethodRecord &Record);
56  void writeOverloadedMethod(const OverloadedMethodRecord &Record);
57  void writeNestedType(const NestedTypeRecord &Record);
58  void writeStaticDataMember(const StaticDataMemberRecord &Record);
59  void writeVirtualBaseClass(const VirtualBaseClassRecord &Record);
60  void writeVFPtr(const VFPtrRecord &Type);
61};
62}
63}
64
65#endif
66