blob: 00fbc4b8a9b232546a397673649e426990dca7ab [file] [log] [blame]
Kate Stoneb9c1b512016-09-06 20:57:50 +00001//====-- UserSettingsController.cpp ------------------------------*- C++
2//-*-===//
Caroline Tice3df9a8d2010-09-04 00:03:46 +00003//
4// The LLVM Compiler Infrastructure
5//
6// This file is distributed under the University of Illinois Open Source
7// License. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10
Caroline Tice3df9a8d2010-09-04 00:03:46 +000011#include <algorithm>
Kate Stoneb9c1b512016-09-06 20:57:50 +000012#include <string.h>
Caroline Tice3df9a8d2010-09-04 00:03:46 +000013
Caroline Tice3df9a8d2010-09-04 00:03:46 +000014#include "lldb/Core/Error.h"
Greg Clayton6ad07dd2010-12-19 03:41:24 +000015#include "lldb/Core/RegularExpression.h"
Caroline Tice3df9a8d2010-09-04 00:03:46 +000016#include "lldb/Core/Stream.h"
17#include "lldb/Core/StreamString.h"
Kate Stoneb9c1b512016-09-06 20:57:50 +000018#include "lldb/Core/UserSettingsController.h"
Caroline Tice3df9a8d2010-09-04 00:03:46 +000019#include "lldb/Interpreter/CommandInterpreter.h"
Zachary Turner633a29c2015-03-04 01:58:01 +000020#include "lldb/Interpreter/OptionValueProperties.h"
Greg Clayton67cc0632012-08-22 17:17:09 +000021#include "lldb/Interpreter/OptionValueString.h"
Caroline Tice3df9a8d2010-09-04 00:03:46 +000022
Greg Claytonbfe5f3b2011-02-18 01:44:25 +000023using namespace lldb;
Caroline Tice3df9a8d2010-09-04 00:03:46 +000024using namespace lldb_private;
25
Greg Clayton67cc0632012-08-22 17:17:09 +000026lldb::OptionValueSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000027Properties::GetPropertyValue(const ExecutionContext *exe_ctx, const char *path,
28 bool will_modify, Error &error) const {
29 OptionValuePropertiesSP properties_sp(GetValueProperties());
30 if (properties_sp)
31 return properties_sp->GetSubValue(exe_ctx, path, will_modify, error);
32 return lldb::OptionValueSP();
Greg Claytonbfe5f3b2011-02-18 01:44:25 +000033}
34
Kate Stoneb9c1b512016-09-06 20:57:50 +000035Error Properties::SetPropertyValue(const ExecutionContext *exe_ctx,
36 VarSetOperationType op, const char *path,
37 const char *value) {
38 OptionValuePropertiesSP properties_sp(GetValueProperties());
39 if (properties_sp)
40 return properties_sp->SetSubValue(exe_ctx, op, path, value);
41 Error error;
42 error.SetErrorString("no properties");
43 return error;
Jim Ingham95852752010-09-07 20:27:09 +000044}
45
Kate Stoneb9c1b512016-09-06 20:57:50 +000046void Properties::DumpAllPropertyValues(const ExecutionContext *exe_ctx,
47 Stream &strm, uint32_t dump_mask) {
48 OptionValuePropertiesSP properties_sp(GetValueProperties());
49 if (properties_sp)
50 return properties_sp->DumpValue(exe_ctx, strm, dump_mask);
Jim Ingham95852752010-09-07 20:27:09 +000051}
52
Kate Stoneb9c1b512016-09-06 20:57:50 +000053void Properties::DumpAllDescriptions(CommandInterpreter &interpreter,
54 Stream &strm) const {
55 strm.PutCString("Top level variables:\n\n");
Caroline Tice3df9a8d2010-09-04 00:03:46 +000056
Kate Stoneb9c1b512016-09-06 20:57:50 +000057 OptionValuePropertiesSP properties_sp(GetValueProperties());
58 if (properties_sp)
59 return properties_sp->DumpAllDescriptions(interpreter, strm);
Greg Clayton67cc0632012-08-22 17:17:09 +000060}
61
Kate Stoneb9c1b512016-09-06 20:57:50 +000062Error Properties::DumpPropertyValue(const ExecutionContext *exe_ctx,
63 Stream &strm, const char *property_path,
64 uint32_t dump_mask) {
65 OptionValuePropertiesSP properties_sp(GetValueProperties());
66 if (properties_sp) {
67 return properties_sp->DumpPropertyValue(exe_ctx, strm, property_path,
68 dump_mask);
69 }
70 Error error;
71 error.SetErrorString("empty property list");
72 return error;
Caroline Tice3df9a8d2010-09-04 00:03:46 +000073}
74
75size_t
Zachary Turner067d1db2016-11-16 21:45:04 +000076Properties::Apropos(llvm::StringRef keyword,
Kate Stoneb9c1b512016-09-06 20:57:50 +000077 std::vector<const Property *> &matching_properties) const {
78 OptionValuePropertiesSP properties_sp(GetValueProperties());
79 if (properties_sp) {
80 properties_sp->Apropos(keyword, matching_properties);
81 }
82 return matching_properties.size();
Caroline Tice3df9a8d2010-09-04 00:03:46 +000083}
Greg Claytone8cd0c92012-10-19 18:02:49 +000084
Greg Claytone8cd0c92012-10-19 18:02:49 +000085lldb::OptionValuePropertiesSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000086Properties::GetSubProperty(const ExecutionContext *exe_ctx,
87 const ConstString &name) {
88 OptionValuePropertiesSP properties_sp(GetValueProperties());
89 if (properties_sp)
90 return properties_sp->GetSubProperty(exe_ctx, name);
91 return lldb::OptionValuePropertiesSP();
Greg Claytone8cd0c92012-10-19 18:02:49 +000092}
93
Kate Stoneb9c1b512016-09-06 20:57:50 +000094const char *Properties::GetExperimentalSettingsName() { return "experimental"; }
95
96bool Properties::IsSettingExperimental(const char *setting) {
97 if (setting == nullptr)
98 return false;
99
100 const char *experimental = GetExperimentalSettingsName();
101 const char *dot_pos = strchr(setting, '.');
102 if (dot_pos == nullptr)
103 return strcmp(experimental, setting) == 0;
104 else {
105 size_t first_elem_len = dot_pos - setting;
106 return strncmp(experimental, setting, first_elem_len) == 0;
107 }
Jim Ingham8b57dcf2016-07-06 01:27:33 +0000108}