REPOSITORY
  rL LLVM

http://reviews.llvm.org/D7592

Files:
  lldb/trunk/source/Commands/CommandObjectSettings.cpp
  lldb/trunk/source/Interpreter/Args.cpp
  lldb/trunk/source/Interpreter/OptionValueArch.cpp
  lldb/trunk/source/Interpreter/OptionValueEnumeration.cpp
  lldb/trunk/source/Interpreter/OptionValueSInt64.cpp
  lldb/trunk/source/Interpreter/OptionValueString.cpp
  lldb/trunk/source/Interpreter/OptionValueUInt64.cpp
  lldb/trunk/test/settings/TestSettings.py

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: lldb/trunk/test/settings/TestSettings.py
===================================================================
--- lldb/trunk/test/settings/TestSettings.py
+++ lldb/trunk/test/settings/TestSettings.py
@@ -396,6 +396,13 @@
                         '[0]: "3"', 
                         '[1]: "4"',
                         '[2]: "5"' ])
+        self.runCmd ("settings set target.run-args 1 2 3")  # Set to known value
+        self.runCmd ("settings set target.run-args 3 \  \ ") # Set to new value with trailing whitespaces
+        self.expect ("settings show target.run-args", SETTING_MSG("target.run-args"),
+            substrs = [ 'target.run-args (arguments) =',
+                        '[0]: "3"',
+                        '[1]: " "',
+                        '[2]: " "' ])
         self.runCmd("settings clear target.run-args", check=False)        
         # dictionaries
         self.runCmd ("settings clear target.env-vars")  # Set to known value
@@ -405,6 +412,20 @@
                         'A=B', 
                         'C=D'])
         self.runCmd("settings clear target.env-vars", check=False)        
+        # regex
+        self.runCmd ("settings clear target.process.thread.step-avoid-regexp")  # Set to known value
+        self.runCmd ("settings set target.process.thread.step-avoid-regexp foo\\ ") # Set to new value with trailing whitespaces
+        self.expect ("settings show target.process.thread.step-avoid-regexp",
+                SETTING_MSG("target.process.thread.step-avoid-regexp"),
+                substrs = [ 'target.process.thread.step-avoid-regexp (regex) = foo\\ '])
+        self.runCmd("settings clear target.process.thread.step-avoid-regexp", check=False)
+        # format-string
+        self.runCmd ("settings clear disassembly-format")  # Set to known value
+        self.runCmd ("settings set disassembly-format foo ") # Set to new value with trailing whitespaces
+        self.expect ("settings show disassembly-format",
+                SETTING_MSG("disassembly-format"),
+                substrs = [ 'disassembly-format (format-string) = "foo "'])
+        self.runCmd("settings clear disassembly-format", check=False)
         
     def test_all_settings_exist (self):
         self.expect ("settings show",
Index: lldb/trunk/source/Commands/CommandObjectSettings.cpp
===================================================================
--- lldb/trunk/source/Commands/CommandObjectSettings.cpp
+++ lldb/trunk/source/Commands/CommandObjectSettings.cpp
@@ -243,7 +243,7 @@
         // Split the raw command into var_name and value pair.
         llvm::StringRef raw_str(command);
         std::string var_value_string = raw_str.split(var_name).second.str();
-        const char *var_value_cstr = Args::StripSpaces(var_value_string, true, true, false);
+        const char *var_value_cstr = Args::StripSpaces(var_value_string, true, false, false);
 
         Error error;
         if (m_options.m_global)
Index: lldb/trunk/source/Interpreter/OptionValueArch.cpp
===================================================================
--- lldb/trunk/source/Interpreter/OptionValueArch.cpp
+++ lldb/trunk/source/Interpreter/OptionValueArch.cpp
@@ -55,8 +55,10 @@
         
     case eVarSetOperationReplace:
     case eVarSetOperationAssign:
-        if (value_cstr && value_cstr[0])
+        if (value_cstr)
         {
+            std::string value = llvm::StringRef(value_cstr).trim().str();
+            value_cstr = value.c_str();
             if (m_current_value.SetTriple (value_cstr))
             {
                 m_value_was_set = true;
Index: lldb/trunk/source/Interpreter/OptionValueSInt64.cpp
===================================================================
--- lldb/trunk/source/Interpreter/OptionValueSInt64.cpp
+++ lldb/trunk/source/Interpreter/OptionValueSInt64.cpp
@@ -51,7 +51,8 @@
         case eVarSetOperationAssign:
             {
                 bool success = false;
-                int64_t value = StringConvert::ToSInt64 (value_cstr, 0, 0, &success);
+                std::string value_str = llvm::StringRef(value_cstr).trim().str();
+                int64_t value = StringConvert::ToSInt64 (value_str.c_str(), 0, 0, &success);
                 if (success)
                 {
                     if (value >= m_min_value && value <= m_max_value)
Index: lldb/trunk/source/Interpreter/OptionValueUInt64.cpp
===================================================================
--- lldb/trunk/source/Interpreter/OptionValueUInt64.cpp
+++ lldb/trunk/source/Interpreter/OptionValueUInt64.cpp
@@ -58,7 +58,8 @@
         case eVarSetOperationAssign:
         {
             bool success = false;
-            uint64_t value = StringConvert::ToUInt64 (value_cstr, 0, 0, &success);
+            std::string value_str = llvm::StringRef(value_cstr).trim().str();
+            uint64_t value = StringConvert::ToUInt64 (value_str.c_str(), 0, 0, &success);
             if (success)
             {
                 m_value_was_set = true;
Index: lldb/trunk/source/Interpreter/Args.cpp
===================================================================
--- lldb/trunk/source/Interpreter/Args.cpp
+++ lldb/trunk/source/Interpreter/Args.cpp
@@ -870,26 +870,24 @@
 bool
 Args::StringToBoolean (const char *s, bool fail_value, bool *success_ptr)
 {
-    if (s && s[0])
+    llvm::StringRef ref = llvm::StringRef(s).trim();
+    if (ref.equals_lower("false") ||
+        ref.equals_lower("off") ||
+        ref.equals_lower("no") ||
+        ref.equals_lower("0"))
     {
-        if (::strcasecmp (s, "false") == 0 ||
-            ::strcasecmp (s, "off") == 0 ||
-            ::strcasecmp (s, "no") == 0 ||
-                ::strcmp (s, "0") == 0)
-        {
-            if (success_ptr)
-                *success_ptr = true;
-            return false;
-        }
-        else
-        if (::strcasecmp (s, "true") == 0 ||
-            ::strcasecmp (s, "on") == 0 ||
-            ::strcasecmp (s, "yes") == 0 ||
-                ::strcmp (s, "1") == 0)
-        {
-            if (success_ptr) *success_ptr = true;
-            return true;
-        }
+        if (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"))
+    {
+        if (success_ptr) *success_ptr = true;
+        return true;
     }
     if (success_ptr) *success_ptr = false;
     return fail_value;
Index: lldb/trunk/source/Interpreter/OptionValueString.cpp
===================================================================
--- lldb/trunk/source/Interpreter/OptionValueString.cpp
+++ lldb/trunk/source/Interpreter/OptionValueString.cpp
@@ -57,24 +57,25 @@
     Error error;
 
     std::string value_str_no_quotes;
-    if (value_cstr)
+    llvm::StringRef trimmed = value_cstr ? llvm::StringRef(value_cstr).trim() : llvm::StringRef();
+    if (trimmed.size() > 0)
     {
-        switch (value_cstr[0])
+        switch (trimmed.front())
         {
         case '"':
         case '\'':
             {
-                size_t len = strlen(value_cstr);
-                if (len <= 1 || value_cstr[len-1] != value_cstr[0])
+                if (trimmed.size() <= 1 || trimmed.back() != trimmed.front())
                 {
                     error.SetErrorString("mismatched quotes");
                     return error;
                 }
-                value_str_no_quotes.assign (value_cstr + 1, len - 2);
-                value_cstr = value_str_no_quotes.c_str();
+                trimmed = trimmed.drop_front().drop_back().str();
             }
             break;
         }
+        value_str_no_quotes = trimmed.str();
+        value_cstr = value_str_no_quotes.c_str();
     }
 
     switch (op)
Index: lldb/trunk/source/Interpreter/OptionValueEnumeration.cpp
===================================================================
--- lldb/trunk/source/Interpreter/OptionValueEnumeration.cpp
+++ lldb/trunk/source/Interpreter/OptionValueEnumeration.cpp
@@ -69,7 +69,7 @@
         case eVarSetOperationAssign:
             if (value && value[0])
             {
-                ConstString const_enumerator_name(value);
+                ConstString const_enumerator_name(llvm::StringRef(value).trim());
                 const EnumerationMapEntry *enumerator_entry = m_enumerations.FindFirstValueForName (const_enumerator_name.GetCString());
                 if (enumerator_entry)
                 {
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to