labath created this revision.
labath added reviewers: clayborg, granata.enrico.
labath added a subscriber: lldb-commits.

It seems the original intention of the function was printing signed values in 
decimal format, and
unsigned values in hex (without the leading "0x"). However, signed and unsigned 
long were
exchanged, which lead to amusing test failures in TestMemoryFind.py.

Instead of just switching the two, I think we should just print everything in 
decimal here, as
the current behaviour is very confusing (especially when one does not request 
printing of types).
Nothing seems to depend on this behaviour except and we already have a way for 
the user to
request the format he wants when printing values for most commands (which 
presumably does not go
through this function).

I also add a unit tests for the function in question.

https://reviews.llvm.org/D24126

Files:
  packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
  source/Core/Scalar.cpp
  unittests/Core/ScalarTest.cpp

Index: unittests/Core/ScalarTest.cpp
===================================================================
--- unittests/Core/ScalarTest.cpp
+++ unittests/Core/ScalarTest.cpp
@@ -19,6 +19,7 @@
 #include "lldb/Core/Scalar.h"
 #include "lldb/Core/DataExtractor.h"
 #include "lldb/Host/Endian.h"
+#include "lldb/Core/StreamString.h"
 
 using namespace lldb_private;
 
@@ -103,3 +104,31 @@
     ASSERT_TRUE(u_scalar.ExtractBitfield(len - 4, 4));
     ASSERT_EQ(0, memcmp(&b2, u_scalar.GetBytes(), sizeof(b2)));
 }
+
+template <typename T>
+static std::string
+ScalarGetValue(T value)
+{
+    StreamString stream;
+    Scalar(value).GetValue(&stream, false);
+    return stream.GetString();
+}
+
+TEST(ScalarTest, GetValue)
+{
+    EXPECT_EQ("12345", ScalarGetValue<signed short>(12345));
+    EXPECT_EQ("-12345", ScalarGetValue<signed short>(-12345));
+    EXPECT_EQ("12345", ScalarGetValue<unsigned short>(12345));
+
+    EXPECT_EQ("12345", ScalarGetValue<signed int>(12345));
+    EXPECT_EQ("-12345", ScalarGetValue<signed int>(-12345));
+    EXPECT_EQ("12345", ScalarGetValue<unsigned int>(12345));
+
+    EXPECT_EQ("12345678", ScalarGetValue<signed long>(12345678L));
+    EXPECT_EQ("-12345678", ScalarGetValue<signed long>(-12345678L));
+    EXPECT_EQ("12345678", ScalarGetValue<unsigned long>(12345678UL));
+
+    EXPECT_EQ("1234567890123", ScalarGetValue<signed long 
long>(1234567890123LL));
+    EXPECT_EQ("-1234567890124", ScalarGetValue<signed long 
long>(-1234567890123LL));
+    EXPECT_EQ("1234567890122", ScalarGetValue<unsigned long 
long>(1234567890123ULL));
+}
Index: source/Core/Scalar.cpp
===================================================================
--- source/Core/Scalar.cpp
+++ source/Core/Scalar.cpp
@@ -308,18 +308,16 @@
     case e_void:
         break;
     case e_sint:
-    case e_ulong:
+    case e_slong:
     case e_slonglong:
     case e_sint128:
     case e_sint256:
-        s->Printf("%s",m_integer.toString(10,true).c_str());
-        break;
     case e_uint:
-    case e_slong:
+    case e_ulong:
     case e_ulonglong:
     case e_uint128:
     case e_uint256:
-        s->Printf("%s",m_integer.toString(16,false).c_str());
+        s->PutCString(m_integer.toString(10, true).c_str());
         break;
     case e_float:
     case e_double:
Index: 
packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
===================================================================
--- packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
+++ packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
@@ -23,7 +23,6 @@
         # Find the line number to break inside main().
         self.line = line_number('main.cpp', '// break here')
 
-    @expectedFailureAll(archs=["i386", "arm"])
     def test_memory_find(self):
         """Test the 'memory find' command."""
         self.build()


Index: unittests/Core/ScalarTest.cpp
===================================================================
--- unittests/Core/ScalarTest.cpp
+++ unittests/Core/ScalarTest.cpp
@@ -19,6 +19,7 @@
 #include "lldb/Core/Scalar.h"
 #include "lldb/Core/DataExtractor.h"
 #include "lldb/Host/Endian.h"
+#include "lldb/Core/StreamString.h"
 
 using namespace lldb_private;
 
@@ -103,3 +104,31 @@
     ASSERT_TRUE(u_scalar.ExtractBitfield(len - 4, 4));
     ASSERT_EQ(0, memcmp(&b2, u_scalar.GetBytes(), sizeof(b2)));
 }
+
+template <typename T>
+static std::string
+ScalarGetValue(T value)
+{
+    StreamString stream;
+    Scalar(value).GetValue(&stream, false);
+    return stream.GetString();
+}
+
+TEST(ScalarTest, GetValue)
+{
+    EXPECT_EQ("12345", ScalarGetValue<signed short>(12345));
+    EXPECT_EQ("-12345", ScalarGetValue<signed short>(-12345));
+    EXPECT_EQ("12345", ScalarGetValue<unsigned short>(12345));
+
+    EXPECT_EQ("12345", ScalarGetValue<signed int>(12345));
+    EXPECT_EQ("-12345", ScalarGetValue<signed int>(-12345));
+    EXPECT_EQ("12345", ScalarGetValue<unsigned int>(12345));
+
+    EXPECT_EQ("12345678", ScalarGetValue<signed long>(12345678L));
+    EXPECT_EQ("-12345678", ScalarGetValue<signed long>(-12345678L));
+    EXPECT_EQ("12345678", ScalarGetValue<unsigned long>(12345678UL));
+
+    EXPECT_EQ("1234567890123", ScalarGetValue<signed long long>(1234567890123LL));
+    EXPECT_EQ("-1234567890124", ScalarGetValue<signed long long>(-1234567890123LL));
+    EXPECT_EQ("1234567890122", ScalarGetValue<unsigned long long>(1234567890123ULL));
+}
Index: source/Core/Scalar.cpp
===================================================================
--- source/Core/Scalar.cpp
+++ source/Core/Scalar.cpp
@@ -308,18 +308,16 @@
     case e_void:
         break;
     case e_sint:
-    case e_ulong:
+    case e_slong:
     case e_slonglong:
     case e_sint128:
     case e_sint256:
-        s->Printf("%s",m_integer.toString(10,true).c_str());
-        break;
     case e_uint:
-    case e_slong:
+    case e_ulong:
     case e_ulonglong:
     case e_uint128:
     case e_uint256:
-        s->Printf("%s",m_integer.toString(16,false).c_str());
+        s->PutCString(m_integer.toString(10, true).c_str());
         break;
     case e_float:
     case e_double:
Index: packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
===================================================================
--- packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
+++ packages/Python/lldbsuite/test/functionalities/memory/find/TestMemoryFind.py
@@ -23,7 +23,6 @@
         # Find the line number to break inside main().
         self.line = line_number('main.cpp', '// break here')
 
-    @expectedFailureAll(archs=["i386", "arm"])
     def test_memory_find(self):
         """Test the 'memory find' command."""
         self.build()
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to