summaryrefslogtreecommitdiffstats
path: root/lldb/source/Interpreter
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Interpreter')
-rw-r--r--lldb/source/Interpreter/OptionGroupBoolean.cpp23
-rw-r--r--lldb/source/Interpreter/OptionValueFileSpec.cpp31
-rw-r--r--lldb/source/Interpreter/OptionValueUUID.cpp52
-rw-r--r--lldb/source/Interpreter/Property.cpp2
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 &current_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;
OpenPOWER on IntegriCloud