blob: a4661a6c9e8ccc3f9da7a9804dafca5339aaa883 [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 Turner97206d52017-05-12 04:51:55 +000013#include "lldb/Utility/Status.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 Turner97206d52017-05-12 04:51:55 +000035Properties::GetPropertyValue(const ExecutionContext *exe_ctx,
36 llvm::StringRef path, bool will_modify,
37 Status &error) const {
Kate Stoneb9c1b512016-09-06 20:57:50 +000038 OptionValuePropertiesSP properties_sp(GetValueProperties());
39 if (properties_sp)
40 return properties_sp->GetSubValue(exe_ctx, path, will_modify, error);
41 return lldb::OptionValueSP();
Greg Claytonbfe5f3b2011-02-18 01:44:25 +000042}
43
Zachary Turner97206d52017-05-12 04:51:55 +000044Status Properties::SetPropertyValue(const ExecutionContext *exe_ctx,
45 VarSetOperationType op,
46 llvm::StringRef path,
47 llvm::StringRef value) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000048 OptionValuePropertiesSP properties_sp(GetValueProperties());
49 if (properties_sp)
50 return properties_sp->SetSubValue(exe_ctx, op, path, value);
Zachary Turner97206d52017-05-12 04:51:55 +000051 Status error;
Kate Stoneb9c1b512016-09-06 20:57:50 +000052 error.SetErrorString("no properties");
53 return error;
Jim Ingham95852752010-09-07 20:27:09 +000054}
55
Kate Stoneb9c1b512016-09-06 20:57:50 +000056void Properties::DumpAllPropertyValues(const ExecutionContext *exe_ctx,
57 Stream &strm, uint32_t dump_mask) {
58 OptionValuePropertiesSP properties_sp(GetValueProperties());
59 if (properties_sp)
60 return properties_sp->DumpValue(exe_ctx, strm, dump_mask);
Jim Ingham95852752010-09-07 20:27:09 +000061}
62
Kate Stoneb9c1b512016-09-06 20:57:50 +000063void Properties::DumpAllDescriptions(CommandInterpreter &interpreter,
64 Stream &strm) const {
65 strm.PutCString("Top level variables:\n\n");
Caroline Tice3df9a8d2010-09-04 00:03:46 +000066
Kate Stoneb9c1b512016-09-06 20:57:50 +000067 OptionValuePropertiesSP properties_sp(GetValueProperties());
68 if (properties_sp)
69 return properties_sp->DumpAllDescriptions(interpreter, strm);
Greg Clayton67cc0632012-08-22 17:17:09 +000070}
71
Zachary Turner97206d52017-05-12 04:51:55 +000072Status Properties::DumpPropertyValue(const ExecutionContext *exe_ctx,
73 Stream &strm,
74 llvm::StringRef property_path,
75 uint32_t dump_mask) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000076 OptionValuePropertiesSP properties_sp(GetValueProperties());
77 if (properties_sp) {
78 return properties_sp->DumpPropertyValue(exe_ctx, strm, property_path,
79 dump_mask);
80 }
Zachary Turner97206d52017-05-12 04:51:55 +000081 Status error;
Kate Stoneb9c1b512016-09-06 20:57:50 +000082 error.SetErrorString("empty property list");
83 return error;
Caroline Tice3df9a8d2010-09-04 00:03:46 +000084}
85
86size_t
Zachary Turner067d1db2016-11-16 21:45:04 +000087Properties::Apropos(llvm::StringRef keyword,
Kate Stoneb9c1b512016-09-06 20:57:50 +000088 std::vector<const Property *> &matching_properties) const {
89 OptionValuePropertiesSP properties_sp(GetValueProperties());
90 if (properties_sp) {
91 properties_sp->Apropos(keyword, matching_properties);
92 }
93 return matching_properties.size();
Caroline Tice3df9a8d2010-09-04 00:03:46 +000094}
Greg Claytone8cd0c92012-10-19 18:02:49 +000095
Greg Claytone8cd0c92012-10-19 18:02:49 +000096lldb::OptionValuePropertiesSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000097Properties::GetSubProperty(const ExecutionContext *exe_ctx,
98 const ConstString &name) {
99 OptionValuePropertiesSP properties_sp(GetValueProperties());
100 if (properties_sp)
101 return properties_sp->GetSubProperty(exe_ctx, name);
102 return lldb::OptionValuePropertiesSP();
Greg Claytone8cd0c92012-10-19 18:02:49 +0000103}
104
Kate Stoneb9c1b512016-09-06 20:57:50 +0000105const char *Properties::GetExperimentalSettingsName() { return "experimental"; }
106
Zachary Turner31d97a52016-11-17 18:08:12 +0000107bool Properties::IsSettingExperimental(llvm::StringRef setting) {
108 if (setting.empty())
Kate Stoneb9c1b512016-09-06 20:57:50 +0000109 return false;
110
Zachary Turner31d97a52016-11-17 18:08:12 +0000111 llvm::StringRef experimental = GetExperimentalSettingsName();
112 size_t dot_pos = setting.find_first_of('.');
113 return setting.take_front(dot_pos) == experimental;
Jim Ingham8b57dcf2016-07-06 01:27:33 +0000114}