1*9880d681SAndroid Build Coastguard Worker //===- EnumDumper.cpp -------------------------------------------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #include "EnumDumper.h" 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker #include "BuiltinDumper.h" 13*9880d681SAndroid Build Coastguard Worker #include "LinePrinter.h" 14*9880d681SAndroid Build Coastguard Worker #include "llvm-pdbdump.h" 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/PDBSymbolData.h" 17*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h" 18*9880d681SAndroid Build Coastguard Worker #include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h" 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker using namespace llvm; 21*9880d681SAndroid Build Coastguard Worker using namespace llvm::pdb; 22*9880d681SAndroid Build Coastguard Worker EnumDumper(LinePrinter & P)23*9880d681SAndroid Build Coastguard WorkerEnumDumper::EnumDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {} 24*9880d681SAndroid Build Coastguard Worker start(const PDBSymbolTypeEnum & Symbol)25*9880d681SAndroid Build Coastguard Workervoid EnumDumper::start(const PDBSymbolTypeEnum &Symbol) { 26*9880d681SAndroid Build Coastguard Worker WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum "; 27*9880d681SAndroid Build Coastguard Worker WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName(); 28*9880d681SAndroid Build Coastguard Worker if (!opts::pretty::NoEnumDefs) { 29*9880d681SAndroid Build Coastguard Worker auto BuiltinType = Symbol.getUnderlyingType(); 30*9880d681SAndroid Build Coastguard Worker if (BuiltinType->getBuiltinType() != PDB_BuiltinType::Int || 31*9880d681SAndroid Build Coastguard Worker BuiltinType->getLength() != 4) { 32*9880d681SAndroid Build Coastguard Worker Printer << " : "; 33*9880d681SAndroid Build Coastguard Worker BuiltinDumper Dumper(Printer); 34*9880d681SAndroid Build Coastguard Worker Dumper.start(*BuiltinType); 35*9880d681SAndroid Build Coastguard Worker } 36*9880d681SAndroid Build Coastguard Worker Printer << " {"; 37*9880d681SAndroid Build Coastguard Worker Printer.Indent(); 38*9880d681SAndroid Build Coastguard Worker auto EnumValues = Symbol.findAllChildren<PDBSymbolData>(); 39*9880d681SAndroid Build Coastguard Worker while (auto EnumValue = EnumValues->getNext()) { 40*9880d681SAndroid Build Coastguard Worker if (EnumValue->getDataKind() != PDB_DataKind::Constant) 41*9880d681SAndroid Build Coastguard Worker continue; 42*9880d681SAndroid Build Coastguard Worker Printer.NewLine(); 43*9880d681SAndroid Build Coastguard Worker WithColor(Printer, PDB_ColorItem::Identifier).get() 44*9880d681SAndroid Build Coastguard Worker << EnumValue->getName(); 45*9880d681SAndroid Build Coastguard Worker Printer << " = "; 46*9880d681SAndroid Build Coastguard Worker WithColor(Printer, PDB_ColorItem::LiteralValue).get() 47*9880d681SAndroid Build Coastguard Worker << EnumValue->getValue(); 48*9880d681SAndroid Build Coastguard Worker } 49*9880d681SAndroid Build Coastguard Worker Printer.Unindent(); 50*9880d681SAndroid Build Coastguard Worker Printer.NewLine(); 51*9880d681SAndroid Build Coastguard Worker Printer << "}"; 52*9880d681SAndroid Build Coastguard Worker } 53*9880d681SAndroid Build Coastguard Worker } 54