| Zachary Turner | a9054dd | 2017-01-11 00:35:43 +0000 | [diff] [blame] | 1 | //===- PrettyBuiltinDumper.cpp ---------------------------------- *- C++ *-===// | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 2 | // | 
| Chandler Carruth | 2946cd7 | 2019-01-19 08:50:56 +0000 | [diff] [blame] | 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 | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 6 | // | 
|  | 7 | //===----------------------------------------------------------------------===// | 
|  | 8 |  | 
| Zachary Turner | a9054dd | 2017-01-11 00:35:43 +0000 | [diff] [blame] | 9 | #include "PrettyBuiltinDumper.h" | 
| Zachary Turner | 2d11c20 | 2015-02-27 09:15:59 +0000 | [diff] [blame] | 10 | #include "LinePrinter.h" | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 11 |  | 
|  | 12 | #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" | 
|  | 13 |  | 
|  | 14 | using namespace llvm; | 
| Zachary Turner | ec28fc3 | 2016-05-04 20:32:13 +0000 | [diff] [blame] | 15 | using namespace llvm::pdb; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 16 |  | 
| Zachary Turner | 2d11c20 | 2015-02-27 09:15:59 +0000 | [diff] [blame] | 17 | BuiltinDumper::BuiltinDumper(LinePrinter &P) | 
|  | 18 | : PDBSymDumper(false), Printer(P) {} | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 19 |  | 
| Zachary Turner | b52d08d | 2015-03-01 06:51:29 +0000 | [diff] [blame] | 20 | void BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol) { | 
| Adrian McCarthy | 08eb343 | 2017-04-10 16:43:09 +0000 | [diff] [blame] | 21 | if (Symbol.isConstType()) | 
|  | 22 | WithColor(Printer, PDB_ColorItem::Keyword).get() << "const "; | 
|  | 23 | if (Symbol.isVolatileType()) | 
|  | 24 | WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile "; | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 25 | WithColor(Printer, PDB_ColorItem::Type).get() << getTypeName(Symbol); | 
|  | 26 | } | 
|  | 27 |  | 
|  | 28 | StringRef BuiltinDumper::getTypeName(const PDBSymbolTypeBuiltin &Symbol) { | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 29 | PDB_BuiltinType Type = Symbol.getBuiltinType(); | 
|  | 30 | switch (Type) { | 
|  | 31 | case PDB_BuiltinType::Float: | 
| Zachary Turner | 2d11c20 | 2015-02-27 09:15:59 +0000 | [diff] [blame] | 32 | if (Symbol.getLength() == 4) | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 33 | return "float"; | 
|  | 34 | return "double"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 35 | case PDB_BuiltinType::UInt: | 
| Zachary Turner | 4d5535a | 2016-04-11 20:39:17 +0000 | [diff] [blame] | 36 | switch (Symbol.getLength()) { | 
|  | 37 | case 8: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 38 | return "unsigned __int64"; | 
| Zachary Turner | 4d5535a | 2016-04-11 20:39:17 +0000 | [diff] [blame] | 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 | } | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 48 | case PDB_BuiltinType::Int: | 
| Zachary Turner | 4d5535a | 2016-04-11 20:39:17 +0000 | [diff] [blame] | 49 | switch (Symbol.getLength()) { | 
|  | 50 | case 8: | 
|  | 51 | return "__int64"; | 
|  | 52 | case 4: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 53 | return "int"; | 
| Zachary Turner | 4d5535a | 2016-04-11 20:39:17 +0000 | [diff] [blame] | 54 | case 2: | 
|  | 55 | return "short"; | 
|  | 56 | case 1: | 
|  | 57 | return "char"; | 
|  | 58 | default: | 
|  | 59 | return "int"; | 
|  | 60 | } | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 61 | case PDB_BuiltinType::Char: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 62 | return "char"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 63 | case PDB_BuiltinType::WCharT: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 64 | return "wchar_t"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 65 | case PDB_BuiltinType::Void: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 66 | return "void"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 67 | case PDB_BuiltinType::Long: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 68 | return "long"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 69 | case PDB_BuiltinType::ULong: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 70 | return "unsigned long"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 71 | case PDB_BuiltinType::Bool: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 72 | return "bool"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 73 | case PDB_BuiltinType::Currency: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 74 | return "CURRENCY"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 75 | case PDB_BuiltinType::Date: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 76 | return "DATE"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 77 | case PDB_BuiltinType::Variant: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 78 | return "VARIANT"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 79 | case PDB_BuiltinType::Complex: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 80 | return "complex"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 81 | case PDB_BuiltinType::Bitfield: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 82 | return "bitfield"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 83 | case PDB_BuiltinType::BSTR: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 84 | return "BSTR"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 85 | case PDB_BuiltinType::HResult: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 86 | return "HRESULT"; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 87 | case PDB_BuiltinType::BCD: | 
| Rui Ueyama | f4acad3 | 2015-11-03 20:16:18 +0000 | [diff] [blame] | 88 | return "HRESULT"; | 
| Adrian McCarthy | 4b1a89f | 2018-02-22 23:16:56 +0000 | [diff] [blame] | 89 | case PDB_BuiltinType::Char16: | 
|  | 90 | return "char16_t"; | 
|  | 91 | case PDB_BuiltinType::Char32: | 
|  | 92 | return "char32_t"; | 
| Aaron Smith | 53a1a16 | 2018-01-17 01:22:03 +0000 | [diff] [blame] | 93 | case PDB_BuiltinType::None: | 
|  | 94 | return "..."; | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 95 | } | 
| Simon Pilgrim | e01b58f | 2018-01-17 18:16:28 +0000 | [diff] [blame] | 96 | llvm_unreachable("Unknown PDB_BuiltinType"); | 
| Zachary Turner | aa57c0a | 2015-02-26 23:51:49 +0000 | [diff] [blame] | 97 | } |