109467b48Spatrick //===- PrettyBuiltinDumper.cpp ---------------------------------- *- C++ *-===// 209467b48Spatrick // 309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information. 509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 609467b48Spatrick // 709467b48Spatrick //===----------------------------------------------------------------------===// 809467b48Spatrick 909467b48Spatrick #include "PrettyBuiltinDumper.h" 1009467b48Spatrick 11*d415bd75Srobert #include "llvm/DebugInfo/PDB/Native/LinePrinter.h" 1209467b48Spatrick #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" 1309467b48Spatrick 1409467b48Spatrick using namespace llvm; 1509467b48Spatrick using namespace llvm::pdb; 1609467b48Spatrick BuiltinDumper(LinePrinter & P)1709467b48SpatrickBuiltinDumper::BuiltinDumper(LinePrinter &P) 1809467b48Spatrick : PDBSymDumper(false), Printer(P) {} 1909467b48Spatrick start(const PDBSymbolTypeBuiltin & Symbol)2009467b48Spatrickvoid BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol) { 2109467b48Spatrick if (Symbol.isConstType()) 2209467b48Spatrick WithColor(Printer, PDB_ColorItem::Keyword).get() << "const "; 2309467b48Spatrick if (Symbol.isVolatileType()) 2409467b48Spatrick WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile "; 2509467b48Spatrick WithColor(Printer, PDB_ColorItem::Type).get() << getTypeName(Symbol); 2609467b48Spatrick } 2709467b48Spatrick getTypeName(const PDBSymbolTypeBuiltin & Symbol)2809467b48SpatrickStringRef BuiltinDumper::getTypeName(const PDBSymbolTypeBuiltin &Symbol) { 2909467b48Spatrick PDB_BuiltinType Type = Symbol.getBuiltinType(); 3009467b48Spatrick switch (Type) { 3109467b48Spatrick case PDB_BuiltinType::Float: 3209467b48Spatrick if (Symbol.getLength() == 4) 3309467b48Spatrick return "float"; 3409467b48Spatrick return "double"; 3509467b48Spatrick case PDB_BuiltinType::UInt: 3609467b48Spatrick switch (Symbol.getLength()) { 3709467b48Spatrick case 8: 3809467b48Spatrick return "unsigned __int64"; 3909467b48Spatrick case 4: 4009467b48Spatrick return "unsigned int"; 4109467b48Spatrick case 2: 4209467b48Spatrick return "unsigned short"; 4309467b48Spatrick case 1: 4409467b48Spatrick return "unsigned char"; 4509467b48Spatrick default: 4609467b48Spatrick return "unsigned"; 4709467b48Spatrick } 4809467b48Spatrick case PDB_BuiltinType::Int: 4909467b48Spatrick switch (Symbol.getLength()) { 5009467b48Spatrick case 8: 5109467b48Spatrick return "__int64"; 5209467b48Spatrick case 4: 5309467b48Spatrick return "int"; 5409467b48Spatrick case 2: 5509467b48Spatrick return "short"; 5609467b48Spatrick case 1: 5709467b48Spatrick return "char"; 5809467b48Spatrick default: 5909467b48Spatrick return "int"; 6009467b48Spatrick } 6109467b48Spatrick case PDB_BuiltinType::Char: 6209467b48Spatrick return "char"; 6309467b48Spatrick case PDB_BuiltinType::WCharT: 6409467b48Spatrick return "wchar_t"; 6509467b48Spatrick case PDB_BuiltinType::Void: 6609467b48Spatrick return "void"; 6709467b48Spatrick case PDB_BuiltinType::Long: 6809467b48Spatrick return "long"; 6909467b48Spatrick case PDB_BuiltinType::ULong: 7009467b48Spatrick return "unsigned long"; 7109467b48Spatrick case PDB_BuiltinType::Bool: 7209467b48Spatrick return "bool"; 7309467b48Spatrick case PDB_BuiltinType::Currency: 7409467b48Spatrick return "CURRENCY"; 7509467b48Spatrick case PDB_BuiltinType::Date: 7609467b48Spatrick return "DATE"; 7709467b48Spatrick case PDB_BuiltinType::Variant: 7809467b48Spatrick return "VARIANT"; 7909467b48Spatrick case PDB_BuiltinType::Complex: 8009467b48Spatrick return "complex"; 8109467b48Spatrick case PDB_BuiltinType::Bitfield: 8209467b48Spatrick return "bitfield"; 8309467b48Spatrick case PDB_BuiltinType::BSTR: 8409467b48Spatrick return "BSTR"; 8509467b48Spatrick case PDB_BuiltinType::HResult: 8609467b48Spatrick return "HRESULT"; 8709467b48Spatrick case PDB_BuiltinType::BCD: 8809467b48Spatrick return "HRESULT"; 8909467b48Spatrick case PDB_BuiltinType::Char16: 9009467b48Spatrick return "char16_t"; 9109467b48Spatrick case PDB_BuiltinType::Char32: 9209467b48Spatrick return "char32_t"; 93*d415bd75Srobert case PDB_BuiltinType::Char8: 94*d415bd75Srobert return "char8_t"; 9509467b48Spatrick case PDB_BuiltinType::None: 9609467b48Spatrick return "..."; 9709467b48Spatrick } 9809467b48Spatrick llvm_unreachable("Unknown PDB_BuiltinType"); 9909467b48Spatrick } 100