]> granicus.if.org Git - clang/commitdiff
Better Visual Studio visualization of TemplateArgument and TemplateArgumentList
authorMike Spertus <mike@spertus.com>
Mon, 6 Jun 2016 17:08:32 +0000 (17:08 +0000)
committerMike Spertus <mike@spertus.com>
Mon, 6 Jun 2016 17:08:32 +0000 (17:08 +0000)
For pack TemplateArguments, visualize all of the items in the pack
Visualize a TemplateArgumentList as a template argument list. E.g., <int, double>

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

utils/ClangVisualizers/clang.natvis

index 2b0a502207bd943b167e23d877706f1dbc36f76d..b67a718c4a05859c95e38660a764ca40cf66ca75 100644 (file)
@@ -233,8 +233,22 @@ For later versions of Visual Studio, no setup is required-->
     </Expand>\r
   </Type>\r
   <Type Name="clang::TemplateArgument">\r
-    <DisplayString IncludeView="cpp">{*(clang::QualType *)&amp;TypeOrValue.V,view(cpp)}</DisplayString>\r
-    <DisplayString Condition="Integer.Kind == clang::TemplateArgument::ArgKind::Type">{(clang::TemplateArgument::ArgKind)TypeOrValue.Kind,en} template parameter: {*(clang::QualType *)&amp;TypeOrValue.V}</DisplayString>\r
+    <DisplayString IncludeView="cpp" Condition="Integer.Kind == clang::TemplateArgument::ArgKind::Type">{*(clang::QualType *)&amp;TypeOrValue.V,view(cpp)}</DisplayString>\r
+    <DisplayString Condition="Integer.Kind == clang::TemplateArgument::ArgKind::Type">{(clang::TemplateArgument::ArgKind)TypeOrValue.Kind,en} template argument: {*(clang::QualType *)&amp;TypeOrValue.V}</DisplayString>\r
+    <DisplayString IncludeView="arg0" Condition="Args.NumArgs==0"></DisplayString>\r
+    <DisplayString IncludeView="arg0">{Args.Args[0]}{*this,view(arg1)}</DisplayString>\r
+    <DisplayString IncludeView="arg1" Condition="Args.NumArgs==1"></DisplayString>\r
+    <DisplayString IncludeView="arg1">, {Args.Args[1]}{*this,view(arg2)}</DisplayString>\r
+    <DisplayString IncludeView="arg2" Condition="Args.NumArgs==2"></DisplayString>\r
+    <DisplayString IncludeView="arg2">, {Args.Args[2]}, ...</DisplayString>\r
+    <DisplayString IncludeView="arg0cpp" Condition="Args.NumArgs==0"></DisplayString>\r
+    <DisplayString IncludeView="arg0cpp">{Args.Args[0],view(cpp)}{*this,view(arg1cpp)}</DisplayString>\r
+    <DisplayString IncludeView="arg1cpp" Condition="Args.NumArgs==1"></DisplayString>\r
+    <DisplayString IncludeView="arg1cpp">, {Args.Args[1],view(cpp)}{*this,view(arg2cpp)}</DisplayString>\r
+    <DisplayString IncludeView="arg2cpp" Condition="Args.NumArgs==2"></DisplayString>\r
+    <DisplayString IncludeView="arg2cpp">, {Args.Args[2],view(cpp)}, ...</DisplayString>\r
+    <DisplayString IncludeView="cpp" Condition="Integer.Kind == clang::TemplateArgument::ArgKind::Pack">{*this,view(arg0cpp)}</DisplayString>\r
+    <DisplayString Condition="Integer.Kind == clang::TemplateArgument::ArgKind::Pack">{*this,view(arg0)}</DisplayString>\r
     <DisplayString>{(clang::TemplateArgument::ArgKind)TypeOrValue.Kind,en}</DisplayString>\r
     <Expand>\r
       <Item Name="QualType" Condition="Integer.Kind == clang::TemplateArgument::ArgKind::Type">*(clang::QualType *)&amp;TypeOrValue.V</Item>\r
@@ -245,6 +259,22 @@ For later versions of Visual Studio, no setup is required-->
       <!-- TODO: Other kinds-->\r
     </Expand>\r
   </Type>\r
+  <Type Name="clang::TemplateArgumentList">\r
+    <DisplayString IncludeView="arg0" Condition="NumArguments==0"></DisplayString>\r
+    <DisplayString IncludeView="arg0">{Arguments[0],view(cpp)}{*this,view(arg1)}</DisplayString>\r
+    <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[1],view(cpp)}, ...</DisplayString>\r
+    <DisplayString>&lt;{*this,view(arg0)}&gt;</DisplayString>\r
+    <Expand>\r
+      <Item Name="NumArguments">NumArguments</Item>\r
+      <ArrayItems>\r
+        <Size>NumArguments</Size>\r
+        <ValuePointer>Arguments</ValuePointer>\r
+      </ArrayItems>\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