Coverage Report

Created: 2022-01-25 06:29

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/DataFormatters/ValueObjectPrinter.h
Line
Count
Source
1
//===-- ValueObjectPrinter.h ---------------------------------------*- C++
2
//-*-===//
3
//
4
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5
// See https://llvm.org/LICENSE.txt for license information.
6
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7
//
8
//===----------------------------------------------------------------------===//
9
10
#ifndef LLDB_DATAFORMATTERS_VALUEOBJECTPRINTER_H
11
#define LLDB_DATAFORMATTERS_VALUEOBJECTPRINTER_H
12
13
#include "lldb/lldb-private.h"
14
#include "lldb/lldb-public.h"
15
16
#include "lldb/Utility/Flags.h"
17
18
#include "lldb/DataFormatters/DumpValueObjectOptions.h"
19
#include "lldb/Symbol/CompilerType.h"
20
21
namespace lldb_private {
22
23
class ValueObjectPrinter {
24
public:
25
  ValueObjectPrinter(ValueObject *valobj, Stream *s);
26
27
  ValueObjectPrinter(ValueObject *valobj, Stream *s,
28
                     const DumpValueObjectOptions &options);
29
30
54.1k
  ~ValueObjectPrinter() = default;
31
32
  bool PrintValueObject();
33
34
protected:
35
  typedef std::set<uint64_t> InstancePointersSet;
36
  typedef std::shared_ptr<InstancePointersSet> InstancePointersSetSP;
37
38
  InstancePointersSetSP m_printed_instance_pointers;
39
40
  // only this class (and subclasses, if any) should ever be concerned with the
41
  // depth mechanism
42
  ValueObjectPrinter(ValueObject *valobj, Stream *s,
43
                     const DumpValueObjectOptions &options,
44
                     const DumpValueObjectOptions::PointerDepth &ptr_depth,
45
                     uint32_t curr_depth,
46
                     InstancePointersSetSP printed_instance_pointers);
47
48
  // we should actually be using delegating constructors here but some versions
49
  // of GCC still have trouble with those
50
  void Init(ValueObject *valobj, Stream *s,
51
            const DumpValueObjectOptions &options,
52
            const DumpValueObjectOptions::PointerDepth &ptr_depth,
53
            uint32_t curr_depth,
54
            InstancePointersSetSP printed_instance_pointers);
55
56
  bool GetMostSpecializedValue();
57
58
  const char *GetDescriptionForDisplay();
59
60
  const char *GetRootNameForDisplay();
61
62
  bool ShouldPrintValueObject();
63
64
  bool IsNil();
65
66
  bool IsUninitialized();
67
68
  bool IsPtr();
69
70
  bool IsRef();
71
72
  bool IsInstancePointer();
73
74
  bool IsAggregate();
75
76
  bool PrintLocationIfNeeded();
77
78
  void PrintDecl();
79
80
  bool CheckScopeIfNeeded();
81
82
  bool ShouldPrintEmptyBrackets(bool value_printed, bool summary_printed);
83
84
  TypeSummaryImpl *GetSummaryFormatter(bool null_if_omitted = true);
85
86
  void GetValueSummaryError(std::string &value, std::string &summary,
87
                            std::string &error);
88
89
  bool PrintValueAndSummaryIfNeeded(bool &value_printed, bool &summary_printed);
90
91
  bool PrintObjectDescriptionIfNeeded(bool value_printed, bool summary_printed);
92
93
  bool
94
  ShouldPrintChildren(bool is_failed_description,
95
                      DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
96
97
  bool ShouldExpandEmptyAggregates();
98
99
  ValueObject *GetValueObjectForChildrenGeneration();
100
101
  void PrintChildrenPreamble();
102
103
  void PrintChildrenPostamble(bool print_dotdotdot);
104
105
  lldb::ValueObjectSP GenerateChild(ValueObject *synth_valobj, size_t idx);
106
107
  void PrintChild(lldb::ValueObjectSP child_sp,
108
                  const DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
109
110
  uint32_t GetMaxNumChildrenToPrint(bool &print_dotdotdot);
111
112
  void
113
  PrintChildren(bool value_printed, bool summary_printed,
114
                const DumpValueObjectOptions::PointerDepth &curr_ptr_depth);
115
116
  void PrintChildrenIfNeeded(bool value_printed, bool summary_printed);
117
118
  bool PrintChildrenOneLiner(bool hide_names);
119
120
private:
121
  ValueObject *m_orig_valobj;
122
  ValueObject *m_valobj;
123
  Stream *m_stream;
124
  DumpValueObjectOptions m_options;
125
  Flags m_type_flags;
126
  CompilerType m_compiler_type;
127
  DumpValueObjectOptions::PointerDepth m_ptr_depth;
128
  uint32_t m_curr_depth;
129
  LazyBool m_should_print;
130
  LazyBool m_is_nil;
131
  LazyBool m_is_uninit;
132
  LazyBool m_is_ptr;
133
  LazyBool m_is_ref;
134
  LazyBool m_is_aggregate;
135
  LazyBool m_is_instance_ptr;
136
  std::pair<TypeSummaryImpl *, bool> m_summary_formatter;
137
  std::string m_value;
138
  std::string m_summary;
139
  std::string m_error;
140
  bool m_val_summary_ok;
141
142
  friend struct StringSummaryFormat;
143
144
  ValueObjectPrinter(const ValueObjectPrinter &) = delete;
145
  const ValueObjectPrinter &operator=(const ValueObjectPrinter &) = delete;
146
};
147
148
} // namespace lldb_private
149
150
#endif // LLDB_DATAFORMATTERS_VALUEOBJECTPRINTER_H