1 | //===-- DumpValueObjectOptions.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 LLDB_DATAFORMATTERS_DUMPVALUEOBJECTOPTIONS_H |
10 | #define LLDB_DATAFORMATTERS_DUMPVALUEOBJECTOPTIONS_H |
11 | |
12 | #include <string> |
13 | |
14 | #include "lldb/lldb-private.h" |
15 | #include "lldb/lldb-public.h" |
16 | |
17 | #include <functional> |
18 | #include <string> |
19 | |
20 | namespace lldb_private { |
21 | |
22 | class DumpValueObjectOptions { |
23 | public: |
24 | struct PointerDepth { |
25 | enum class Mode { Always, Default, Never } m_mode; |
26 | uint32_t m_count; |
27 | |
28 | PointerDepth operator--() const { |
29 | if (m_count > 0) |
30 | return PointerDepth{m_mode, m_count - 1}; |
31 | return PointerDepth{m_mode, m_count}; |
32 | } |
33 | |
34 | bool CanAllowExpansion() const; |
35 | }; |
36 | |
37 | struct PointerAsArraySettings { |
38 | size_t m_element_count; |
39 | size_t m_base_element; |
40 | size_t m_stride; |
41 | |
42 | PointerAsArraySettings() |
43 | : m_element_count(0), m_base_element(0), m_stride() {} |
44 | |
45 | PointerAsArraySettings(size_t elem_count, size_t base_elem = 0, |
46 | size_t stride = 1) |
47 | : m_element_count(elem_count), m_base_element(base_elem), |
48 | m_stride(stride) {} |
49 | |
50 | operator bool() { return m_element_count > 0; } |
51 | }; |
52 | |
53 | typedef std::function<bool(ConstString, ConstString, |
54 | const DumpValueObjectOptions &, Stream &)> |
55 | DeclPrintingHelper; |
56 | |
57 | static const DumpValueObjectOptions DefaultOptions() { |
58 | static DumpValueObjectOptions g_default_options; |
59 | |
60 | return g_default_options; |
61 | } |
62 | |
63 | DumpValueObjectOptions(); |
64 | |
65 | DumpValueObjectOptions(const DumpValueObjectOptions &rhs) = default; |
66 | |
67 | DumpValueObjectOptions(ValueObject &valobj); |
68 | |
69 | DumpValueObjectOptions & |
70 | SetMaximumPointerDepth(PointerDepth depth = {PointerDepth::Mode::Never, 0}); |
71 | |
72 | DumpValueObjectOptions &SetMaximumDepth(uint32_t depth = 0); |
73 | |
74 | DumpValueObjectOptions &SetDeclPrintingHelper(DeclPrintingHelper helper); |
75 | |
76 | DumpValueObjectOptions &SetShowTypes(bool show = false); |
77 | |
78 | DumpValueObjectOptions &SetShowLocation(bool show = false); |
79 | |
80 | DumpValueObjectOptions &SetUseObjectiveC(bool use = false); |
81 | |
82 | DumpValueObjectOptions &SetShowSummary(bool show = true); |
83 | |
84 | DumpValueObjectOptions & |
85 | SetUseDynamicType(lldb::DynamicValueType dyn = lldb::eNoDynamicValues); |
86 | |
87 | DumpValueObjectOptions &SetUseSyntheticValue(bool use_synthetic = true); |
88 | |
89 | DumpValueObjectOptions &SetScopeChecked(bool check = true); |
90 | |
91 | DumpValueObjectOptions &SetFlatOutput(bool flat = false); |
92 | |
93 | DumpValueObjectOptions &SetOmitSummaryDepth(uint32_t depth = 0); |
94 | |
95 | DumpValueObjectOptions &SetIgnoreCap(bool ignore = false); |
96 | |
97 | DumpValueObjectOptions &SetRawDisplay(); |
98 | |
99 | DumpValueObjectOptions &SetFormat(lldb::Format format = lldb::eFormatDefault); |
100 | |
101 | DumpValueObjectOptions & |
102 | SetSummary(lldb::TypeSummaryImplSP summary = lldb::TypeSummaryImplSP()); |
103 | |
104 | DumpValueObjectOptions &SetRootValueObjectName(const char *name = nullptr); |
105 | |
106 | DumpValueObjectOptions &SetHideRootType(bool hide_root_type = false); |
107 | |
108 | DumpValueObjectOptions &SetHideName(bool hide_name = false); |
109 | |
110 | DumpValueObjectOptions &SetHideValue(bool hide_value = false); |
111 | |
112 | DumpValueObjectOptions &SetHidePointerValue(bool hide = false); |
113 | |
114 | DumpValueObjectOptions &SetVariableFormatDisplayLanguage( |
115 | lldb::LanguageType lang = lldb::eLanguageTypeUnknown); |
116 | |
117 | DumpValueObjectOptions &SetRunValidator(bool run = true); |
118 | |
119 | DumpValueObjectOptions &SetUseTypeDisplayName(bool dis = false); |
120 | |
121 | DumpValueObjectOptions &SetAllowOnelinerMode(bool oneliner = false); |
122 | |
123 | DumpValueObjectOptions &SetRevealEmptyAggregates(bool reveal = true); |
124 | |
125 | DumpValueObjectOptions &SetElementCount(uint32_t element_count = 0); |
126 | |
127 | DumpValueObjectOptions & |
128 | SetPointerAsArray(const PointerAsArraySettings &ptr_array); |
129 | |
130 | uint32_t m_max_depth = UINT32_MAX; |
131 | lldb::DynamicValueType m_use_dynamic = lldb::eNoDynamicValues; |
132 | uint32_t m_omit_summary_depth = 0; |
133 | lldb::Format m_format = lldb::eFormatDefault; |
134 | lldb::TypeSummaryImplSP m_summary_sp; |
135 | std::string m_root_valobj_name; |
136 | lldb::LanguageType m_varformat_language = lldb::eLanguageTypeUnknown; |
137 | PointerDepth m_max_ptr_depth; |
138 | DeclPrintingHelper m_decl_printing_helper; |
139 | PointerAsArraySettings m_pointer_as_array; |
140 | bool m_use_synthetic : 1; |
141 | bool m_scope_already_checked : 1; |
142 | bool m_flat_output : 1; |
143 | bool m_ignore_cap : 1; |
144 | bool m_show_types : 1; |
145 | bool m_show_location : 1; |
146 | bool m_use_objc : 1; |
147 | bool m_hide_root_type : 1; |
148 | bool m_hide_name : 1; |
149 | bool m_hide_value : 1; |
150 | bool m_run_validator : 1; |
151 | bool m_use_type_display_name : 1; |
152 | bool m_allow_oneliner_mode : 1; |
153 | bool m_hide_pointer_value : 1; |
154 | bool m_reveal_empty_aggregates : 1; |
155 | }; |
156 | |
157 | } // namespace lldb_private |
158 | |
159 | #endif // LLDB_DATAFORMATTERS_DUMPVALUEOBJECTOPTIONS_H |
160 | |