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<*>"> + <!-- VS2013 --> + <Type Name="llvm::SmallVectorImpl<*>" 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<*>"> + <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<*>"> <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<*>"> + <!-- VS2013 --> + <Type Name="llvm::SmallVectorImpl<*>" 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<*>"> + <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<*>"> <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