mspertus created this revision.
mspertus added reviewers: aaron.ballman, zturner, aemerson.
mspertus added a subscriber: cfe-commits.

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}

I decided to submit this one for review before commit because as `SmallVector` 
is used pretty much everywhere in LLVM and Clang, even though I think this is a 
huge improvement in practice but wanted to give others a chance to pipe in if 
they disagree. If no one pipes in, I plan to go ahead and commit in 48 hours

http://reviews.llvm.org/D21256

Files:
  llvm.natvis

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


Index: llvm.natvis
===================================================================
--- llvm.natvis
+++ llvm.natvis
@@ -8,8 +8,8 @@
 For later versions of Visual Studio, no setup is required.
 -->
 <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010";>
-
-  <Type Name="llvm::SmallVectorImpl&lt;*&gt;">
+  <!-- VS2013 -->
+  <Type Name="llvm::SmallVectorImpl&lt;*&gt;" Priority="MediumLow">
     <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>
     <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">{{ size={($T1*)EndX - ($T1*)BeginX} }}</DisplayString>
     <Expand>
@@ -21,6 +21,29 @@
       </ArrayItems>
     </Expand>
   </Type>
+  <!-- VS2015 and up -->
+  <Type Name="llvm::SmallVectorImpl&lt;*&gt;">
+    <DisplayString IncludeView ="elt0" Condition="(($T1*)EndX - ($T1*)BeginX) == 0"></DisplayString>
+    <DisplayString IncludeView ="elt0">{(($T1*)BeginX)[0]}{*this,view(elt1)}</DisplayString>
+    <DisplayString IncludeView ="elt1" Condition="(($T1*)EndX - ($T1*)BeginX) == 1"></DisplayString>
+    <DisplayString IncludeView ="elt1">, {(($T1*)BeginX)[1]}{*this,view(elt2)}</DisplayString>
+    <DisplayString IncludeView ="elt2" Condition="(($T1*)EndX - ($T1*)BeginX) == 2"></DisplayString>
+    <DisplayString IncludeView ="elt2">, {(($T1*)BeginX)[2]}{*this,view(elt3)}</DisplayString>
+    <DisplayString IncludeView ="elt3" Condition="(($T1*)EndX - ($T1*)BeginX) == 3"></DisplayString>
+    <DisplayString IncludeView ="elt3">, {(($T1*)BeginX)[2]}{*this,view(elt4)}</DisplayString>
+    <DisplayString IncludeView ="elt4" Condition="(($T1*)EndX - ($T1*)BeginX) == 4"></DisplayString>
+    <DisplayString IncludeView ="elt4">, /* {(($T1*)EndX - ($T1*)BeginX) - 4} more*/ </DisplayString>
+    <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>
+    <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">{{{*this,view(elt0)}}}</DisplayString>
+    <Expand>
+      <Item Name="[size]">($T1*)EndX - ($T1*)BeginX</Item>
+      <Item Name="[capacity]">($T1*)CapacityX - ($T1*)BeginX</Item>
+      <ArrayItems>
+        <Size>($T1*)EndX - ($T1*)BeginX</Size>
+        <ValuePointer>($T1*)BeginX</ValuePointer>
+      </ArrayItems>
+    </Expand>
+  </Type>
   <Type Name="llvm::ArrayRef&lt;*&gt;">
     <DisplayString Condition="Length == 0">empty</DisplayString>
     <DisplayString Condition="Length != 0">{{ size={Length} }}</DisplayString>
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to