This revision was automatically updated to reflect the committed changes.
Closed by commit rG4ba5da8e3d38: Improve optional formatter (authored by Walter 
Erquinigo <wall...@fb.com>).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D114450/new/

https://reviews.llvm.org/D114450

Files:
  lldb/examples/synthetic/gnu_libstdcpp.py
  lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
  
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/optional/TestDataFormatterGenericOptional.py


Index: 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/optional/TestDataFormatterGenericOptional.py
===================================================================
--- 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/optional/TestDataFormatterGenericOptional.py
+++ 
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/optional/TestDataFormatterGenericOptional.py
@@ -12,6 +12,15 @@
 
     def do_test_with_run_command(self, stdlib_type):
         """Test that that file and class static variables display correctly."""
+        # This is the function to remove the custom formats in order to have a
+        # clean slate for the next test case.
+        def cleanup():
+            self.runCmd('type format clear', check=False)
+            self.runCmd('type summary clear', check=False)
+            self.runCmd('type filter clear', check=False)
+            self.runCmd('type synth clear', check=False)
+        self.addTearDownHook(cleanup)
+
         self.build(dictionary={stdlib_type: "1"})
         self.runCmd("file " + self.getBuildArtifact("a.out"), 
CURRENT_EXECUTABLE_SET)
 
Index: lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
===================================================================
--- lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
+++ lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
@@ -45,7 +45,7 @@
   // __engaged_ is a bool flag and is true if the optional contains a value.
   // Converting it to unsigned gives us a size of 1 if it contains a value
   // and 0 if not.
-  m_has_value = engaged_sp->GetValueAsUnsigned(0) == 1;
+  m_has_value = engaged_sp->GetValueAsUnsigned(0) != 0;
 
   return false;
 }
Index: lldb/examples/synthetic/gnu_libstdcpp.py
===================================================================
--- lldb/examples/synthetic/gnu_libstdcpp.py
+++ lldb/examples/synthetic/gnu_libstdcpp.py
@@ -1,5 +1,4 @@
 from __future__ import division
-import re
 import lldb.formatters.Logger
 
 # C++ STL formatters for LLDB
@@ -22,14 +21,14 @@
         try:
             self.payload = self.valobj.GetChildMemberWithName('_M_payload')
             self.value = self.payload.GetChildMemberWithName('_M_payload')
-            self.count = 
self.payload.GetChildMemberWithName('_M_engaged').GetValueAsUnsigned(0)
+            self.has_value = 
self.payload.GetChildMemberWithName('_M_engaged').GetValueAsUnsigned(0) != 0
         except:
-            self.count = 0
+            self.has_value = False
         return False
 
 
     def num_children(self):
-        return self.count
+        return 1 if self.has_value else 0
 
     def get_child_index(self, name):
         return 0


Index: lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/optional/TestDataFormatterGenericOptional.py
===================================================================
--- lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/optional/TestDataFormatterGenericOptional.py
+++ lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/optional/TestDataFormatterGenericOptional.py
@@ -12,6 +12,15 @@
 
     def do_test_with_run_command(self, stdlib_type):
         """Test that that file and class static variables display correctly."""
+        # This is the function to remove the custom formats in order to have a
+        # clean slate for the next test case.
+        def cleanup():
+            self.runCmd('type format clear', check=False)
+            self.runCmd('type summary clear', check=False)
+            self.runCmd('type filter clear', check=False)
+            self.runCmd('type synth clear', check=False)
+        self.addTearDownHook(cleanup)
+
         self.build(dictionary={stdlib_type: "1"})
         self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
 
Index: lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
===================================================================
--- lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
+++ lldb/source/Plugins/Language/CPlusPlus/LibCxxOptional.cpp
@@ -45,7 +45,7 @@
   // __engaged_ is a bool flag and is true if the optional contains a value.
   // Converting it to unsigned gives us a size of 1 if it contains a value
   // and 0 if not.
-  m_has_value = engaged_sp->GetValueAsUnsigned(0) == 1;
+  m_has_value = engaged_sp->GetValueAsUnsigned(0) != 0;
 
   return false;
 }
Index: lldb/examples/synthetic/gnu_libstdcpp.py
===================================================================
--- lldb/examples/synthetic/gnu_libstdcpp.py
+++ lldb/examples/synthetic/gnu_libstdcpp.py
@@ -1,5 +1,4 @@
 from __future__ import division
-import re
 import lldb.formatters.Logger
 
 # C++ STL formatters for LLDB
@@ -22,14 +21,14 @@
         try:
             self.payload = self.valobj.GetChildMemberWithName('_M_payload')
             self.value = self.payload.GetChildMemberWithName('_M_payload')
-            self.count = self.payload.GetChildMemberWithName('_M_engaged').GetValueAsUnsigned(0)
+            self.has_value = self.payload.GetChildMemberWithName('_M_engaged').GetValueAsUnsigned(0) != 0
         except:
-            self.count = 0
+            self.has_value = False
         return False
 
 
     def num_children(self):
-        return self.count
+        return 1 if self.has_value else 0
 
     def get_child_index(self, name):
         return 0
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to