forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
//===- 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");
 | 
						|
}
 |