//====-- UserSettingsController.cpp ------------------------------*- C++-*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "lldb/Core/UserSettingsController.h" #include "lldb/Interpreter/OptionValueProperties.h" #include "lldb/Utility/Status.h" #include "lldb/Utility/Stream.h" #include // for shared_ptr namespace lldb_private { class CommandInterpreter; } namespace lldb_private { class ConstString; } namespace lldb_private { class ExecutionContext; } namespace lldb_private { class Property; } using namespace lldb; using namespace lldb_private; lldb::OptionValueSP Properties::GetPropertyValue(const ExecutionContext *exe_ctx, llvm::StringRef path, bool will_modify, Status &error) const { OptionValuePropertiesSP properties_sp(GetValueProperties()); if (properties_sp) return properties_sp->GetSubValue(exe_ctx, path, will_modify, error); return lldb::OptionValueSP(); } Status Properties::SetPropertyValue(const ExecutionContext *exe_ctx, VarSetOperationType op, llvm::StringRef path, llvm::StringRef value) { OptionValuePropertiesSP properties_sp(GetValueProperties()); if (properties_sp) return properties_sp->SetSubValue(exe_ctx, op, path, value); Status error; error.SetErrorString("no properties"); return error; } void Properties::DumpAllPropertyValues(const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) { OptionValuePropertiesSP properties_sp(GetValueProperties()); if (properties_sp) return properties_sp->DumpValue(exe_ctx, strm, dump_mask); } void Properties::DumpAllDescriptions(CommandInterpreter &interpreter, Stream &strm) const { strm.PutCString("Top level variables:\n\n"); OptionValuePropertiesSP properties_sp(GetValueProperties()); if (properties_sp) return properties_sp->DumpAllDescriptions(interpreter, strm); } Status Properties::DumpPropertyValue(const ExecutionContext *exe_ctx, Stream &strm, llvm::StringRef property_path, uint32_t dump_mask) { OptionValuePropertiesSP properties_sp(GetValueProperties()); if (properties_sp) { return properties_sp->DumpPropertyValue(exe_ctx, strm, property_path, dump_mask); } Status error; error.SetErrorString("empty property list"); return error; } size_t Properties::Apropos(llvm::StringRef keyword, std::vector &matching_properties) const { OptionValuePropertiesSP properties_sp(GetValueProperties()); if (properties_sp) { properties_sp->Apropos(keyword, matching_properties); } return matching_properties.size(); } lldb::OptionValuePropertiesSP Properties::GetSubProperty(const ExecutionContext *exe_ctx, const ConstString &name) { OptionValuePropertiesSP properties_sp(GetValueProperties()); if (properties_sp) return properties_sp->GetSubProperty(exe_ctx, name); return lldb::OptionValuePropertiesSP(); } const char *Properties::GetExperimentalSettingsName() { return "experimental"; } bool Properties::IsSettingExperimental(llvm::StringRef setting) { if (setting.empty()) return false; llvm::StringRef experimental = GetExperimentalSettingsName(); size_t dot_pos = setting.find_first_of('.'); return setting.take_front(dot_pos) == experimental; }