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