]> granicus.if.org Git - clang/commitdiff
Improved Visual Studio visualizations for template argument lists
authorMike Spertus <mike@spertus.com>
Mon, 6 Jun 2016 21:41:20 +0000 (21:41 +0000)
committerMike Spertus <mike@spertus.com>
Mon, 6 Jun 2016 21:41:20 +0000 (21:41 +0000)
Improved the visualizer for TemplateArgumentList to show type arguments in the DisplayString.
E.g., <double, long>. Added a visualizer for MultiLevelTemplateArgumentList.
I decided to display them by how they would appear in a template with the
(non-existent) template-id's omitted, so the DisplayString naturally presents
as something like <double, long>::<char *>.

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

utils/ClangVisualizers/clang.natvis

index 4d1338424cee4bbe8690c1438956d0fb4061d0e6..10445094d81759ce47c1df36ad2aef606ec77425 100644 (file)
@@ -265,7 +265,7 @@ For later versions of Visual Studio, no setup is required-->
     <DisplayString IncludeView="arg1" Condition="NumArguments==1"></DisplayString>\r
     <DisplayString IncludeView="arg1">, {Arguments[1],view(cpp)}{*this,view(arg2)}</DisplayString>\r
     <DisplayString IncludeView="arg2" Condition="NumArguments==2"></DisplayString>\r
-    <DisplayString IncludeView="arg2">, {Arguments[2],view(cpp)}, ...</DisplayString>\r
+    <DisplayString IncludeView="arg2">, {Arguments[1],view(cpp)}, ...</DisplayString>\r
     <DisplayString>&lt;{*this,view(arg0)}&gt;</DisplayString>\r
     <Expand>\r
       <Item Name="NumArguments">NumArguments</Item>\r
@@ -275,6 +275,27 @@ For later versions of Visual Studio, no setup is required-->
       </ArrayItems>\r
     </Expand>\r
   </Type>\r
+  <Type Name="llvm::ArrayRef&lt;clang::TemplateArgument&gt;">\r
+    <DisplayString IncludeView="arg0" Condition="Length==0"></DisplayString>\r
+    <DisplayString IncludeView="arg0">{Data[0],view(cpp)}{*this,view(arg1)}</DisplayString>\r
+    <DisplayString IncludeView="arg1" Condition="Length==1"></DisplayString>\r
+    <DisplayString IncludeView="arg1">, {Data[1],view(cpp)}{*this,view(arg2)}</DisplayString>\r
+    <DisplayString IncludeView="arg2" Condition="Length==2"></DisplayString>\r
+    <DisplayString IncludeView="arg2">, {Data[2],view(cpp)}, ...</DisplayString>\r
+    <DisplayString>&lt;{*this,view(arg0)}&gt;</DisplayString>\r
+  </Type>\r
+  <Type Name="clang::MultiLevelTemplateArgumentList">\r
+    <DisplayString IncludeView="level0" Condition="(llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.EndX - (llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.BeginX==0"></DisplayString>\r
+    <DisplayString IncludeView="level0">{((llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.BeginX)[0],view(cpp)}{*this,view(level1)}</DisplayString>\r
+    <DisplayString IncludeView="level1" Condition="(llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.EndX - (llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.BeginX==1"></DisplayString>\r
+    <DisplayString IncludeView="level1">::{((llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.BeginX)[1],view(cpp)}{*this,view(level2)}</DisplayString>\r
+    <DisplayString IncludeView="level2" Condition="(llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.EndX - (llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.BeginX==2"></DisplayString>\r
+    <DisplayString IncludeView="level2">::{((llvm::ArrayRef&lt;clang::TemplateArgument&gt; *)TemplateArgumentLists.BeginX)[2],view(cpp)}, ...</DisplayString>\r
+    <DisplayString>{*this,view(level0)}</DisplayString>\r
+    <Expand>\r
+      <Item Name="TemplateList">TemplateArgumentLists</Item>\r
+    </Expand>\r
+  </Type>\r
   <!-- Builtin types that have C++ keywords are manually displayed as that keyword. Otherwise, just use the enum name -->\r
   <Type Name="clang::BuiltinType">\r
     <DisplayString Condition="BuiltinTypeBits.Kind==clang::BuiltinType::Void">void</DisplayString>\r