1//===-- DumpValueObjectOptions.cpp ----------------------------------------===//
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#include "lldb/DataFormatters/DumpValueObjectOptions.h"
10
11#include "lldb/Core/ValueObject.h"
12
13using namespace lldb;
14using namespace lldb_private;
15
16DumpValueObjectOptions::DumpValueObjectOptions()
17    : m_summary_sp(), m_root_valobj_name(),
18      m_max_ptr_depth(PointerDepth{PointerDepth::Mode::Default, 0}),
19      m_decl_printing_helper(), m_pointer_as_array(), m_use_synthetic(true),
20      m_scope_already_checked(false), m_flat_output(false), m_ignore_cap(false),
21      m_show_types(false), m_show_location(false), m_use_objc(false),
22      m_hide_root_type(false), m_hide_name(false), m_hide_value(false),
23      m_run_validator(false), m_use_type_display_name(true),
24      m_allow_oneliner_mode(true), m_hide_pointer_value(false),
25      m_reveal_empty_aggregates(true) {}
26
27DumpValueObjectOptions::DumpValueObjectOptions(ValueObject &valobj)
28    : DumpValueObjectOptions() {
29  m_use_dynamic = valobj.GetDynamicValueType();
30  m_use_synthetic = valobj.IsSynthetic();
31  m_varformat_language = valobj.GetPreferredDisplayLanguage();
32}
33
34DumpValueObjectOptions &
35DumpValueObjectOptions::SetMaximumPointerDepth(PointerDepth depth) {
36  m_max_ptr_depth = depth;
37  return *this;
38}
39
40DumpValueObjectOptions &
41DumpValueObjectOptions::SetMaximumDepth(uint32_t depth, bool is_default) {
42  m_max_depth = depth;
43  m_max_depth_is_default = is_default;
44  return *this;
45}
46
47DumpValueObjectOptions &
48DumpValueObjectOptions::SetDeclPrintingHelper(DeclPrintingHelper helper) {
49  m_decl_printing_helper = helper;
50  return *this;
51}
52
53DumpValueObjectOptions &DumpValueObjectOptions::SetShowTypes(bool show) {
54  m_show_types = show;
55  return *this;
56}
57
58DumpValueObjectOptions &DumpValueObjectOptions::SetShowLocation(bool show) {
59  m_show_location = show;
60  return *this;
61}
62
63DumpValueObjectOptions &DumpValueObjectOptions::SetUseObjectiveC(bool use) {
64  m_use_objc = use;
65  return *this;
66}
67
68DumpValueObjectOptions &DumpValueObjectOptions::SetShowSummary(bool show) {
69  if (!show)
70    SetOmitSummaryDepth(UINT32_MAX);
71  else
72    SetOmitSummaryDepth(0);
73  return *this;
74}
75
76DumpValueObjectOptions &
77DumpValueObjectOptions::SetUseDynamicType(lldb::DynamicValueType dyn) {
78  m_use_dynamic = dyn;
79  return *this;
80}
81
82DumpValueObjectOptions &
83DumpValueObjectOptions::SetUseSyntheticValue(bool use_synthetic) {
84  m_use_synthetic = use_synthetic;
85  return *this;
86}
87
88DumpValueObjectOptions &DumpValueObjectOptions::SetScopeChecked(bool check) {
89  m_scope_already_checked = check;
90  return *this;
91}
92
93DumpValueObjectOptions &DumpValueObjectOptions::SetFlatOutput(bool flat) {
94  m_flat_output = flat;
95  return *this;
96}
97
98DumpValueObjectOptions &
99DumpValueObjectOptions::SetOmitSummaryDepth(uint32_t depth) {
100  m_omit_summary_depth = depth;
101  return *this;
102}
103
104DumpValueObjectOptions &DumpValueObjectOptions::SetIgnoreCap(bool ignore) {
105  m_ignore_cap = ignore;
106  return *this;
107}
108
109DumpValueObjectOptions &DumpValueObjectOptions::SetRawDisplay() {
110  SetUseSyntheticValue(false);
111  SetOmitSummaryDepth(UINT32_MAX);
112  SetIgnoreCap(true);
113  SetHideName(false);
114  SetHideValue(false);
115  SetUseTypeDisplayName(false);
116  SetAllowOnelinerMode(false);
117  return *this;
118}
119
120DumpValueObjectOptions &DumpValueObjectOptions::SetFormat(lldb::Format format) {
121  m_format = format;
122  return *this;
123}
124
125DumpValueObjectOptions &
126DumpValueObjectOptions::SetSummary(lldb::TypeSummaryImplSP summary) {
127  m_summary_sp = summary;
128  return *this;
129}
130
131DumpValueObjectOptions &
132DumpValueObjectOptions::SetRootValueObjectName(const char *name) {
133  if (name)
134    m_root_valobj_name.assign(name);
135  else
136    m_root_valobj_name.clear();
137  return *this;
138}
139
140DumpValueObjectOptions &
141DumpValueObjectOptions::SetHideRootType(bool hide_root_type) {
142  m_hide_root_type = hide_root_type;
143  return *this;
144}
145
146DumpValueObjectOptions &DumpValueObjectOptions::SetHideName(bool hide_name) {
147  m_hide_name = hide_name;
148  return *this;
149}
150
151DumpValueObjectOptions &DumpValueObjectOptions::SetHideValue(bool hide_value) {
152  m_hide_value = hide_value;
153  return *this;
154}
155
156DumpValueObjectOptions &DumpValueObjectOptions::SetHidePointerValue(bool hide) {
157  m_hide_pointer_value = hide;
158  return *this;
159}
160
161DumpValueObjectOptions &
162DumpValueObjectOptions::SetVariableFormatDisplayLanguage(
163    lldb::LanguageType lang) {
164  m_varformat_language = lang;
165  return *this;
166}
167
168DumpValueObjectOptions &DumpValueObjectOptions::SetRunValidator(bool run) {
169  m_run_validator = run;
170  return *this;
171}
172
173DumpValueObjectOptions &
174DumpValueObjectOptions::SetUseTypeDisplayName(bool dis) {
175  m_use_type_display_name = dis;
176  return *this;
177}
178
179DumpValueObjectOptions &
180DumpValueObjectOptions::SetAllowOnelinerMode(bool oneliner) {
181  m_allow_oneliner_mode = oneliner;
182  return *this;
183}
184
185DumpValueObjectOptions &
186DumpValueObjectOptions::SetRevealEmptyAggregates(bool reveal) {
187  m_reveal_empty_aggregates = reveal;
188  return *this;
189}
190
191DumpValueObjectOptions &
192DumpValueObjectOptions::SetElementCount(uint32_t element_count) {
193  m_pointer_as_array = PointerAsArraySettings(element_count);
194  return *this;
195}
196
197DumpValueObjectOptions &DumpValueObjectOptions::SetPointerAsArray(
198    const PointerAsArraySettings &ptr_array) {
199  m_pointer_as_array = ptr_array;
200  return *this;
201}
202