1234287Sdim//===- BuiltinDumper.cpp ---------------------------------------- *- C++ *-===//
2234287Sdim//
3234287Sdim//                     The LLVM Compiler Infrastructure
4234287Sdim//
5234287Sdim// This file is distributed under the University of Illinois Open Source
6234287Sdim// License. See LICENSE.TXT for details.
7234287Sdim//
8234287Sdim//===----------------------------------------------------------------------===//
9234287Sdim
10234287Sdim#include "BuiltinDumper.h"
11234287Sdim#include "LinePrinter.h"
12234287Sdim#include "llvm-pdbdump.h"
13234287Sdim
14234287Sdim#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
15234287Sdim
16234287Sdimusing namespace llvm;
17234287Sdim
18234287SdimBuiltinDumper::BuiltinDumper(LinePrinter &P)
19234287Sdim    : PDBSymDumper(false), Printer(P) {}
20234287Sdim
21234287Sdimvoid BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol) {
22234287Sdim  WithColor(Printer, PDB_ColorItem::Type).get() << getTypeName(Symbol);
23234287Sdim}
24234287Sdim
25234287SdimStringRef BuiltinDumper::getTypeName(const PDBSymbolTypeBuiltin &Symbol) {
26234287Sdim  PDB_BuiltinType Type = Symbol.getBuiltinType();
27288943Sdim  switch (Type) {
28296417Sdim  case PDB_BuiltinType::Float:
29288943Sdim    if (Symbol.getLength() == 4)
30288943Sdim      return "float";
31234287Sdim    return "double";
32234287Sdim  case PDB_BuiltinType::UInt:
33234287Sdim    if (Symbol.getLength() == 8)
34234287Sdim      return "unsigned __int64";
35234287Sdim    return "unsigned";
36296417Sdim  case PDB_BuiltinType::Int:
37296417Sdim    if (Symbol.getLength() == 4)
38296417Sdim      return "int";
39296417Sdim    return "__int64";
40296417Sdim  case PDB_BuiltinType::Char:
41296417Sdim    return "char";
42234287Sdim  case PDB_BuiltinType::WCharT:
43288943Sdim    return "wchar_t";
44234287Sdim  case PDB_BuiltinType::Void:
45234287Sdim    return "void";
46234287Sdim  case PDB_BuiltinType::Long:
47234287Sdim    return "long";
48296417Sdim  case PDB_BuiltinType::ULong:
49296417Sdim    return "unsigned long";
50296417Sdim  case PDB_BuiltinType::Bool:
51296417Sdim    return "bool";
52296417Sdim  case PDB_BuiltinType::Currency:
53296417Sdim    return "CURRENCY";
54234287Sdim  case PDB_BuiltinType::Date:
55234287Sdim    return "DATE";
56288943Sdim  case PDB_BuiltinType::Variant:
57288943Sdim    return "VARIANT";
58234287Sdim  case PDB_BuiltinType::Complex:
59    return "complex";
60  case PDB_BuiltinType::Bitfield:
61    return "bitfield";
62  case PDB_BuiltinType::BSTR:
63    return "BSTR";
64  case PDB_BuiltinType::HResult:
65    return "HRESULT";
66  case PDB_BuiltinType::BCD:
67    return "HRESULT";
68  default:
69    return "void";
70  }
71}
72