xref: /aosp_15_r20/external/llvm/tools/llvm-pdbdump/EnumDumper.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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 Worker EnumDumper::EnumDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {}
24*9880d681SAndroid Build Coastguard Worker 
start(const PDBSymbolTypeEnum & Symbol)25*9880d681SAndroid Build Coastguard Worker void 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