summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Language
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/Language')
-rw-r--r--lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp18
-rw-r--r--lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp61
-rw-r--r--lldb/source/Plugins/Language/ObjC/ObjCLanguage.h6
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();
OpenPOWER on IntegriCloud