100 lines · cpp
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-exception6//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