diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Interpreter/OptionValueEnumeration.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Interpreter/OptionValueEnumeration.cpp | 219 |
1 files changed, 94 insertions, 125 deletions
diff --git a/contrib/llvm/tools/lldb/source/Interpreter/OptionValueEnumeration.cpp b/contrib/llvm/tools/lldb/source/Interpreter/OptionValueEnumeration.cpp index 0f163d1..679b5cc 100644 --- a/contrib/llvm/tools/lldb/source/Interpreter/OptionValueEnumeration.cpp +++ b/contrib/llvm/tools/lldb/source/Interpreter/OptionValueEnumeration.cpp @@ -18,146 +18,115 @@ using namespace lldb; using namespace lldb_private; -OptionValueEnumeration::OptionValueEnumeration (const OptionEnumValueElement *enumerators, - enum_type value) : - OptionValue(), - m_current_value (value), - m_default_value (value), - m_enumerations () -{ - SetEnumerations(enumerators); +OptionValueEnumeration::OptionValueEnumeration( + const OptionEnumValueElement *enumerators, enum_type value) + : OptionValue(), m_current_value(value), m_default_value(value), + m_enumerations() { + SetEnumerations(enumerators); } -OptionValueEnumeration::~OptionValueEnumeration() -{ -} +OptionValueEnumeration::~OptionValueEnumeration() {} -void -OptionValueEnumeration::DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) -{ +void OptionValueEnumeration::DumpValue(const ExecutionContext *exe_ctx, + Stream &strm, uint32_t dump_mask) { + if (dump_mask & eDumpOptionType) + strm.Printf("(%s)", GetTypeAsCString()); + if (dump_mask & eDumpOptionValue) { if (dump_mask & eDumpOptionType) - strm.Printf ("(%s)", GetTypeAsCString ()); - if (dump_mask & eDumpOptionValue) - { - if (dump_mask & eDumpOptionType) - strm.PutCString (" = "); - const size_t count = m_enumerations.GetSize (); - for (size_t i=0; i<count; ++i) - { - if (m_enumerations.GetValueAtIndexUnchecked(i).value == m_current_value) - { - strm.PutCString(m_enumerations.GetCStringAtIndex(i)); - return; - } - } - strm.Printf("%" PRIu64, (uint64_t)m_current_value); + strm.PutCString(" = "); + const size_t count = m_enumerations.GetSize(); + for (size_t i = 0; i < count; ++i) { + if (m_enumerations.GetValueAtIndexUnchecked(i).value == m_current_value) { + strm.PutCString(m_enumerations.GetCStringAtIndex(i)); + return; + } } + strm.Printf("%" PRIu64, (uint64_t)m_current_value); + } } -Error -OptionValueEnumeration::SetValueFromString (llvm::StringRef value, VarSetOperationType op) -{ - Error error; - switch (op) - { - case eVarSetOperationClear: - Clear (); - NotifyValueChanged(); - break; - - case eVarSetOperationReplace: - case eVarSetOperationAssign: - { - ConstString const_enumerator_name(value.trim()); - const EnumerationMapEntry *enumerator_entry = m_enumerations.FindFirstValueForName (const_enumerator_name.GetCString()); - if (enumerator_entry) - { - m_current_value = enumerator_entry->value.value; - NotifyValueChanged(); - } - else - { - StreamString error_strm; - error_strm.Printf("invalid enumeration value '%s'", value.str().c_str()); - const size_t count = m_enumerations.GetSize (); - if (count) - { - error_strm.Printf(", valid values are: %s", m_enumerations.GetCStringAtIndex(0)); - for (size_t i=1; i<count; ++i) - { - error_strm.Printf (", %s", m_enumerations.GetCStringAtIndex(i)); - } - } - error.SetErrorString(error_strm.GetData()); - } - break; - } - - case eVarSetOperationInsertBefore: - case eVarSetOperationInsertAfter: - case eVarSetOperationRemove: - case eVarSetOperationAppend: - case eVarSetOperationInvalid: - error = OptionValue::SetValueFromString (value, op); - break; - } - return error; -} +Error OptionValueEnumeration::SetValueFromString(llvm::StringRef value, + VarSetOperationType op) { + Error error; + switch (op) { + case eVarSetOperationClear: + Clear(); + NotifyValueChanged(); + break; -void -OptionValueEnumeration::SetEnumerations (const OptionEnumValueElement *enumerators) -{ - m_enumerations.Clear(); - if (enumerators) - { - for (size_t i=0; enumerators[i].string_value != nullptr; ++i) - { - ConstString const_enumerator_name(enumerators[i].string_value); - EnumeratorInfo enumerator_info = { enumerators[i].value, enumerators[i].usage }; - m_enumerations.Append (const_enumerator_name.GetCString(), enumerator_info); + case eVarSetOperationReplace: + case eVarSetOperationAssign: { + ConstString const_enumerator_name(value.trim()); + const EnumerationMapEntry *enumerator_entry = + m_enumerations.FindFirstValueForName( + const_enumerator_name.GetStringRef()); + if (enumerator_entry) { + m_current_value = enumerator_entry->value.value; + NotifyValueChanged(); + } else { + StreamString error_strm; + error_strm.Printf("invalid enumeration value '%s'", value.str().c_str()); + const size_t count = m_enumerations.GetSize(); + if (count) { + error_strm.Printf(", valid values are: %s", + m_enumerations.GetCStringAtIndex(0).str().c_str()); + for (size_t i = 1; i < count; ++i) { + error_strm.Printf(", %s", + m_enumerations.GetCStringAtIndex(i).str().c_str()); } - m_enumerations.Sort(); + } + error.SetErrorString(error_strm.GetString()); } -} - + break; + } -lldb::OptionValueSP -OptionValueEnumeration::DeepCopy () const -{ - return OptionValueSP(new OptionValueEnumeration(*this)); + case eVarSetOperationInsertBefore: + case eVarSetOperationInsertAfter: + case eVarSetOperationRemove: + case eVarSetOperationAppend: + case eVarSetOperationInvalid: + error = OptionValue::SetValueFromString(value, op); + break; + } + return error; } -size_t -OptionValueEnumeration::AutoComplete (CommandInterpreter &interpreter, - const char *s, - int match_start_point, - int max_return_elements, - bool &word_complete, - StringList &matches) -{ - word_complete = false; - matches.Clear(); - - const uint32_t num_enumerators = m_enumerations.GetSize(); - if (s && s[0]) - { - const size_t s_len = strlen(s); - for (size_t i=0; i<num_enumerators; ++i) - { - const char *name = m_enumerations.GetCStringAtIndex(i); - if (::strncmp(s, name, s_len) == 0) - matches.AppendString(name); - } - } - else - { - // only suggest "true" or "false" by default - for (size_t i=0; i<num_enumerators; ++i) - matches.AppendString(m_enumerations.GetCStringAtIndex(i)); +void OptionValueEnumeration::SetEnumerations( + const OptionEnumValueElement *enumerators) { + m_enumerations.Clear(); + if (enumerators) { + for (size_t i = 0; enumerators[i].string_value != nullptr; ++i) { + ConstString const_enumerator_name(enumerators[i].string_value); + EnumeratorInfo enumerator_info = {enumerators[i].value, + enumerators[i].usage}; + m_enumerations.Append(const_enumerator_name.GetStringRef(), + enumerator_info); } - return matches.GetSize(); + m_enumerations.Sort(); + } } +lldb::OptionValueSP OptionValueEnumeration::DeepCopy() const { + return OptionValueSP(new OptionValueEnumeration(*this)); +} +size_t OptionValueEnumeration::AutoComplete( + CommandInterpreter &interpreter, llvm::StringRef s, int match_start_point, + int max_return_elements, bool &word_complete, StringList &matches) { + word_complete = false; + matches.Clear(); - + const uint32_t num_enumerators = m_enumerations.GetSize(); + if (!s.empty()) { + for (size_t i = 0; i < num_enumerators; ++i) { + llvm::StringRef name = m_enumerations.GetCStringAtIndex(i); + if (name.startswith(s)) + matches.AppendString(name); + } + } else { + // only suggest "true" or "false" by default + for (size_t i = 0; i < num_enumerators; ++i) + matches.AppendString(m_enumerations.GetCStringAtIndex(i)); + } + return matches.GetSize(); +} |