Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/tools/llvm-pdbutil/PrettyEnumDumper.cpp
35260 views
1
//===- PrettyEnumDumper.cpp -------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "PrettyEnumDumper.h"
10
11
#include "PrettyBuiltinDumper.h"
12
#include "llvm-pdbutil.h"
13
14
#include "llvm/DebugInfo/PDB/ConcreteSymbolEnumerator.h"
15
#include "llvm/DebugInfo/PDB/IPDBLineNumber.h"
16
#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
17
#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
18
#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h"
19
20
using namespace llvm;
21
using namespace llvm::pdb;
22
23
EnumDumper::EnumDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {}
24
25
void EnumDumper::start(const PDBSymbolTypeEnum &Symbol) {
26
if (Symbol.getUnmodifiedTypeId() != 0) {
27
if (Symbol.isConstType())
28
WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
29
if (Symbol.isVolatileType())
30
WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
31
if (Symbol.isUnalignedType())
32
WithColor(Printer, PDB_ColorItem::Keyword).get() << "unaligned ";
33
WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum ";
34
WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
35
return;
36
}
37
38
WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum ";
39
WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
40
if (!opts::pretty::NoEnumDefs) {
41
auto UnderlyingType = Symbol.getUnderlyingType();
42
if (!UnderlyingType)
43
return;
44
if (UnderlyingType->getBuiltinType() != PDB_BuiltinType::Int ||
45
UnderlyingType->getLength() != 4) {
46
Printer << " : ";
47
BuiltinDumper Dumper(Printer);
48
Dumper.start(*UnderlyingType);
49
}
50
auto EnumValues = Symbol.findAllChildren<PDBSymbolData>();
51
Printer << " {";
52
Printer.Indent();
53
if (EnumValues && EnumValues->getChildCount() > 0) {
54
while (auto EnumValue = EnumValues->getNext()) {
55
if (EnumValue->getDataKind() != PDB_DataKind::Constant)
56
continue;
57
Printer.NewLine();
58
WithColor(Printer, PDB_ColorItem::Identifier).get()
59
<< EnumValue->getName();
60
Printer << " = ";
61
WithColor(Printer, PDB_ColorItem::LiteralValue).get()
62
<< EnumValue->getValue();
63
}
64
}
65
Printer.Unindent();
66
Printer.NewLine();
67
Printer << "}";
68
}
69
}
70
71