Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- ContinuationRecordBuilder.h ------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
 
9
#ifndef LLVM_DEBUGINFO_CODEVIEW_CONTINUATIONRECORDBUILDER_H
10
#define LLVM_DEBUGINFO_CODEVIEW_CONTINUATIONRECORDBUILDER_H
11
 
12
#include "llvm/ADT/ArrayRef.h"
13
#include "llvm/ADT/SmallVector.h"
14
#include "llvm/DebugInfo/CodeView/CVRecord.h"
15
#include "llvm/DebugInfo/CodeView/TypeRecordMapping.h"
16
#include "llvm/Support/BinaryByteStream.h"
17
#include "llvm/Support/BinaryStreamWriter.h"
18
#include <cstdint>
19
#include <vector>
20
 
21
namespace llvm {
22
namespace codeview {
23
class TypeIndex;
24
enum class ContinuationRecordKind { FieldList, MethodOverloadList };
25
 
26
class ContinuationRecordBuilder {
27
  SmallVector<uint32_t, 4> SegmentOffsets;
28
  std::optional<ContinuationRecordKind> Kind;
29
  AppendingBinaryByteStream Buffer;
30
  BinaryStreamWriter SegmentWriter;
31
  TypeRecordMapping Mapping;
32
  ArrayRef<uint8_t> InjectedSegmentBytes;
33
 
34
  uint32_t getCurrentSegmentLength() const;
35
 
36
  void insertSegmentEnd(uint32_t Offset);
37
  CVType createSegmentRecord(uint32_t OffBegin, uint32_t OffEnd,
38
                             std::optional<TypeIndex> RefersTo);
39
 
40
public:
41
  ContinuationRecordBuilder();
42
  ~ContinuationRecordBuilder();
43
 
44
  void begin(ContinuationRecordKind RecordKind);
45
 
46
  // This template is explicitly instantiated in the implementation file for all
47
  // supported types.  The method itself is ugly, so inlining it into the header
48
  // file clutters an otherwise straightforward interface.
49
  template <typename RecordType> void writeMemberType(RecordType &Record);
50
 
51
  std::vector<CVType> end(TypeIndex Index);
52
};
53
} // namespace codeview
54
} // namespace llvm
55
 
56
#endif