blob: 59a88ccdb931b90fd55e2cde89e7f4999a580082 [file] [log] [blame]
Zachary Turner2f3df612017-04-06 21:28:29 +00001//====-- UserSettingsController.cpp ------------------------------*- C++-*-===//
Caroline Tice3df9a8d2010-09-04 00:03:46 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Kate Stoneb9c1b512016-09-06 20:57:50 +000010#include "lldb/Core/UserSettingsController.h"
Zachary Turner2f3df612017-04-06 21:28:29 +000011
Zachary Turner633a29c2015-03-04 01:58:01 +000012#include "lldb/Interpreter/OptionValueProperties.h"
Zachary Turnerbf9a7732017-02-02 21:39:50 +000013#include "lldb/Utility/Error.h"
Zachary Turnerbf9a7732017-02-02 21:39:50 +000014#include "lldb/Utility/Stream.h"
Zachary Turner2f3df612017-04-06 21:28:29 +000015
16#include <memory> // for shared_ptr
17
18namespace lldb_private {
19class CommandInterpreter;
20}
21namespace lldb_private {
22class ConstString;
23}
24namespace lldb_private {
25class ExecutionContext;
26}
27namespace lldb_private {
28class Property;
29}
Caroline Tice3df9a8d2010-09-04 00:03:46 +000030
Greg Claytonbfe5f3b2011-02-18 01:44:25 +000031using namespace lldb;
Caroline Tice3df9a8d2010-09-04 00:03:46 +000032using namespace lldb_private;
33
Greg Clayton67cc0632012-08-22 17:17:09 +000034lldb::OptionValueSP
Zachary Turner31d97a52016-11-17 18:08:12 +000035Properties::GetPropertyValue(const ExecutionContext *exe_ctx, llvm::StringRef path,
Kate Stoneb9c1b512016-09-06 20:57:50 +000036 bool will_modify, Error &error) const {
37 OptionValuePropertiesSP properties_sp(GetValueProperties());
38 if (properties_sp)
39 return properties_sp->GetSubValue(exe_ctx, path, will_modify, error);
40 return lldb::OptionValueSP();
Greg Claytonbfe5f3b2011-02-18 01:44:25 +000041}
42
Kate Stoneb9c1b512016-09-06 20:57:50 +000043Error Properties::SetPropertyValue(const ExecutionContext *exe_ctx,
Zachary Turner31d97a52016-11-17 18:08:12 +000044 VarSetOperationType op, llvm::StringRef path,
45 llvm::StringRef value) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000046 OptionValuePropertiesSP properties_sp(GetValueProperties());
47 if (properties_sp)
48 return properties_sp->SetSubValue(exe_ctx, op, path, value);
49 Error error;
50 error.SetErrorString("no properties");
51 return error;
Jim Ingham95852752010-09-07 20:27:09 +000052}
53
Kate Stoneb9c1b512016-09-06 20:57:50 +000054void Properties::DumpAllPropertyValues(const ExecutionContext *exe_ctx,
55 Stream &strm, uint32_t dump_mask) {
56 OptionValuePropertiesSP properties_sp(GetValueProperties());
57 if (properties_sp)
58 return properties_sp->DumpValue(exe_ctx, strm, dump_mask);
Jim Ingham95852752010-09-07 20:27:09 +000059}
60
Kate Stoneb9c1b512016-09-06 20:57:50 +000061void Properties::DumpAllDescriptions(CommandInterpreter &interpreter,
62 Stream &strm) const {
63 strm.PutCString("Top level variables:\n\n");
Caroline Tice3df9a8d2010-09-04 00:03:46 +000064
Kate Stoneb9c1b512016-09-06 20:57:50 +000065 OptionValuePropertiesSP properties_sp(GetValueProperties());
66 if (properties_sp)
67 return properties_sp->DumpAllDescriptions(interpreter, strm);
Greg Clayton67cc0632012-08-22 17:17:09 +000068}
69
Kate Stoneb9c1b512016-09-06 20:57:50 +000070Error Properties::DumpPropertyValue(const ExecutionContext *exe_ctx,
Zachary Turner31d97a52016-11-17 18:08:12 +000071 Stream &strm, llvm::StringRef property_path,
Kate Stoneb9c1b512016-09-06 20:57:50 +000072 uint32_t dump_mask) {
73 OptionValuePropertiesSP properties_sp(GetValueProperties());
74 if (properties_sp) {
75 return properties_sp->DumpPropertyValue(exe_ctx, strm, property_path,
76 dump_mask);
77 }
78 Error error;
79 error.SetErrorString("empty property list");
80 return error;
Caroline Tice3df9a8d2010-09-04 00:03:46 +000081}
82
83size_t
Zachary Turner067d1db2016-11-16 21:45:04 +000084Properties::Apropos(llvm::StringRef keyword,
Kate Stoneb9c1b512016-09-06 20:57:50 +000085 std::vector<const Property *> &matching_properties) const {
86 OptionValuePropertiesSP properties_sp(GetValueProperties());
87 if (properties_sp) {
88 properties_sp->Apropos(keyword, matching_properties);
89 }
90 return matching_properties.size();
Caroline Tice3df9a8d2010-09-04 00:03:46 +000091}
Greg Claytone8cd0c92012-10-19 18:02:49 +000092
Greg Claytone8cd0c92012-10-19 18:02:49 +000093lldb::OptionValuePropertiesSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000094Properties::GetSubProperty(const ExecutionContext *exe_ctx,
95 const ConstString &name) {
96 OptionValuePropertiesSP properties_sp(GetValueProperties());
97 if (properties_sp)
98 return properties_sp->GetSubProperty(exe_ctx, name);
99 return lldb::OptionValuePropertiesSP();
Greg Claytone8cd0c92012-10-19 18:02:49 +0000100}
101
Kate Stoneb9c1b512016-09-06 20:57:50 +0000102const char *Properties::GetExperimentalSettingsName() { return "experimental"; }
103
Zachary Turner31d97a52016-11-17 18:08:12 +0000104bool Properties::IsSettingExperimental(llvm::StringRef setting) {
105 if (setting.empty())
Kate Stoneb9c1b512016-09-06 20:57:50 +0000106 return false;
107
Zachary Turner31d97a52016-11-17 18:08:12 +0000108 llvm::StringRef experimental = GetExperimentalSettingsName();
109 size_t dot_pos = setting.find_first_of('.');
110 return setting.take_front(dot_pos) == experimental;
Jim Ingham8b57dcf2016-07-06 01:27:33 +0000111}