Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Core/UserSettingsController.cpp
39587 views
1
//===-- UserSettingsController.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/Core/UserSettingsController.h"
10
11
#include "lldb/Interpreter/OptionValueProperties.h"
12
#include "lldb/Utility/Status.h"
13
#include "lldb/Utility/Stream.h"
14
15
#include <memory>
16
17
namespace lldb_private {
18
class CommandInterpreter;
19
}
20
namespace lldb_private {
21
class ConstString;
22
}
23
namespace lldb_private {
24
class ExecutionContext;
25
}
26
namespace lldb_private {
27
class Property;
28
}
29
30
using namespace lldb;
31
using namespace lldb_private;
32
33
Properties::Properties() = default;
34
35
Properties::Properties(const lldb::OptionValuePropertiesSP &collection_sp)
36
: m_collection_sp(collection_sp) {}
37
38
Properties::~Properties() = default;
39
40
lldb::OptionValueSP
41
Properties::GetPropertyValue(const ExecutionContext *exe_ctx,
42
llvm::StringRef path, Status &error) const {
43
OptionValuePropertiesSP properties_sp(GetValueProperties());
44
if (properties_sp)
45
return properties_sp->GetSubValue(exe_ctx, path, error);
46
return lldb::OptionValueSP();
47
}
48
49
Status Properties::SetPropertyValue(const ExecutionContext *exe_ctx,
50
VarSetOperationType op,
51
llvm::StringRef path,
52
llvm::StringRef value) {
53
OptionValuePropertiesSP properties_sp(GetValueProperties());
54
if (properties_sp)
55
return properties_sp->SetSubValue(exe_ctx, op, path, value);
56
Status error;
57
error.SetErrorString("no properties");
58
return error;
59
}
60
61
void Properties::DumpAllPropertyValues(const ExecutionContext *exe_ctx,
62
Stream &strm, uint32_t dump_mask,
63
bool is_json) {
64
OptionValuePropertiesSP properties_sp(GetValueProperties());
65
if (!properties_sp)
66
return;
67
68
if (is_json) {
69
llvm::json::Value json = properties_sp->ToJSON(exe_ctx);
70
strm.Printf("%s", llvm::formatv("{0:2}", json).str().c_str());
71
} else
72
properties_sp->DumpValue(exe_ctx, strm, dump_mask);
73
}
74
75
void Properties::DumpAllDescriptions(CommandInterpreter &interpreter,
76
Stream &strm) const {
77
strm.PutCString("Top level variables:\n\n");
78
79
OptionValuePropertiesSP properties_sp(GetValueProperties());
80
if (properties_sp)
81
return properties_sp->DumpAllDescriptions(interpreter, strm);
82
}
83
84
Status Properties::DumpPropertyValue(const ExecutionContext *exe_ctx,
85
Stream &strm,
86
llvm::StringRef property_path,
87
uint32_t dump_mask, bool is_json) {
88
OptionValuePropertiesSP properties_sp(GetValueProperties());
89
if (properties_sp) {
90
return properties_sp->DumpPropertyValue(exe_ctx, strm, property_path,
91
dump_mask, is_json);
92
}
93
Status error;
94
error.SetErrorString("empty property list");
95
return error;
96
}
97
98
size_t
99
Properties::Apropos(llvm::StringRef keyword,
100
std::vector<const Property *> &matching_properties) const {
101
OptionValuePropertiesSP properties_sp(GetValueProperties());
102
if (properties_sp) {
103
properties_sp->Apropos(keyword, matching_properties);
104
}
105
return matching_properties.size();
106
}
107
108
llvm::StringRef Properties::GetExperimentalSettingsName() {
109
static constexpr llvm::StringLiteral g_experimental("experimental");
110
return g_experimental;
111
}
112
113
bool Properties::IsSettingExperimental(llvm::StringRef setting) {
114
if (setting.empty())
115
return false;
116
117
llvm::StringRef experimental = GetExperimentalSettingsName();
118
size_t dot_pos = setting.find_first_of('.');
119
return setting.take_front(dot_pos) == experimental;
120
}
121
122