diff options
Diffstat (limited to 'lldb/source/Interpreter')
-rw-r--r-- | lldb/source/Interpreter/OptionGroupBoolean.cpp | 23 | ||||
-rw-r--r-- | lldb/source/Interpreter/OptionValueFileSpec.cpp | 31 | ||||
-rw-r--r-- | lldb/source/Interpreter/OptionValueUUID.cpp | 52 | ||||
-rw-r--r-- | lldb/source/Interpreter/Property.cpp | 2 |
4 files changed, 98 insertions, 10 deletions
diff --git a/lldb/source/Interpreter/OptionGroupBoolean.cpp b/lldb/source/Interpreter/OptionGroupBoolean.cpp index f5403cfb992..58ac0f1def8 100644 --- a/lldb/source/Interpreter/OptionGroupBoolean.cpp +++ b/lldb/source/Interpreter/OptionGroupBoolean.cpp @@ -21,20 +21,19 @@ OptionGroupBoolean::OptionGroupBoolean (uint32_t usage_mask, bool required, const char *long_option, char short_option, - uint32_t completion_type, - lldb::CommandArgumentType argument_type, const char *usage_text, - bool default_value) : + bool default_value, + bool no_argument_toggle_default) : m_value (default_value, default_value) { m_option_definition.usage_mask = usage_mask; m_option_definition.required = required; m_option_definition.long_option = long_option; m_option_definition.short_option = short_option; - m_option_definition.option_has_arg = required_argument; + m_option_definition.option_has_arg = no_argument_toggle_default ? no_argument : required_argument; m_option_definition.enum_values = NULL; - m_option_definition.completion_type = completion_type; - m_option_definition.argument_type = argument_type; + m_option_definition.completion_type = 0; + m_option_definition.argument_type = eArgTypeBoolean; m_option_definition.usage_text = usage_text; } @@ -47,7 +46,17 @@ OptionGroupBoolean::SetOptionValue (CommandInterpreter &interpreter, uint32_t option_idx, const char *option_arg) { - Error error (m_value.SetValueFromCString (option_arg)); + Error error; + if (m_option_definition.option_has_arg == no_argument) + { + // Not argument, toggle the default value and mark the option as having been set + m_value.SetCurrentValue (!m_value.GetDefaultValue()); + m_value.SetOptionWasSet (); + } + else + { + error = m_value.SetValueFromCString (option_arg); + } return error; } diff --git a/lldb/source/Interpreter/OptionValueFileSpec.cpp b/lldb/source/Interpreter/OptionValueFileSpec.cpp index 03608753658..62b80bc9f8b 100644 --- a/lldb/source/Interpreter/OptionValueFileSpec.cpp +++ b/lldb/source/Interpreter/OptionValueFileSpec.cpp @@ -21,6 +21,35 @@ using namespace lldb; using namespace lldb_private; + +OptionValueFileSpec::OptionValueFileSpec () : + OptionValue(), + m_current_value (), + m_default_value (), + m_data_sp(), + m_completion_mask (CommandCompletions::eDiskFileCompletion) +{ +} + +OptionValueFileSpec::OptionValueFileSpec (const FileSpec &value) : + OptionValue(), + m_current_value (value), + m_default_value (value), + m_data_sp(), + m_completion_mask (CommandCompletions::eDiskFileCompletion) +{ +} + +OptionValueFileSpec::OptionValueFileSpec (const FileSpec ¤t_value, + const FileSpec &default_value) : + OptionValue(), + m_current_value (current_value), + m_default_value (default_value), + m_data_sp(), + m_completion_mask (CommandCompletions::eDiskFileCompletion) +{ +} + void OptionValueFileSpec::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) { @@ -101,7 +130,7 @@ OptionValueFileSpec::AutoComplete (CommandInterpreter &interpreter, word_complete = false; matches.Clear(); CommandCompletions::InvokeCommonCompletionCallbacks (interpreter, - CommandCompletions::eDiskFileCompletion, + m_completion_mask, s, match_start_point, max_return_elements, diff --git a/lldb/source/Interpreter/OptionValueUUID.cpp b/lldb/source/Interpreter/OptionValueUUID.cpp index 03a5684b1d0..4db5a99ca3a 100644 --- a/lldb/source/Interpreter/OptionValueUUID.cpp +++ b/lldb/source/Interpreter/OptionValueUUID.cpp @@ -13,7 +13,10 @@ // C++ Includes // Other libraries and framework includes // Project includes +#include "lldb/Core/Module.h" #include "lldb/Core/Stream.h" +#include "lldb/Core/StringList.h" +#include "lldb/Interpreter/CommandInterpreter.h" using namespace lldb; using namespace lldb_private; @@ -45,7 +48,7 @@ OptionValueUUID::SetValueFromCString (const char *value_cstr, case eVarSetOperationReplace: case eVarSetOperationAssign: { - if (m_uuid.SetfromCString(value_cstr) == 0) + if (m_uuid.SetFromCString(value_cstr) == 0) error.SetErrorStringWithFormat ("invalid uuid string value '%s'", value_cstr); else m_value_was_set = true; @@ -68,3 +71,50 @@ OptionValueUUID::DeepCopy () const { return OptionValueSP(new OptionValueUUID(*this)); } + +size_t +OptionValueUUID::AutoComplete (CommandInterpreter &interpreter, + const char *s, + int match_start_point, + int max_return_elements, + bool &word_complete, + StringList &matches) +{ + word_complete = false; + matches.Clear(); + ExecutionContext exe_ctx(interpreter.GetExecutionContext()); + Target *target = exe_ctx.GetTargetPtr(); + if (target) + { + const size_t num_modules = target->GetImages().GetSize(); + if (num_modules > 0) + { + char uuid_cstr[64]; + UUID::ValueType uuid_bytes; + const size_t num_bytes_decoded = UUID::DecodeUUIDBytesFromCString(s, uuid_bytes, NULL); + for (size_t i=0; i<num_modules; ++i) + { + ModuleSP module_sp (target->GetImages().GetModuleAtIndex(i)); + if (module_sp) + { + const UUID &module_uuid = module_sp->GetUUID(); + if (module_uuid.IsValid()) + { + bool add_uuid = false; + if (num_bytes_decoded == 0) + add_uuid = true; + else + add_uuid = ::memcmp(module_uuid.GetBytes(), uuid_bytes, num_bytes_decoded) == 0; + if (add_uuid) + { + if (module_uuid.GetAsCString(uuid_cstr, sizeof(uuid_cstr))) + matches.AppendString(uuid_cstr); + } + } + } + } + } + } + return matches.GetSize(); +} + diff --git a/lldb/source/Interpreter/Property.cpp b/lldb/source/Interpreter/Property.cpp index d2bf1e1fe98..a66c04d0b01 100644 --- a/lldb/source/Interpreter/Property.cpp +++ b/lldb/source/Interpreter/Property.cpp @@ -148,7 +148,7 @@ Property::Property (const PropertyDefinition &definition) : { UUID uuid; if (definition.default_cstr_value) - uuid.SetfromCString (definition.default_cstr_value); + uuid.SetFromCString (definition.default_cstr_value); m_value_sp.reset (new OptionValueUUID(uuid)); } break; |