| //===- PrettyBuiltinDumper.cpp ---------------------------------- *- C++ *-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #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"); |
| } |