1d88c1a5aSDimitry Andric //===- SymbolRecordMapping.h ------------------------------------*- C++ -*-===//
2d88c1a5aSDimitry Andric //
3d88c1a5aSDimitry Andric //                     The LLVM Compiler Infrastructure
4d88c1a5aSDimitry Andric //
5d88c1a5aSDimitry Andric // This file is distributed under the University of Illinois Open Source
6d88c1a5aSDimitry Andric // License. See LICENSE.TXT for details.
7d88c1a5aSDimitry Andric //
8d88c1a5aSDimitry Andric //===----------------------------------------------------------------------===//
9d88c1a5aSDimitry Andric 
10d88c1a5aSDimitry Andric #ifndef LLVM_DEBUGINFO_CODEVIEW_SYMBOLRECORDMAPPING_H
11d88c1a5aSDimitry Andric #define LLVM_DEBUGINFO_CODEVIEW_SYMBOLRECORDMAPPING_H
12d88c1a5aSDimitry Andric 
13d88c1a5aSDimitry Andric #include "llvm/DebugInfo/CodeView/CodeViewRecordIO.h"
14d88c1a5aSDimitry Andric #include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h"
15d88c1a5aSDimitry Andric 
16d88c1a5aSDimitry Andric namespace llvm {
177a7e6055SDimitry Andric class BinaryStreamReader;
187a7e6055SDimitry Andric class BinaryStreamWriter;
19d88c1a5aSDimitry Andric 
20d88c1a5aSDimitry Andric namespace codeview {
21d88c1a5aSDimitry Andric class SymbolRecordMapping : public SymbolVisitorCallbacks {
22d88c1a5aSDimitry Andric public:
SymbolRecordMapping(BinaryStreamReader & Reader,CodeViewContainer Container)23*6d97bb29SDimitry Andric   explicit SymbolRecordMapping(BinaryStreamReader &Reader,
24*6d97bb29SDimitry Andric                                CodeViewContainer Container)
25*6d97bb29SDimitry Andric       : IO(Reader), Container(Container) {}
SymbolRecordMapping(BinaryStreamWriter & Writer,CodeViewContainer Container)26*6d97bb29SDimitry Andric   explicit SymbolRecordMapping(BinaryStreamWriter &Writer,
27*6d97bb29SDimitry Andric                                CodeViewContainer Container)
28*6d97bb29SDimitry Andric       : IO(Writer), Container(Container) {}
29d88c1a5aSDimitry Andric 
30d88c1a5aSDimitry Andric   Error visitSymbolBegin(CVSymbol &Record) override;
31d88c1a5aSDimitry Andric   Error visitSymbolEnd(CVSymbol &Record) override;
32d88c1a5aSDimitry Andric 
33d88c1a5aSDimitry Andric #define SYMBOL_RECORD(EnumName, EnumVal, Name)                                 \
34d88c1a5aSDimitry Andric   Error visitKnownRecord(CVSymbol &CVR, Name &Record) override;
35d88c1a5aSDimitry Andric #define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
36f9448bf3SDimitry Andric #include "llvm/DebugInfo/CodeView/CodeViewSymbols.def"
37d88c1a5aSDimitry Andric 
38d88c1a5aSDimitry Andric private:
39d88c1a5aSDimitry Andric   Optional<SymbolKind> Kind;
40d88c1a5aSDimitry Andric 
41d88c1a5aSDimitry Andric   CodeViewRecordIO IO;
42*6d97bb29SDimitry Andric   CodeViewContainer Container;
43d88c1a5aSDimitry Andric };
44d88c1a5aSDimitry Andric }
45d88c1a5aSDimitry Andric }
46d88c1a5aSDimitry Andric 
47d88c1a5aSDimitry Andric #endif
48