blob: bcdecca81aecad57c897292ab851e4d2d03cfc69 [file] [log] [blame]
Zachary Turnereb6ab042017-01-11 00:35:43 +00001//===- PrettyBuiltinDumper.cpp ---------------------------------- *- C++ *-===//
Zachary Turner4490f2d2015-02-26 23:51:49 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Zachary Turnereb6ab042017-01-11 00:35:43 +000010#include "PrettyBuiltinDumper.h"
Zachary Turner756b8232015-02-27 09:15:59 +000011#include "LinePrinter.h"
Zachary Turner4490f2d2015-02-26 23:51:49 +000012
13#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
14
15using namespace llvm;
Zachary Turnerc95df942016-05-04 20:32:13 +000016using namespace llvm::pdb;
Zachary Turner4490f2d2015-02-26 23:51:49 +000017
Zachary Turner756b8232015-02-27 09:15:59 +000018BuiltinDumper::BuiltinDumper(LinePrinter &P)
19 : PDBSymDumper(false), Printer(P) {}
Zachary Turner4490f2d2015-02-26 23:51:49 +000020
Zachary Turner53e4b562015-03-01 06:51:29 +000021void BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol) {
Adrian McCarthy95d726a2017-04-10 16:43:09 +000022 if (Symbol.isConstType())
23 WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
24 if (Symbol.isVolatileType())
25 WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
Rui Ueyama7c5ec542015-11-03 20:16:18 +000026 WithColor(Printer, PDB_ColorItem::Type).get() << getTypeName(Symbol);
27}
28
29StringRef BuiltinDumper::getTypeName(const PDBSymbolTypeBuiltin &Symbol) {
Zachary Turner4490f2d2015-02-26 23:51:49 +000030 PDB_BuiltinType Type = Symbol.getBuiltinType();
31 switch (Type) {
32 case PDB_BuiltinType::Float:
Zachary Turner756b8232015-02-27 09:15:59 +000033 if (Symbol.getLength() == 4)
Rui Ueyama7c5ec542015-11-03 20:16:18 +000034 return "float";
35 return "double";
Zachary Turner4490f2d2015-02-26 23:51:49 +000036 case PDB_BuiltinType::UInt:
Zachary Turner21c13042016-04-11 20:39:17 +000037 switch (Symbol.getLength()) {
38 case 8:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000039 return "unsigned __int64";
Zachary Turner21c13042016-04-11 20:39:17 +000040 case 4:
41 return "unsigned int";
42 case 2:
43 return "unsigned short";
44 case 1:
45 return "unsigned char";
46 default:
47 return "unsigned";
48 }
Zachary Turner4490f2d2015-02-26 23:51:49 +000049 case PDB_BuiltinType::Int:
Zachary Turner21c13042016-04-11 20:39:17 +000050 switch (Symbol.getLength()) {
51 case 8:
52 return "__int64";
53 case 4:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000054 return "int";
Zachary Turner21c13042016-04-11 20:39:17 +000055 case 2:
56 return "short";
57 case 1:
58 return "char";
59 default:
60 return "int";
61 }
Zachary Turner4490f2d2015-02-26 23:51:49 +000062 case PDB_BuiltinType::Char:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000063 return "char";
Zachary Turner4490f2d2015-02-26 23:51:49 +000064 case PDB_BuiltinType::WCharT:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000065 return "wchar_t";
Zachary Turner4490f2d2015-02-26 23:51:49 +000066 case PDB_BuiltinType::Void:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000067 return "void";
Zachary Turner4490f2d2015-02-26 23:51:49 +000068 case PDB_BuiltinType::Long:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000069 return "long";
Zachary Turner4490f2d2015-02-26 23:51:49 +000070 case PDB_BuiltinType::ULong:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000071 return "unsigned long";
Zachary Turner4490f2d2015-02-26 23:51:49 +000072 case PDB_BuiltinType::Bool:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000073 return "bool";
Zachary Turner4490f2d2015-02-26 23:51:49 +000074 case PDB_BuiltinType::Currency:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000075 return "CURRENCY";
Zachary Turner4490f2d2015-02-26 23:51:49 +000076 case PDB_BuiltinType::Date:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000077 return "DATE";
Zachary Turner4490f2d2015-02-26 23:51:49 +000078 case PDB_BuiltinType::Variant:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000079 return "VARIANT";
Zachary Turner4490f2d2015-02-26 23:51:49 +000080 case PDB_BuiltinType::Complex:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000081 return "complex";
Zachary Turner4490f2d2015-02-26 23:51:49 +000082 case PDB_BuiltinType::Bitfield:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000083 return "bitfield";
Zachary Turner4490f2d2015-02-26 23:51:49 +000084 case PDB_BuiltinType::BSTR:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000085 return "BSTR";
Zachary Turner4490f2d2015-02-26 23:51:49 +000086 case PDB_BuiltinType::HResult:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000087 return "HRESULT";
Zachary Turner4490f2d2015-02-26 23:51:49 +000088 case PDB_BuiltinType::BCD:
Rui Ueyama7c5ec542015-11-03 20:16:18 +000089 return "HRESULT";
Adrian McCarthy1d5bed062018-02-22 23:16:56 +000090 case PDB_BuiltinType::Char16:
91 return "char16_t";
92 case PDB_BuiltinType::Char32:
93 return "char32_t";
Aaron Smith7e2c2992018-01-17 01:22:03 +000094 case PDB_BuiltinType::None:
95 return "...";
Zachary Turner4490f2d2015-02-26 23:51:49 +000096 }
Simon Pilgrimb2367d12018-01-17 18:16:28 +000097 llvm_unreachable("Unknown PDB_BuiltinType");
Zachary Turner4490f2d2015-02-26 23:51:49 +000098}