LLVM  16.0.0git
Formatters.h
Go to the documentation of this file.
1 //===- Formatters.h ---------------------------------------------*- 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 #ifndef LLVM_DEBUGINFO_CODEVIEW_FORMATTERS_H
10 #define LLVM_DEBUGINFO_CODEVIEW_FORMATTERS_H
11 
12 #include "llvm/ADT/ArrayRef.h"
13 #include "llvm/ADT/StringRef.h"
19 #include <cstdint>
20 
21 namespace llvm {
22 
23 namespace codeview {
24 
25 struct GUID;
26 
27 namespace detail {
28 
29 class GuidAdapter final : public FormatAdapter<ArrayRef<uint8_t>> {
30  ArrayRef<uint8_t> Guid;
31 
32 public:
33  explicit GuidAdapter(ArrayRef<uint8_t> Guid);
34  explicit GuidAdapter(StringRef Guid);
35 
36  void format(raw_ostream &Stream, StringRef Style) override;
37 };
38 
39 } // end namespace detail
40 
42  return detail::GuidAdapter(Item);
43 }
44 
46  return detail::GuidAdapter(Item);
47 }
48 
49 } // end namespace codeview
50 
51 template <> struct format_provider<codeview::TypeIndex> {
52 public:
53  static void format(const codeview::TypeIndex &V, raw_ostream &Stream,
54  StringRef Style) {
55  if (V.isNoneType())
56  Stream << "<no type>";
57  else {
58  Stream << formatv("{0:X+4}", V.getIndex());
59  if (V.isSimple())
60  Stream << " (" << codeview::TypeIndex::simpleTypeName(V) << ")";
61  }
62  }
63 };
64 
65 template <> struct format_provider<codeview::GUID> {
66  static void format(const codeview::GUID &V, llvm::raw_ostream &Stream,
67  StringRef Style) {
68  Stream << V;
69  }
70 };
71 
72 } // end namespace llvm
73 
74 #endif // LLVM_DEBUGINFO_CODEVIEW_FORMATTERS_H
llvm::codeview::TypeIndex::isNoneType
bool isNoneType() const
Definition: TypeIndex.h:116
llvm::codeview::detail::GuidAdapter::GuidAdapter
GuidAdapter(ArrayRef< uint8_t > Guid)
Definition: Formatters.cpp:25
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
GUID.h
llvm::format_provider< codeview::GUID >::format
static void format(const codeview::GUID &V, llvm::raw_ostream &Stream, StringRef Style)
Definition: Formatters.h:66
llvm::format_provider
Definition: FormatVariadicDetails.h:19
StringRef.h
llvm::codeview::GUID
This represents the 'GUID' type from windows.h.
Definition: GUID.h:21
llvm::format_provider< codeview::TypeIndex >::format
static void format(const codeview::TypeIndex &V, raw_ostream &Stream, StringRef Style)
Definition: Formatters.h:53
llvm::formatv
auto formatv(const char *Fmt, Ts &&... Vals) -> formatv_object< decltype(std::make_tuple(detail::build_format_adapter(std::forward< Ts >(Vals))...))>
Definition: FormatVariadic.h:251
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
FormatVariadic.h
llvm::codeview::detail::GuidAdapter::format
void format(raw_ostream &Stream, StringRef Style) override
Definition: Formatters.cpp:39
ArrayRef.h
llvm::HexStyle::Style
Style
Definition: MCInstPrinter.h:32
llvm::ArrayRef< uint8_t >
llvm::codeview::TypeIndex::simpleTypeName
static StringRef simpleTypeName(TypeIndex TI)
Definition: TypeIndex.cpp:71
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
llvm::codeview::fmt_guid
detail::GuidAdapter fmt_guid(StringRef Item)
Definition: Formatters.h:41
llvm::codeview::detail::GuidAdapter
Definition: Formatters.h:29
llvm::FormatAdapter
Definition: FormatAdapters.h:19
llvm::codeview::TypeIndex::getIndex
uint32_t getIndex() const
Definition: TypeIndex.h:111
TypeIndex.h
FormatAdapters.h
llvm::codeview::TypeIndex::isSimple
bool isSimple() const
Definition: TypeIndex.h:113
llvm::codeview::TypeIndex
A 32-bit type reference.
Definition: TypeIndex.h:96
raw_ostream.h