]> granicus.if.org Git - llvm/commitdiff
Improved Visual Studio 2015 visualization of SmallVectorImpl
authorMike Spertus <mike@spertus.com>
Mon, 13 Jun 2016 01:43:14 +0000 (01:43 +0000)
committerMike Spertus <mike@spertus.com>
Mon, 13 Jun 2016 01:43:14 +0000 (01:43 +0000)
When visualizing small vectors in VS2015, show the first few elements in the DisplayString instead of the size. For example, a SmallVector of DeclAccessPair will visualize like

  {public typename ...Ts, public typename U}

The visualization in VS2013 remains the same because we continue to include the old visualizer with a lower-than-default priority of MediumLow, and the same SmallVector would continue to be visualized as

  {size = 2}

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272525 91177308-0d34-0410-b5e6-96231b3b80d8

utils/LLVMVisualizers/llvm.natvis

index 6d37fa014539d4bd3933aa87d9c51ba1b6de7592..6d8475a1c72e1b63cab4f50713684cf92e3897bf 100644 (file)
@@ -8,8 +8,8 @@ For Visual Studio 2013 only, put this file into
 For later versions of Visual Studio, no setup is required.\r
 -->\r
 <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">\r
-\r
-  <Type Name="llvm::SmallVectorImpl&lt;*&gt;">\r
+  <!-- VS2013 -->\r
+  <Type Name="llvm::SmallVectorImpl&lt;*&gt;" Priority="MediumLow">\r
     <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>\r
     <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">{{ size={($T1*)EndX - ($T1*)BeginX} }}</DisplayString>\r
     <Expand>\r
@@ -21,6 +21,29 @@ For later versions of Visual Studio, no setup is required.
       </ArrayItems>\r
     </Expand>\r
   </Type>\r
+  <!-- VS2015 and up -->\r
+  <Type Name="llvm::SmallVectorImpl&lt;*&gt;">\r
+    <DisplayString IncludeView ="elt0" Condition="(($T1*)EndX - ($T1*)BeginX) == 0"></DisplayString>\r
+    <DisplayString IncludeView ="elt0">{(($T1*)BeginX)[0]}{*this,view(elt1)}</DisplayString>\r
+    <DisplayString IncludeView ="elt1" Condition="(($T1*)EndX - ($T1*)BeginX) == 1"></DisplayString>\r
+    <DisplayString IncludeView ="elt1">, {(($T1*)BeginX)[1]}{*this,view(elt2)}</DisplayString>\r
+    <DisplayString IncludeView ="elt2" Condition="(($T1*)EndX - ($T1*)BeginX) == 2"></DisplayString>\r
+    <DisplayString IncludeView ="elt2">, {(($T1*)BeginX)[2]}{*this,view(elt3)}</DisplayString>\r
+    <DisplayString IncludeView ="elt3" Condition="(($T1*)EndX - ($T1*)BeginX) == 3"></DisplayString>\r
+    <DisplayString IncludeView ="elt3">, {(($T1*)BeginX)[2]}{*this,view(elt4)}</DisplayString>\r
+    <DisplayString IncludeView ="elt4" Condition="(($T1*)EndX - ($T1*)BeginX) == 4"></DisplayString>\r
+    <DisplayString IncludeView ="elt4">, /* {(($T1*)EndX - ($T1*)BeginX) - 4} more*/ </DisplayString>\r
+    <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>\r
+    <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">{{{*this,view(elt0)}}}</DisplayString>\r
+    <Expand>\r
+      <Item Name="[size]">($T1*)EndX - ($T1*)BeginX</Item>\r
+      <Item Name="[capacity]">($T1*)CapacityX - ($T1*)BeginX</Item>\r
+      <ArrayItems>\r
+        <Size>($T1*)EndX - ($T1*)BeginX</Size>\r
+        <ValuePointer>($T1*)BeginX</ValuePointer>\r
+      </ArrayItems>\r
+    </Expand>\r
+  </Type>\r
   <Type Name="llvm::ArrayRef&lt;*&gt;">\r
     <DisplayString Condition="Length == 0">empty</DisplayString>\r
     <DisplayString Condition="Length != 0">{{ size={Length} }}</DisplayString>\r