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
14using namespace llvm;
15using namespace llvm::pdb;
16
17BuiltinDumper::BuiltinDumper(LinePrinter &P)
18 : PDBSymDumper(false), Printer(P) {}
19
20void 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
28StringRef 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