blob: cd01a4004819157bf3796c7b89e5acc87ee16f9c [file] [log] [blame]
Zachary Turnera9054dd2017-01-11 00:35:43 +00001//===- PrettyBuiltinDumper.cpp ---------------------------------- *- C++ *-===//
Zachary Turneraa57c0a2015-02-26 23:51:49 +00002//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Zachary Turneraa57c0a2015-02-26 23:51:49 +00006//
7//===----------------------------------------------------------------------===//
8
Zachary Turnera9054dd2017-01-11 00:35:43 +00009#include "PrettyBuiltinDumper.h"
Zachary Turner2d11c202015-02-27 09:15:59 +000010#include "LinePrinter.h"
Zachary Turneraa57c0a2015-02-26 23:51:49 +000011
12#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
13
14using namespace llvm;
Zachary Turnerec28fc32016-05-04 20:32:13 +000015using namespace llvm::pdb;
Zachary Turneraa57c0a2015-02-26 23:51:49 +000016
Zachary Turner2d11c202015-02-27 09:15:59 +000017BuiltinDumper::BuiltinDumper(LinePrinter &P)
18 : PDBSymDumper(false), Printer(P) {}
Zachary Turneraa57c0a2015-02-26 23:51:49 +000019
Zachary Turnerb52d08d2015-03-01 06:51:29 +000020void BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol) {
Adrian McCarthy08eb3432017-04-10 16:43:09 +000021 if (Symbol.isConstType())
22 WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
23 if (Symbol.isVolatileType())
24 WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
Rui Ueyamaf4acad32015-11-03 20:16:18 +000025 WithColor(Printer, PDB_ColorItem::Type).get() << getTypeName(Symbol);
26}
27
28StringRef BuiltinDumper::getTypeName(const PDBSymbolTypeBuiltin &Symbol) {
Zachary Turneraa57c0a2015-02-26 23:51:49 +000029 PDB_BuiltinType Type = Symbol.getBuiltinType();
30 switch (Type) {
31 case PDB_BuiltinType::Float:
Zachary Turner2d11c202015-02-27 09:15:59 +000032 if (Symbol.getLength() == 4)
Rui Ueyamaf4acad32015-11-03 20:16:18 +000033 return "float";
34 return "double";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000035 case PDB_BuiltinType::UInt:
Zachary Turner4d5535a2016-04-11 20:39:17 +000036 switch (Symbol.getLength()) {
37 case 8:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000038 return "unsigned __int64";
Zachary Turner4d5535a2016-04-11 20:39:17 +000039 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 }
Zachary Turneraa57c0a2015-02-26 23:51:49 +000048 case PDB_BuiltinType::Int:
Zachary Turner4d5535a2016-04-11 20:39:17 +000049 switch (Symbol.getLength()) {
50 case 8:
51 return "__int64";
52 case 4:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000053 return "int";
Zachary Turner4d5535a2016-04-11 20:39:17 +000054 case 2:
55 return "short";
56 case 1:
57 return "char";
58 default:
59 return "int";
60 }
Zachary Turneraa57c0a2015-02-26 23:51:49 +000061 case PDB_BuiltinType::Char:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000062 return "char";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000063 case PDB_BuiltinType::WCharT:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000064 return "wchar_t";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000065 case PDB_BuiltinType::Void:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000066 return "void";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000067 case PDB_BuiltinType::Long:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000068 return "long";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000069 case PDB_BuiltinType::ULong:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000070 return "unsigned long";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000071 case PDB_BuiltinType::Bool:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000072 return "bool";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000073 case PDB_BuiltinType::Currency:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000074 return "CURRENCY";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000075 case PDB_BuiltinType::Date:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000076 return "DATE";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000077 case PDB_BuiltinType::Variant:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000078 return "VARIANT";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000079 case PDB_BuiltinType::Complex:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000080 return "complex";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000081 case PDB_BuiltinType::Bitfield:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000082 return "bitfield";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000083 case PDB_BuiltinType::BSTR:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000084 return "BSTR";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000085 case PDB_BuiltinType::HResult:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000086 return "HRESULT";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000087 case PDB_BuiltinType::BCD:
Rui Ueyamaf4acad32015-11-03 20:16:18 +000088 return "HRESULT";
Adrian McCarthy4b1a89f2018-02-22 23:16:56 +000089 case PDB_BuiltinType::Char16:
90 return "char16_t";
91 case PDB_BuiltinType::Char32:
92 return "char32_t";
Aaron Smith53a1a162018-01-17 01:22:03 +000093 case PDB_BuiltinType::None:
94 return "...";
Zachary Turneraa57c0a2015-02-26 23:51:49 +000095 }
Simon Pilgrime01b58f2018-01-17 18:16:28 +000096 llvm_unreachable("Unknown PDB_BuiltinType");
Zachary Turneraa57c0a2015-02-26 23:51:49 +000097}