1 | //===- PrettyBuiltinDumper.cpp ---------------------------------- *- 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 | #include "PrettyBuiltinDumper.h" |
10 | |
11 | #include "llvm/DebugInfo/PDB/Native/LinePrinter.h" |
12 | #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" |
13 | |
14 | using namespace llvm; |
15 | using namespace llvm::pdb; |
16 | |
17 | BuiltinDumper::BuiltinDumper(LinePrinter &P) |
18 | : PDBSymDumper(false), Printer(P) {} |
19 | |
20 | void BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol) { |
21 | if (Symbol.isConstType()) |
22 | WithColor(Printer, PDB_ColorItem::Keyword).get() << "const "; |
23 | if (Symbol.isVolatileType()) |
24 | WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile "; |
25 | WithColor(Printer, PDB_ColorItem::Type).get() << getTypeName(Symbol); |
26 | } |
27 | |
28 | StringRef BuiltinDumper::getTypeName(const PDBSymbolTypeBuiltin &Symbol) { |
29 | PDB_BuiltinType Type = Symbol.getBuiltinType(); |
30 | switch (Type) { |
31 | case PDB_BuiltinType::Float: |
32 | if (Symbol.getLength() == 4) |
33 | return "float"; |
34 | return "double"; |
35 | case PDB_BuiltinType::UInt: |
36 | switch (Symbol.getLength()) { |
37 | case 8: |
38 | return "unsigned __int64"; |
39 | case 4: |
40 | return "unsigned int"; |
41 | case 2: |
42 | return "unsigned short"; |
43 | case 1: |
44 | return "unsigned char"; |
45 | default: |
46 | return "unsigned"; |
47 | } |
48 | case PDB_BuiltinType::Int: |
49 | switch (Symbol.getLength()) { |
50 | case 8: |
51 | return "__int64"; |
52 | case 4: |
53 | return "int"; |
54 | case 2: |
55 | return "short"; |
56 | case 1: |
57 | return "char"; |
58 | default: |
59 | return "int"; |
60 | } |
61 | case PDB_BuiltinType::Char: |
62 | return "char"; |
63 | case PDB_BuiltinType::WCharT: |
64 | return "wchar_t"; |
65 | case PDB_BuiltinType::Void: |
66 | return "void"; |
67 | case PDB_BuiltinType::Long: |
68 | return "long"; |
69 | case PDB_BuiltinType::ULong: |
70 | return "unsigned long"; |
71 | case PDB_BuiltinType::Bool: |
72 | return "bool"; |
73 | case PDB_BuiltinType::Currency: |
74 | return "CURRENCY"; |
75 | case PDB_BuiltinType::Date: |
76 | return "DATE"; |
77 | case PDB_BuiltinType::Variant: |
78 | return "VARIANT"; |
79 | case PDB_BuiltinType::Complex: |
80 | return "complex"; |
81 | case PDB_BuiltinType::Bitfield: |
82 | return "bitfield"; |
83 | case PDB_BuiltinType::BSTR: |
84 | return "BSTR"; |
85 | case PDB_BuiltinType::HResult: |
86 | return "HRESULT"; |
87 | case PDB_BuiltinType::BCD: |
88 | return "HRESULT"; |
89 | case PDB_BuiltinType::Char16: |
90 | return "char16_t"; |
91 | case PDB_BuiltinType::Char32: |
92 | return "char32_t"; |
93 | case PDB_BuiltinType::Char8: |
94 | return "char8_t"; |
95 | case PDB_BuiltinType::None: |
96 | return "..."; |
97 | } |
98 | llvm_unreachable("Unknown PDB_BuiltinType"); |
99 | } |
100 |