blob: 92c3c8440d15da8f9d5d39a23c2e365aa41cce5d [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
Zachary Turner31d97a52016-11-17 18:08:12 +000027Properties::GetPropertyValue(const ExecutionContext *exe_ctx, llvm::StringRef path,
Kate Stoneb9c1b512016-09-06 20:57:50 +000028 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,
Zachary Turner31d97a52016-11-17 18:08:12 +000036 VarSetOperationType op, llvm::StringRef path,
37 llvm::StringRef value) {
Kate Stoneb9c1b512016-09-06 20:57:50 +000038 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,
Zachary Turner31d97a52016-11-17 18:08:12 +000063 Stream &strm, llvm::StringRef property_path,
Kate Stoneb9c1b512016-09-06 20:57:50 +000064 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
Zachary Turner31d97a52016-11-17 18:08:12 +000096bool Properties::IsSettingExperimental(llvm::StringRef setting) {
97 if (setting.empty())
Kate Stoneb9c1b512016-09-06 20:57:50 +000098 return false;
99
Zachary Turner31d97a52016-11-17 18:08:12 +0000100 llvm::StringRef experimental = GetExperimentalSettingsName();
101 size_t dot_pos = setting.find_first_of('.');
102 return setting.take_front(dot_pos) == experimental;
Jim Ingham8b57dcf2016-07-06 01:27:33 +0000103}