1*8c099fe0SZachary Turner //===- DebugSubsectionVisitor.cpp ---------------------------*- C++ -*-===//
2*8c099fe0SZachary Turner //
3*8c099fe0SZachary Turner //                     The LLVM Compiler Infrastructure
4*8c099fe0SZachary Turner //
5*8c099fe0SZachary Turner // This file is distributed under the University of Illinois Open Source
6*8c099fe0SZachary Turner // License. See LICENSE.TXT for details.
7*8c099fe0SZachary Turner //
8*8c099fe0SZachary Turner //===----------------------------------------------------------------------===//
9*8c099fe0SZachary Turner 
10*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h"
11*8c099fe0SZachary Turner 
12*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
13*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h"
14*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h"
15*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
16*8c099fe0SZachary Turner #include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h"
17*8c099fe0SZachary Turner #include "llvm/Support/BinaryStreamReader.h"
18*8c099fe0SZachary Turner #include "llvm/Support/BinaryStreamRef.h"
19*8c099fe0SZachary Turner 
20*8c099fe0SZachary Turner using namespace llvm;
21*8c099fe0SZachary Turner using namespace llvm::codeview;
22*8c099fe0SZachary Turner 
23*8c099fe0SZachary Turner Error llvm::codeview::visitDebugSubsection(const DebugSubsectionRecord &R,
24*8c099fe0SZachary Turner                                            DebugSubsectionVisitor &V) {
25*8c099fe0SZachary Turner   BinaryStreamReader Reader(R.getRecordData());
26*8c099fe0SZachary Turner   switch (R.kind()) {
27*8c099fe0SZachary Turner   case DebugSubsectionKind::Lines: {
28*8c099fe0SZachary Turner     DebugLinesSubsectionRef Fragment;
29*8c099fe0SZachary Turner     if (auto EC = Fragment.initialize(Reader))
30*8c099fe0SZachary Turner       return EC;
31*8c099fe0SZachary Turner 
32*8c099fe0SZachary Turner     return V.visitLines(Fragment);
33*8c099fe0SZachary Turner   }
34*8c099fe0SZachary Turner   case DebugSubsectionKind::FileChecksums: {
35*8c099fe0SZachary Turner     DebugChecksumsSubsectionRef Fragment;
36*8c099fe0SZachary Turner     if (auto EC = Fragment.initialize(Reader))
37*8c099fe0SZachary Turner       return EC;
38*8c099fe0SZachary Turner 
39*8c099fe0SZachary Turner     return V.visitFileChecksums(Fragment);
40*8c099fe0SZachary Turner   }
41*8c099fe0SZachary Turner   case DebugSubsectionKind::InlineeLines: {
42*8c099fe0SZachary Turner     DebugInlineeLinesSubsectionRef Fragment;
43*8c099fe0SZachary Turner     if (auto EC = Fragment.initialize(Reader))
44*8c099fe0SZachary Turner       return EC;
45*8c099fe0SZachary Turner     return V.visitInlineeLines(Fragment);
46*8c099fe0SZachary Turner   }
47*8c099fe0SZachary Turner   default: {
48*8c099fe0SZachary Turner     DebugUnknownSubsectionRef Fragment(R.kind(), R.getRecordData());
49*8c099fe0SZachary Turner     return V.visitUnknown(Fragment);
50*8c099fe0SZachary Turner   }
51*8c099fe0SZachary Turner   }
52*8c099fe0SZachary Turner }
53