brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 8950661 Raw
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