Author: zturner Date: Fri Sep 16 21:00:02 2016 New Revision: 281799 URL: http://llvm.org/viewvc/llvm-project?rev=281799&view=rev Log: Convert many functions to use StringRefs.
Where possible, remove the const char* version. To keep the risk and impact here minimal, I've only done the simplest functions. In the process, I found a few opportunities for adding some unit tests, so I added those as well. Tested on Windows, Linux, and OSX. Added: lldb/trunk/unittests/Breakpoint/ lldb/trunk/unittests/Breakpoint/BreakpointIDTest.cpp lldb/trunk/unittests/Breakpoint/CMakeLists.txt lldb/trunk/unittests/Platform/ lldb/trunk/unittests/Platform/CMakeLists.txt lldb/trunk/unittests/Platform/PlatformDarwinTest.cpp Modified: lldb/trunk/include/lldb/Breakpoint/BreakpointID.h lldb/trunk/include/lldb/Interpreter/Args.h lldb/trunk/include/lldb/Target/Language.h lldb/trunk/source/Breakpoint/Breakpoint.cpp lldb/trunk/source/Breakpoint/BreakpointID.cpp lldb/trunk/source/Breakpoint/BreakpointIDList.cpp lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp lldb/trunk/source/Interpreter/Args.cpp lldb/trunk/source/Interpreter/OptionGroupPlatform.cpp lldb/trunk/source/Interpreter/OptionValueLanguage.cpp lldb/trunk/source/Interpreter/Property.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.h lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp lldb/trunk/source/Target/Language.cpp lldb/trunk/unittests/CMakeLists.txt lldb/trunk/unittests/Interpreter/TestArgs.cpp Modified: lldb/trunk/include/lldb/Breakpoint/BreakpointID.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Breakpoint/BreakpointID.h?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/include/lldb/Breakpoint/BreakpointID.h (original) +++ lldb/trunk/include/lldb/Breakpoint/BreakpointID.h Fri Sep 16 21:00:02 2016 @@ -17,6 +17,8 @@ #include "lldb/lldb-private.h" +#include "llvm/ADT/StringRef.h" + namespace lldb_private { //---------------------------------------------------------------------- @@ -87,8 +89,7 @@ public: /// \b true if the name is a breakpoint name (as opposed to an ID or /// range) false otherwise. //------------------------------------------------------------------ - // TODO: Convert this function to use a StringRef. - static bool StringIsBreakpointName(const char *name, Error &error); + static bool StringIsBreakpointName(llvm::StringRef str, Error &error); //------------------------------------------------------------------ /// Takes a breakpoint ID and the breakpoint location id and returns Modified: lldb/trunk/include/lldb/Interpreter/Args.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/Args.h?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/include/lldb/Interpreter/Args.h (original) +++ lldb/trunk/include/lldb/Interpreter/Args.h Fri Sep 16 21:00:02 2016 @@ -394,9 +394,8 @@ public: static uint32_t StringToGenericRegister(llvm::StringRef s); - // TODO: Update to take a StringRef - static const char *StringToVersion(const char *s, uint32_t &major, - uint32_t &minor, uint32_t &update); + static bool StringToVersion(llvm::StringRef string, uint32_t &major, + uint32_t &minor, uint32_t &update); static const char *GetShellSafeArgument(const FileSpec &shell, const char *unsafe_arg, Modified: lldb/trunk/include/lldb/Target/Language.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Language.h?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/include/lldb/Target/Language.h (original) +++ lldb/trunk/include/lldb/Target/Language.h Fri Sep 16 21:00:02 2016 @@ -142,8 +142,8 @@ public: // These are accessors for general information about the Languages lldb knows // about: - // TODO: Convert this to using a StringRef. static lldb::LanguageType GetLanguageTypeFromString(const char *string); + static lldb::LanguageType GetLanguageTypeFromString(llvm::StringRef string); static const char *GetNameForLanguageType(lldb::LanguageType language); Modified: lldb/trunk/source/Breakpoint/Breakpoint.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/Breakpoint.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Breakpoint/Breakpoint.cpp (original) +++ lldb/trunk/source/Breakpoint/Breakpoint.cpp Fri Sep 16 21:00:02 2016 @@ -764,7 +764,7 @@ size_t Breakpoint::GetNumLocations() con bool Breakpoint::AddName(const char *new_name, Error &error) { if (!new_name) return false; - if (!BreakpointID::StringIsBreakpointName(new_name, error)) { + if (!BreakpointID::StringIsBreakpointName(llvm::StringRef(new_name), error)) { error.SetErrorStringWithFormat("input name \"%s\" not a breakpoint name.", new_name); return false; Modified: lldb/trunk/source/Breakpoint/BreakpointID.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointID.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Breakpoint/BreakpointID.cpp (original) +++ lldb/trunk/source/Breakpoint/BreakpointID.cpp Fri Sep 16 21:00:02 2016 @@ -107,14 +107,21 @@ bool BreakpointID::ParseCanonicalReferen return false; } -bool BreakpointID::StringIsBreakpointName(const char *name, Error &error) { +bool BreakpointID::StringIsBreakpointName(llvm::StringRef str, Error &error) { error.Clear(); + if (str.empty()) + return false; + + // First character must be a letter or _ + if (!isalpha(str[0]) || str[0] != '_') + return false; - if (name && (name[0] >= 'A' && name[0] <= 'z')) { - if (strcspn(name, ".- ") != strlen(name)) { - error.SetErrorStringWithFormat("invalid breakpoint name: \"%s\"", name); - } - return true; - } else + // Cannot contain ., -, or space. + if (str.find_first_of(".- ") != llvm::StringRef::npos) { + error.SetErrorStringWithFormat("invalid breakpoint name: \"%s\"", + str.str().c_str()); return false; + } + + return true; } Modified: lldb/trunk/source/Breakpoint/BreakpointIDList.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointIDList.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Breakpoint/BreakpointIDList.cpp (original) +++ lldb/trunk/source/Breakpoint/BreakpointIDList.cpp Fri Sep 16 21:00:02 2016 @@ -168,7 +168,8 @@ void BreakpointIDList::FindAndReplaceIDR is_range = true; range_start.assign(current_arg, range_start_len); range_end = current_arg + range_end_pos; - } else if (BreakpointID::StringIsBreakpointName(current_arg, error)) { + } else if (BreakpointID::StringIsBreakpointName( + llvm::StringRef(current_arg), error)) { if (!error.Success()) { new_args.Clear(); result.AppendError(error.AsCString()); Modified: lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp (original) +++ lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp Fri Sep 16 21:00:02 2016 @@ -98,7 +98,7 @@ BreakpointResolver *BreakpointResolverNa bool success = options_dict.GetValueForKeyAsString( GetKey(OptionNames::LanguageName), language_name); if (success) { - language = Language::GetLanguageTypeFromString(language_name.c_str()); + language = Language::GetLanguageTypeFromString(language_name); if (language == eLanguageTypeUnknown) { error.SetErrorStringWithFormat("BRN::CFSD: Unknown language: %s.", language_name.c_str()); Modified: lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp Fri Sep 16 21:00:02 2016 @@ -92,6 +92,7 @@ public: ExecutionContext *execution_context) override { Error error; const int short_option = m_getopt_table[option_idx].val; + llvm::StringRef option_strref(option_arg ? option_arg : ""); switch (short_option) { case 'a': { @@ -245,10 +246,11 @@ public: m_func_name_type_mask |= eFunctionNameTypeAuto; break; - case 'N': - if (BreakpointID::StringIsBreakpointName(option_arg, error)) + case 'N': { + if (BreakpointID::StringIsBreakpointName(option_strref, error)) m_breakpoint_names.push_back(option_arg); break; + } case 'R': { lldb::addr_t tmp_offset_addr; @@ -1785,12 +1787,13 @@ public: ExecutionContext *execution_context) override { Error error; const int short_option = g_breakpoint_name_options[option_idx].short_option; + llvm::StringRef option_strref(option_value ? option_value : ""); switch (short_option) { case 'N': - if (BreakpointID::StringIsBreakpointName(option_value, error) && + if (BreakpointID::StringIsBreakpointName(option_strref, error) && error.Success()) - m_name.SetValueFromString(option_value); + m_name.SetValueFromString(option_strref); break; case 'B': Modified: lldb/trunk/source/Interpreter/Args.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/Args.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/Args.cpp (original) +++ lldb/trunk/source/Interpreter/Args.cpp Fri Sep 16 21:00:02 2016 @@ -765,37 +765,27 @@ char Args::StringToChar(llvm::StringRef return s[0]; } -const char *Args::StringToVersion(const char *s, uint32_t &major, - uint32_t &minor, uint32_t &update) { +bool Args::StringToVersion(llvm::StringRef string, uint32_t &major, + uint32_t &minor, uint32_t &update) { major = UINT32_MAX; minor = UINT32_MAX; update = UINT32_MAX; - if (s && s[0]) { - char *pos = nullptr; - unsigned long uval32 = ::strtoul(s, &pos, 0); - if (pos == s) - return s; - major = uval32; - if (*pos == '\0') { - return pos; // Decoded major and got end of string - } else if (*pos == '.') { - const char *minor_cstr = pos + 1; - uval32 = ::strtoul(minor_cstr, &pos, 0); - if (pos == minor_cstr) - return pos; // Didn't get any digits for the minor version... - minor = uval32; - if (*pos == '.') { - const char *update_cstr = pos + 1; - uval32 = ::strtoul(update_cstr, &pos, 0); - if (pos == update_cstr) - return pos; - update = uval32; - } - return pos; - } - } - return nullptr; + if (string.empty()) + return false; + + llvm::StringRef major_str, minor_str, update_str; + + std::tie(major_str, minor_str) = string.split('.'); + std::tie(minor_str, update_str) = minor_str.split('.'); + if (major_str.getAsInteger(10, major)) + return false; + if (!minor_str.empty() && minor_str.getAsInteger(10, minor)) + return false; + if (!update_str.empty() && update_str.getAsInteger(10, update)) + return false; + + return true; } const char *Args::GetShellSafeArgument(const FileSpec &shell, Modified: lldb/trunk/source/Interpreter/OptionGroupPlatform.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionGroupPlatform.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/OptionGroupPlatform.cpp (original) +++ lldb/trunk/source/Interpreter/OptionGroupPlatform.cpp Fri Sep 16 21:00:02 2016 @@ -105,6 +105,7 @@ Error OptionGroupPlatform::SetOptionValu ++option_idx; const int short_option = g_option_table[option_idx].short_option; + llvm::StringRef option_strref(option_arg ? option_arg : ""); switch (short_option) { case 'p': @@ -112,9 +113,8 @@ Error OptionGroupPlatform::SetOptionValu break; case 'v': - if (Args::StringToVersion(option_arg, m_os_version_major, - m_os_version_minor, - m_os_version_update) == option_arg) + if (!Args::StringToVersion(option_strref, m_os_version_major, + m_os_version_minor, m_os_version_update)) error.SetErrorStringWithFormat("invalid version string '%s'", option_arg); break; Modified: lldb/trunk/source/Interpreter/OptionValueLanguage.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionValueLanguage.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/OptionValueLanguage.cpp (original) +++ lldb/trunk/source/Interpreter/OptionValueLanguage.cpp Fri Sep 16 21:00:02 2016 @@ -49,7 +49,7 @@ Error OptionValueLanguage::SetValueFromS languages_for_expressions); LanguageType new_type = - Language::GetLanguageTypeFromString(lang_name.GetCString()); + Language::GetLanguageTypeFromString(lang_name.GetStringRef()); if (new_type && languages_for_types.count(new_type)) { m_value_was_set = true; m_current_value = new_type; Modified: lldb/trunk/source/Interpreter/Property.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/Property.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/Property.cpp (original) +++ lldb/trunk/source/Interpreter/Property.cpp Fri Sep 16 21:00:02 2016 @@ -139,7 +139,8 @@ Property::Property(const PropertyDefinit { LanguageType new_lang = eLanguageTypeUnknown; if (definition.default_cstr_value) - Language::GetLanguageTypeFromString(definition.default_cstr_value); + Language::GetLanguageTypeFromString( + llvm::StringRef(definition.default_cstr_value)); else new_lang = (LanguageType)definition.default_uint_value; m_value_sp.reset(new OptionValueLanguage(new_lang)); Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp (original) +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp Fri Sep 16 21:00:02 2016 @@ -1667,6 +1667,24 @@ FileSpec PlatformDarwin::GetSDKDirectory return FindSDKInXcodeForModules(sdk_type, sdks_spec); } +std::tuple<uint32_t, uint32_t, uint32_t, llvm::StringRef> +PlatformDarwin::ParseVersionBuildDir(llvm::StringRef dir) { + uint32_t major, minor, update; + llvm::StringRef build; + llvm::StringRef version_str; + llvm::StringRef build_str; + std::tie(version_str, build_str) = dir.split(' '); + if (Args::StringToVersion(version_str, major, minor, update) || + build_str.empty()) { + if (build_str.consume_front("(")) { + size_t pos = build_str.find(')'); + build = build_str.slice(0, pos); + } + } + + return std::make_tuple(major, minor, update, build); +} + void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType( Target *target, std::vector<std::string> &options, SDKType sdk_type) { const std::vector<std::string> apple_arguments = { @@ -1783,14 +1801,11 @@ bool PlatformDarwin::GetOSVersion(uint32 const char *env_cstr = env.GetArgumentAtIndex(i); if (env_cstr) { llvm::StringRef env_str(env_cstr); - if (env_str.startswith(k_runtime_version)) { - llvm::StringRef version_str( - env_str.substr(k_runtime_version.size())); - Args::StringToVersion(version_str.data(), major, minor, update); - if (major != UINT32_MAX) + if (env_str.consume_front(k_runtime_version)) { + if (Args::StringToVersion(env_str, major, minor, update)) return true; - } else if (env_str.startswith(k_dyld_root_path)) { - dyld_root_path = env_str.substr(k_dyld_root_path.size()).str(); + } else if (env_str.consume_front(k_dyld_root_path)) { + dyld_root_path = env_str; } } } @@ -1801,8 +1816,7 @@ bool PlatformDarwin::GetOSVersion(uint32 std::string product_version; if (system_version_plist.GetValueAsString("ProductVersion", product_version)) { - Args::StringToVersion(product_version.c_str(), major, minor, update); - return major != UINT32_MAX; + return Args::StringToVersion(product_version, major, minor, update); } } } Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.h?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.h (original) +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.h Fri Sep 16 21:00:02 2016 @@ -12,12 +12,15 @@ // C Includes // C++ Includes -#include <string> // Other libraries and framework includes // Project includes #include "Plugins/Platform/POSIX/PlatformPOSIX.h" #include "lldb/Host/FileSpec.h" +#include "llvm/ADT/StringRef.h" + +#include <string> +#include <tuple> class PlatformDarwin : public PlatformPOSIX { public: @@ -89,6 +92,9 @@ public: lldb_private::Error LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) override; + static std::tuple<uint32_t, uint32_t, uint32_t, llvm::StringRef> + ParseVersionBuildDir(llvm::StringRef str); + protected: void ReadLibdispatchOffsetsAddress(lldb_private::Process *process); Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp (original) +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleTV.cpp Fri Sep 16 21:00:02 2016 @@ -47,16 +47,11 @@ PlatformRemoteAppleTV::SDKDirectoryInfo: const lldb_private::FileSpec &sdk_dir) : directory(sdk_dir), build(), version_major(0), version_minor(0), version_update(0), user_cached(false) { - const char *dirname_cstr = sdk_dir.GetFilename().GetCString(); - const char *pos = Args::StringToVersion(dirname_cstr, version_major, - version_minor, version_update); - - if (pos && pos[0] == ' ' && pos[1] == '(') { - const char *build_start = pos + 2; - const char *end_paren = strchr(build_start, ')'); - if (end_paren && build_start < end_paren) - build.SetCStringWithLength(build_start, end_paren - build_start); - } + llvm::StringRef dirname_str = sdk_dir.GetFilename().GetStringRef(); + llvm::StringRef build_str; + std::tie(version_major, version_minor, version_update, build_str) = + ParseVersionBuildDir(dirname_str); + build.SetString(build_str); } //------------------------------------------------------------------ Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp (original) +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.cpp Fri Sep 16 21:00:02 2016 @@ -47,16 +47,11 @@ PlatformRemoteAppleWatch::SDKDirectoryIn const lldb_private::FileSpec &sdk_dir) : directory(sdk_dir), build(), version_major(0), version_minor(0), version_update(0), user_cached(false) { - const char *dirname_cstr = sdk_dir.GetFilename().GetCString(); - const char *pos = Args::StringToVersion(dirname_cstr, version_major, - version_minor, version_update); - - if (pos && pos[0] == ' ' && pos[1] == '(') { - const char *build_start = pos + 2; - const char *end_paren = strchr(build_start, ')'); - if (end_paren && build_start < end_paren) - build.SetCStringWithLength(build_start, end_paren - build_start); - } + llvm::StringRef dirname_str = sdk_dir.GetFilename().GetStringRef(); + llvm::StringRef build_str; + std::tie(version_major, version_minor, version_update, build_str) = + ParseVersionBuildDir(dirname_str); + build.SetString(build_str); } //------------------------------------------------------------------ Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp (original) +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp Fri Sep 16 21:00:02 2016 @@ -34,16 +34,11 @@ PlatformRemoteiOS::SDKDirectoryInfo::SDK const lldb_private::FileSpec &sdk_dir) : directory(sdk_dir), build(), version_major(0), version_minor(0), version_update(0), user_cached(false) { - const char *dirname_cstr = sdk_dir.GetFilename().GetCString(); - const char *pos = Args::StringToVersion(dirname_cstr, version_major, - version_minor, version_update); - - if (pos && pos[0] == ' ' && pos[1] == '(') { - const char *build_start = pos + 2; - const char *end_paren = strchr(build_start, ')'); - if (end_paren && build_start < end_paren) - build.SetCStringWithLength(build_start, end_paren - build_start); - } + llvm::StringRef dirname_str = sdk_dir.GetFilename().GetStringRef(); + llvm::StringRef build_str; + std::tie(version_major, version_minor, version_update, build_str) = + ParseVersionBuildDir(dirname_str); + build.SetString(build_str); } //------------------------------------------------------------------ Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (original) +++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp Fri Sep 16 21:00:02 2016 @@ -1194,8 +1194,8 @@ bool GDBRemoteCommunicationClient::GetHo // "version" key instead of // "os_version"... { - Args::StringToVersion(value.str().c_str(), m_os_version_major, - m_os_version_minor, m_os_version_update); + Args::StringToVersion(value, m_os_version_major, m_os_version_minor, + m_os_version_update); if (m_os_version_major != UINT32_MAX) ++num_keys_decoded; } else if (name.equals("watchpoint_exceptions_received")) { Modified: lldb/trunk/source/Target/Language.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Language.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/source/Target/Language.cpp (original) +++ lldb/trunk/source/Target/Language.cpp Fri Sep 16 21:00:02 2016 @@ -171,11 +171,16 @@ struct language_name_pair language_names static uint32_t num_languages = sizeof(language_names) / sizeof(struct language_name_pair); -LanguageType Language::GetLanguageTypeFromString(const char *string) { - for (uint32_t i = 0; i < num_languages; i++) { - if (strcasecmp(language_names[i].name, string) == 0) - return (LanguageType)language_names[i].type; +LanguageType Language::GetLanguageTypeFromString(const char *s) { + return GetLanguageTypeFromString(llvm::StringRef(s ? s : "")); +} + +LanguageType Language::GetLanguageTypeFromString(llvm::StringRef string) { + for (const auto &L : language_names) { + if (string.equals_lower(L.name)) + return static_cast<LanguageType>(L.type); } + return eLanguageTypeUnknown; } Added: lldb/trunk/unittests/Breakpoint/BreakpointIDTest.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Breakpoint/BreakpointIDTest.cpp?rev=281799&view=auto ============================================================================== --- lldb/trunk/unittests/Breakpoint/BreakpointIDTest.cpp (added) +++ lldb/trunk/unittests/Breakpoint/BreakpointIDTest.cpp Fri Sep 16 21:00:02 2016 @@ -0,0 +1,30 @@ +//===-- BreakpointIDTest.cpp ------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" + +#include "lldb/Breakpoint/BreakpointID.h" +#include "lldb/Core/Error.h" + +#include "llvm/ADT/StringRef.h" + +using namespace lldb; +using namespace lldb_private; + +TEST(BreakpointIDTest, StringIsBreakpointName) { + Error E; + EXPECT_FALSE(BreakpointID::StringIsBreakpointName("1breakpoint", E)); + EXPECT_FALSE(BreakpointID::StringIsBreakpointName("-", E)); + EXPECT_FALSE(BreakpointID::StringIsBreakpointName("", E)); + EXPECT_FALSE(BreakpointID::StringIsBreakpointName("3.4", E)); + + EXPECT_TRUE(BreakpointID::StringIsBreakpointName("_", E)); + EXPECT_TRUE(BreakpointID::StringIsBreakpointName("a123", E)); + EXPECT_TRUE(BreakpointID::StringIsBreakpointName("test", E)); +} Added: lldb/trunk/unittests/Breakpoint/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Breakpoint/CMakeLists.txt?rev=281799&view=auto ============================================================================== --- lldb/trunk/unittests/Breakpoint/CMakeLists.txt (added) +++ lldb/trunk/unittests/Breakpoint/CMakeLists.txt Fri Sep 16 21:00:02 2016 @@ -0,0 +1,3 @@ +add_lldb_unittest(LLDBBreakpointTests + BreakpointIDTest.cpp + ) Modified: lldb/trunk/unittests/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/CMakeLists.txt?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/unittests/CMakeLists.txt (original) +++ lldb/trunk/unittests/CMakeLists.txt Fri Sep 16 21:00:02 2016 @@ -38,12 +38,14 @@ function(add_unittest_inputs test_name i endforeach() endfunction() +add_subdirectory(Breakpoint) add_subdirectory(Core) add_subdirectory(Editline) add_subdirectory(Expression) add_subdirectory(Host) add_subdirectory(Interpreter) add_subdirectory(Language) +add_subdirectory(Platform) add_subdirectory(Process) add_subdirectory(ScriptInterpreter) add_subdirectory(Symbol) Modified: lldb/trunk/unittests/Interpreter/TestArgs.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Interpreter/TestArgs.cpp?rev=281799&r1=281798&r2=281799&view=diff ============================================================================== --- lldb/trunk/unittests/Interpreter/TestArgs.cpp (original) +++ lldb/trunk/unittests/Interpreter/TestArgs.cpp Fri Sep 16 21:00:02 2016 @@ -150,4 +150,6 @@ TEST(ArgsTest, StringToScriptLanguage) { Args::StringToScriptLanguage("invalid", lldb::eScriptLanguagePython, &success)); EXPECT_FALSE(success); -} \ No newline at end of file +} + +TEST(ArgsTest, StringToVersion) {} Added: lldb/trunk/unittests/Platform/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Platform/CMakeLists.txt?rev=281799&view=auto ============================================================================== --- lldb/trunk/unittests/Platform/CMakeLists.txt (added) +++ lldb/trunk/unittests/Platform/CMakeLists.txt Fri Sep 16 21:00:02 2016 @@ -0,0 +1,3 @@ +add_lldb_unittest(LLDBPlatformTests + PlatformDarwinTest.cpp + ) Added: lldb/trunk/unittests/Platform/PlatformDarwinTest.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Platform/PlatformDarwinTest.cpp?rev=281799&view=auto ============================================================================== --- lldb/trunk/unittests/Platform/PlatformDarwinTest.cpp (added) +++ lldb/trunk/unittests/Platform/PlatformDarwinTest.cpp Fri Sep 16 21:00:02 2016 @@ -0,0 +1,56 @@ +//===-- PlatformDarwinTest.cpp ----------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" + +#include "Plugins/Platform/MacOSX/PlatformDarwin.h" + +#include "llvm/ADT/StringRef.h" + +#include <tuple> + +using namespace lldb; +using namespace lldb_private; + +TEST(PlatformDarwinTest, TestParseVersionBuildDir) { + uint32_t A, B, C; + llvm::StringRef D; + + std::tie(A, B, C, D) = PlatformDarwin::ParseVersionBuildDir("1.2.3 (test1)"); + EXPECT_EQ(1, A); + EXPECT_EQ(2, B); + EXPECT_EQ(3, C); + EXPECT_EQ("test1", D); + + std::tie(A, B, C, D) = PlatformDarwin::ParseVersionBuildDir("2.3 (test2)"); + EXPECT_EQ(2, A); + EXPECT_EQ(3, B); + EXPECT_EQ("test2", D); + + std::tie(A, B, C, D) = PlatformDarwin::ParseVersionBuildDir("3 (test3)"); + EXPECT_EQ(3, A); + EXPECT_EQ("test3", D); + + std::tie(A, B, C, D) = PlatformDarwin::ParseVersionBuildDir("1.2.3 (test"); + EXPECT_EQ(1, A); + EXPECT_EQ(2, B); + EXPECT_EQ(3, C); + EXPECT_EQ("test", D); + + std::tie(A, B, C, D) = PlatformDarwin::ParseVersionBuildDir("2.3.4 test"); + EXPECT_EQ(2, A); + EXPECT_EQ(3, B); + EXPECT_EQ(4, C); + EXPECT_EQ("", D); + + std::tie(A, B, C, D) = PlatformDarwin::ParseVersionBuildDir("3.4.5"); + EXPECT_EQ(3, A); + EXPECT_EQ(4, B); + EXPECT_EQ(5, C); +} \ No newline at end of file _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits