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" 14 #include "llvm/DebugInfo/CodeView/GUID.h" 15 #include "llvm/DebugInfo/CodeView/TypeIndex.h" 16 #include "llvm/Support/FormatAdapters.h" 17 #include "llvm/Support/FormatVariadic.h" 18 #include "llvm/Support/raw_ostream.h" 19 #include <cstdint> 20 21 namespace llvm { 22 23 namespace codeview { 24 25 namespace detail { 26 27 class GuidAdapter final : public FormatAdapter<ArrayRef<uint8_t>> { 28 ArrayRef<uint8_t> Guid; 29 30 public: 31 explicit GuidAdapter(ArrayRef<uint8_t> Guid); 32 explicit GuidAdapter(StringRef Guid); 33 34 void format(raw_ostream &Stream, StringRef Style) override; 35 }; 36 37 } // end namespace detail 38 39 inline detail::GuidAdapter fmt_guid(StringRef Item) { 40 return detail::GuidAdapter(Item); 41 } 42 43 inline detail::GuidAdapter fmt_guid(ArrayRef<uint8_t> Item) { 44 return detail::GuidAdapter(Item); 45 } 46 47 } // end namespace codeview 48 49 template <> struct format_provider<codeview::TypeIndex> { 50 public: 51 static void format(const codeview::TypeIndex &V, raw_ostream &Stream, 52 StringRef Style) { 53 if (V.isNoneType()) 54 Stream << "<no type>"; 55 else { 56 Stream << formatv("{0:X+4}", V.getIndex()); 57 if (V.isSimple()) 58 Stream << " (" << codeview::TypeIndex::simpleTypeName(V) << ")"; 59 } 60 } 61 }; 62 63 template <> struct format_provider<codeview::GUID> { 64 static void format(const codeview::GUID &V, llvm::raw_ostream &Stream, 65 StringRef Style) { 66 Stream << V; 67 } 68 }; 69 70 } // end namespace llvm 71 72 #endif // LLVM_DEBUGINFO_CODEVIEW_FORMATTERS_H 73