summaryrefslogtreecommitdiffstats
path: root/lldb/source/Interpreter/Args.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Interpreter/Args.cpp')
-rw-r--r--lldb/source/Interpreter/Args.cpp103
1 files changed, 53 insertions, 50 deletions
diff --git a/lldb/source/Interpreter/Args.cpp b/lldb/source/Interpreter/Args.cpp
index 8ddc91bb109..bc9c32a3e04 100644
--- a/lldb/source/Interpreter/Args.cpp
+++ b/lldb/source/Interpreter/Args.cpp
@@ -25,6 +25,8 @@
#include "lldb/Target/StackFrame.h"
#include "lldb/Target/Target.h"
+#include "llvm/ADT/StringSwitch.h"
+
using namespace lldb;
using namespace lldb_private;
@@ -838,7 +840,14 @@ Args::StripSpaces (std::string &s, bool leading, bool trailing, bool return_null
bool
Args::StringToBoolean (const char *s, bool fail_value, bool *success_ptr)
{
- llvm::StringRef ref = llvm::StringRef(s).trim();
+ if (!s)
+ return fail_value;
+ return Args::StringToBoolean(llvm::StringRef(s), fail_value, success_ptr);
+}
+
+bool
+Args::StringToBoolean(llvm::StringRef ref, bool fail_value, bool *success_ptr)
+{
if (ref.equals_lower("false") ||
ref.equals_lower("off") ||
ref.equals_lower("no") ||
@@ -848,13 +857,10 @@ Args::StringToBoolean (const char *s, bool fail_value, bool *success_ptr)
*success_ptr = true;
return false;
}
- else
- if (ref.equals_lower("true") ||
- ref.equals_lower("on") ||
- ref.equals_lower("yes") ||
- ref.equals_lower("1"))
+ else if (ref.equals_lower("true") || ref.equals_lower("on") || ref.equals_lower("yes") || ref.equals_lower("1"))
{
- if (success_ptr) *success_ptr = true;
+ if (success_ptr)
+ *success_ptr = true;
return true;
}
if (success_ptr) *success_ptr = false;
@@ -1084,54 +1090,51 @@ Args::StringToFormat
lldb::Encoding
Args::StringToEncoding (const char *s, lldb::Encoding fail_value)
{
- if (s && s[0])
- {
- if (strcmp(s, "uint") == 0)
- return eEncodingUint;
- else if (strcmp(s, "sint") == 0)
- return eEncodingSint;
- else if (strcmp(s, "ieee754") == 0)
- return eEncodingIEEE754;
- else if (strcmp(s, "vector") == 0)
- return eEncodingVector;
- }
- return fail_value;
+ if (!s)
+ return fail_value;
+ return StringToEncoding(llvm::StringRef(s), fail_value);
+}
+
+lldb::Encoding
+Args::StringToEncoding(llvm::StringRef s, lldb::Encoding fail_value)
+{
+ return llvm::StringSwitch<lldb::Encoding>(s)
+ .Case("uint", eEncodingUint)
+ .Case("sint", eEncodingSint)
+ .Case("ieee754", eEncodingIEEE754)
+ .Case("vector", eEncodingVector)
+ .Default(fail_value);
}
uint32_t
Args::StringToGenericRegister (const char *s)
{
- if (s && s[0])
- {
- if (strcmp(s, "pc") == 0)
- return LLDB_REGNUM_GENERIC_PC;
- else if (strcmp(s, "sp") == 0)
- return LLDB_REGNUM_GENERIC_SP;
- else if (strcmp(s, "fp") == 0)
- return LLDB_REGNUM_GENERIC_FP;
- else if (strcmp(s, "ra") == 0 || strcmp(s, "lr") == 0)
- return LLDB_REGNUM_GENERIC_RA;
- else if (strcmp(s, "flags") == 0)
- return LLDB_REGNUM_GENERIC_FLAGS;
- else if (strncmp(s, "arg", 3) == 0)
- {
- if (s[3] && s[4] == '\0')
- {
- switch (s[3])
- {
- case '1': return LLDB_REGNUM_GENERIC_ARG1;
- case '2': return LLDB_REGNUM_GENERIC_ARG2;
- case '3': return LLDB_REGNUM_GENERIC_ARG3;
- case '4': return LLDB_REGNUM_GENERIC_ARG4;
- case '5': return LLDB_REGNUM_GENERIC_ARG5;
- case '6': return LLDB_REGNUM_GENERIC_ARG6;
- case '7': return LLDB_REGNUM_GENERIC_ARG7;
- case '8': return LLDB_REGNUM_GENERIC_ARG8;
- }
- }
- }
- }
- return LLDB_INVALID_REGNUM;
+ if (!s)
+ return LLDB_INVALID_REGNUM;
+ return StringToGenericRegister(llvm::StringRef(s));
+}
+
+uint32_t
+Args::StringToGenericRegister(llvm::StringRef s)
+{
+ if (s.empty())
+ return LLDB_INVALID_REGNUM;
+ uint32_t result = llvm::StringSwitch<uint32_t>(s)
+ .Case("pc", LLDB_REGNUM_GENERIC_PC)
+ .Case("sp", LLDB_REGNUM_GENERIC_SP)
+ .Case("fp", LLDB_REGNUM_GENERIC_FP)
+ .Cases("ra", "lr", LLDB_REGNUM_GENERIC_RA)
+ .Case("flags", LLDB_REGNUM_GENERIC_FLAGS)
+ .Case("arg1\0", LLDB_REGNUM_GENERIC_ARG1)
+ .Case("arg2\0", LLDB_REGNUM_GENERIC_ARG2)
+ .Case("arg3\0", LLDB_REGNUM_GENERIC_ARG3)
+ .Case("arg4\0", LLDB_REGNUM_GENERIC_ARG4)
+ .Case("arg5\0", LLDB_REGNUM_GENERIC_ARG5)
+ .Case("arg6\0", LLDB_REGNUM_GENERIC_ARG6)
+ .Case("arg7\0", LLDB_REGNUM_GENERIC_ARG7)
+ .Case("arg8\0", LLDB_REGNUM_GENERIC_ARG8)
+ .Default(LLDB_INVALID_REGNUM);
+ return result;
}
OpenPOWER on IntegriCloud