diff options
Diffstat (limited to 'lldb/source/Plugins/Language')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | 18 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp | 61 | ||||
-rw-r--r-- | lldb/source/Plugins/Language/ObjC/ObjCLanguage.h | 6 |
3 files changed, 49 insertions, 36 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 81ca95cd36a..5ada1aef2bf 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -307,28 +307,29 @@ public: CPPRuntimeEquivalents() { m_impl.Append(ConstString("std::basic_string<char, std::char_traits<char>, " "std::allocator<char> >") - .AsCString(), + .GetStringRef(), ConstString("basic_string<char>")); // these two (with a prefixed std::) occur when c++stdlib string class // occurs as a template argument in some STL container m_impl.Append(ConstString("std::basic_string<char, std::char_traits<char>, " "std::allocator<char> >") - .AsCString(), + .GetStringRef(), ConstString("std::basic_string<char>")); m_impl.Sort(); } void Add(ConstString &type_name, ConstString &type_equivalent) { - m_impl.Insert(type_name.AsCString(), type_equivalent); + m_impl.Insert(type_name.GetStringRef(), type_equivalent); } uint32_t FindExactMatches(ConstString &type_name, std::vector<ConstString> &equivalents) { uint32_t count = 0; - for (ImplData match = m_impl.FindFirstValueForName(type_name.AsCString()); + for (ImplData match = + m_impl.FindFirstValueForName(type_name.GetStringRef()); match != nullptr; match = m_impl.FindNextValueForName(match)) { equivalents.push_back(match->value); count++; @@ -351,13 +352,13 @@ public: std::vector<ConstString> &equivalents) { uint32_t count = 0; - const char *type_name_cstr = type_name.AsCString(); + llvm::StringRef type_name_cstr = type_name.GetStringRef(); size_t items_count = m_impl.GetSize(); for (size_t item = 0; item < items_count; item++) { - const char *key_cstr = m_impl.GetCStringAtIndex(item); - if (strstr(type_name_cstr, key_cstr)) { + llvm::StringRef key_cstr = m_impl.GetCStringAtIndex(item); + if (type_name_cstr.contains(key_cstr)) { count += AppendReplacements(type_name_cstr, key_cstr, equivalents); } } @@ -377,7 +378,8 @@ private: return target; } - uint32_t AppendReplacements(const char *original, const char *matching_key, + uint32_t AppendReplacements(llvm::StringRef original, + llvm::StringRef matching_key, std::vector<ConstString> &equivalents) { std::string matching_key_str(matching_key); ConstString original_const(original); diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp index 8955baaebf3..1d6522f01a3 100644 --- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp +++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp @@ -83,41 +83,46 @@ void ObjCLanguage::MethodName::Clear() { m_category_is_valid = false; } -bool ObjCLanguage::MethodName::SetName(const char *name, bool strict) { +bool ObjCLanguage::MethodName::SetName(llvm::StringRef name, bool strict) { Clear(); - if (name && name[0]) { - // If "strict" is true. then the method must be specified with a - // '+' or '-' at the beginning. If "strict" is false, then the '+' - // or '-' can be omitted - bool valid_prefix = false; - - if (name[0] == '+' || name[0] == '-') { - valid_prefix = name[1] == '['; - if (name[0] == '+') - m_type = eTypeClassMethod; - else - m_type = eTypeInstanceMethod; - } else if (!strict) { - // "strict" is false, the name just needs to start with '[' - valid_prefix = name[0] == '['; - } + if (name.empty()) + return IsValid(strict); + + // If "strict" is true. then the method must be specified with a + // '+' or '-' at the beginning. If "strict" is false, then the '+' + // or '-' can be omitted + bool valid_prefix = false; + + if (name[0] == '+' || name[0] == '-') { + valid_prefix = name[1] == '['; + if (name[0] == '+') + m_type = eTypeClassMethod; + else + m_type = eTypeInstanceMethod; + } else if (!strict) { + // "strict" is false, the name just needs to start with '[' + valid_prefix = name[0] == '['; + } - if (valid_prefix) { - int name_len = strlen(name); - // Objective C methods must have at least: - // "-[" or "+[" prefix - // One character for a class name - // One character for the space between the class name - // One character for the method name - // "]" suffix - if (name_len >= (5 + (strict ? 1 : 0)) && name[name_len - 1] == ']') { - m_full.SetCStringWithLength(name, name_len); - } + if (valid_prefix) { + int name_len = name.size(); + // Objective C methods must have at least: + // "-[" or "+[" prefix + // One character for a class name + // One character for the space between the class name + // One character for the method name + // "]" suffix + if (name_len >= (5 + (strict ? 1 : 0)) && name.back() == ']') { + m_full.SetString(name); } } return IsValid(strict); } +bool ObjCLanguage::MethodName::SetName(const char *name, bool strict) { + return SetName(llvm::StringRef(name), strict); +} + const ConstString &ObjCLanguage::MethodName::GetClassName() { if (!m_class) { if (IsValid(false)) { diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h index c5010b67526..b458b58998b 100644 --- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h +++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.h @@ -38,6 +38,11 @@ public: m_type(eTypeUnspecified), m_category_is_valid(false) { SetName(name, strict); } + MethodName(llvm::StringRef name, bool strict) + : m_full(), m_class(), m_category(), m_selector(), + m_type(eTypeUnspecified), m_category_is_valid(false) { + SetName(name, strict); + } void Clear(); @@ -60,6 +65,7 @@ public: ConstString GetFullNameWithoutCategory(bool empty_if_no_category); bool SetName(const char *name, bool strict); + bool SetName(llvm::StringRef name, bool strict); const ConstString &GetClassName(); |