|  | //===- PrettyBuiltinDumper.cpp ---------------------------------- *- C++ *-===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "PrettyBuiltinDumper.h" | 
|  | #include "LinePrinter.h" | 
|  |  | 
|  | #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" | 
|  |  | 
|  | using namespace llvm; | 
|  | using namespace llvm::pdb; | 
|  |  | 
|  | BuiltinDumper::BuiltinDumper(LinePrinter &P) | 
|  | : PDBSymDumper(false), Printer(P) {} | 
|  |  | 
|  | void BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol) { | 
|  | if (Symbol.isConstType()) | 
|  | WithColor(Printer, PDB_ColorItem::Keyword).get() << "const "; | 
|  | if (Symbol.isVolatileType()) | 
|  | WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile "; | 
|  | WithColor(Printer, PDB_ColorItem::Type).get() << getTypeName(Symbol); | 
|  | } | 
|  |  | 
|  | StringRef BuiltinDumper::getTypeName(const PDBSymbolTypeBuiltin &Symbol) { | 
|  | PDB_BuiltinType Type = Symbol.getBuiltinType(); | 
|  | switch (Type) { | 
|  | case PDB_BuiltinType::Float: | 
|  | if (Symbol.getLength() == 4) | 
|  | return "float"; | 
|  | return "double"; | 
|  | case PDB_BuiltinType::UInt: | 
|  | switch (Symbol.getLength()) { | 
|  | case 8: | 
|  | return "unsigned __int64"; | 
|  | case 4: | 
|  | return "unsigned int"; | 
|  | case 2: | 
|  | return "unsigned short"; | 
|  | case 1: | 
|  | return "unsigned char"; | 
|  | default: | 
|  | return "unsigned"; | 
|  | } | 
|  | case PDB_BuiltinType::Int: | 
|  | switch (Symbol.getLength()) { | 
|  | case 8: | 
|  | return "__int64"; | 
|  | case 4: | 
|  | return "int"; | 
|  | case 2: | 
|  | return "short"; | 
|  | case 1: | 
|  | return "char"; | 
|  | default: | 
|  | return "int"; | 
|  | } | 
|  | case PDB_BuiltinType::Char: | 
|  | return "char"; | 
|  | case PDB_BuiltinType::WCharT: | 
|  | return "wchar_t"; | 
|  | case PDB_BuiltinType::Void: | 
|  | return "void"; | 
|  | case PDB_BuiltinType::Long: | 
|  | return "long"; | 
|  | case PDB_BuiltinType::ULong: | 
|  | return "unsigned long"; | 
|  | case PDB_BuiltinType::Bool: | 
|  | return "bool"; | 
|  | case PDB_BuiltinType::Currency: | 
|  | return "CURRENCY"; | 
|  | case PDB_BuiltinType::Date: | 
|  | return "DATE"; | 
|  | case PDB_BuiltinType::Variant: | 
|  | return "VARIANT"; | 
|  | case PDB_BuiltinType::Complex: | 
|  | return "complex"; | 
|  | case PDB_BuiltinType::Bitfield: | 
|  | return "bitfield"; | 
|  | case PDB_BuiltinType::BSTR: | 
|  | return "BSTR"; | 
|  | case PDB_BuiltinType::HResult: | 
|  | return "HRESULT"; | 
|  | case PDB_BuiltinType::BCD: | 
|  | return "HRESULT"; | 
|  | case PDB_BuiltinType::Char16: | 
|  | return "char16_t"; | 
|  | case PDB_BuiltinType::Char32: | 
|  | return "char32_t"; | 
|  | case PDB_BuiltinType::None: | 
|  | return "..."; | 
|  | } | 
|  | llvm_unreachable("Unknown PDB_BuiltinType"); | 
|  | } |