]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h
Merge llvm, clang, lld, lldb, compiler-rt and libc++ r308421, and update
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / DebugInfo / CodeView / TypeStreamMerger.h
1 //===- TypeStreamMerger.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_TYPESTREAMMERGER_H
11 #define LLVM_DEBUGINFO_CODEVIEW_TYPESTREAMMERGER_H
12
13 #include "llvm/ADT/ArrayRef.h"
14 #include "llvm/ADT/SmallVector.h"
15 #include "llvm/DebugInfo/CodeView/TypeRecord.h"
16 #include "llvm/Support/Error.h"
17
18 namespace llvm {
19 namespace codeview {
20
21 class TypeIndex;
22 class TypeTableBuilder;
23
24 /// \brief Merge one set of type records into another.  This method assumes
25 /// that all records are type records, and there are no Id records present.
26 ///
27 /// \param Dest The table to store the re-written type records into.
28 ///
29 /// \param SourceToDest A vector, indexed by the TypeIndex in the source
30 /// type stream, that contains the index of the corresponding type record
31 /// in the destination stream.
32 ///
33 /// \param Types The collection of types to merge in.
34 ///
35 /// \returns Error::success() if the operation succeeded, otherwise an
36 /// appropriate error code.
37 Error mergeTypeRecords(TypeTableBuilder &Dest,
38                        SmallVectorImpl<TypeIndex> &SourceToDest,
39                        const CVTypeArray &Types);
40
41 /// \brief Merge one set of id records into another.  This method assumes
42 /// that all records are id records, and there are no Type records present.
43 /// However, since Id records can refer back to Type records, this method
44 /// assumes that the referenced type records have also been merged into
45 /// another type stream (for example using the above method), and accepts
46 /// the mapping from source to dest for that stream so that it can re-write
47 /// the type record mappings accordingly.
48 ///
49 /// \param Dest The table to store the re-written id records into.
50 ///
51 /// \param Types The mapping to use for the type records that these id
52 /// records refer to.
53 ///
54 /// \param SourceToDest A vector, indexed by the TypeIndex in the source
55 /// id stream, that contains the index of the corresponding id record
56 /// in the destination stream.
57 ///
58 /// \param Ids The collection of id records to merge in.
59 ///
60 /// \returns Error::success() if the operation succeeded, otherwise an
61 /// appropriate error code.
62 Error mergeIdRecords(TypeTableBuilder &Dest, ArrayRef<TypeIndex> Types,
63                      SmallVectorImpl<TypeIndex> &SourceToDest,
64                      const CVTypeArray &Ids);
65
66 /// \brief Merge a unified set of type and id records, splitting them into
67 /// separate output streams.
68 ///
69 /// \param DestIds The table to store the re-written id records into.
70 ///
71 /// \param DestTypes the table to store the re-written type records into.
72 ///
73 /// \param SourceToDest A vector, indexed by the TypeIndex in the source
74 /// id stream, that contains the index of the corresponding id record
75 /// in the destination stream.
76 ///
77 /// \param IdsAndTypes The collection of id records to merge in.
78 ///
79 /// \returns Error::success() if the operation succeeded, otherwise an
80 /// appropriate error code.
81 Error mergeTypeAndIdRecords(TypeTableBuilder &DestIds,
82                             TypeTableBuilder &DestTypes,
83                             SmallVectorImpl<TypeIndex> &SourceToDest,
84                             const CVTypeArray &IdsAndTypes);
85
86 } // end namespace codeview
87 } // end namespace llvm
88
89 #endif // LLVM_DEBUGINFO_CODEVIEW_TYPESTREAMMERGER_H