diff tools/llvm-pdbutil/PrettyEnumDumper.cpp @ 121:803732b1fca8

LLVM 5.0
author kono
date Fri, 27 Oct 2017 17:07:41 +0900
parents
children c2174574ed3a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/llvm-pdbutil/PrettyEnumDumper.cpp	Fri Oct 27 17:07:41 2017 +0900
@@ -0,0 +1,57 @@
+//===- PrettyEnumDumper.cpp -------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "PrettyEnumDumper.h"
+
+#include "LinePrinter.h"
+#include "PrettyBuiltinDumper.h"
+#include "llvm-pdbutil.h"
+
+#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h"
+
+using namespace llvm;
+using namespace llvm::pdb;
+
+EnumDumper::EnumDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {}
+
+void EnumDumper::start(const PDBSymbolTypeEnum &Symbol) {
+  WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum ";
+  WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName();
+  if (!opts::pretty::NoEnumDefs) {
+    auto UnderlyingType = Symbol.getUnderlyingType();
+    if (!UnderlyingType)
+      return;
+    if (UnderlyingType->getBuiltinType() != PDB_BuiltinType::Int ||
+        UnderlyingType->getLength() != 4) {
+      Printer << " : ";
+      BuiltinDumper Dumper(Printer);
+      Dumper.start(*UnderlyingType);
+    }
+    auto EnumValues = Symbol.findAllChildren<PDBSymbolData>();
+    Printer << " {";
+    Printer.Indent();
+    if (EnumValues && EnumValues->getChildCount() > 0) {
+      while (auto EnumValue = EnumValues->getNext()) {
+        if (EnumValue->getDataKind() != PDB_DataKind::Constant)
+          continue;
+        Printer.NewLine();
+        WithColor(Printer, PDB_ColorItem::Identifier).get()
+            << EnumValue->getName();
+        Printer << " = ";
+        WithColor(Printer, PDB_ColorItem::LiteralValue).get()
+            << EnumValue->getValue();
+      }
+    }
+    Printer.Unindent();
+    Printer.NewLine();
+    Printer << "}";
+  }
+}