]> granicus.if.org Git - clang/commitdiff
Improve MSVC type visualizations
authorMike Spertus <mike@spertus.com>
Sat, 5 Jan 2019 17:01:34 +0000 (17:01 +0000)
committerMike Spertus <mike@spertus.com>
Sat, 5 Jan 2019 17:01:34 +0000 (17:01 +0000)
Display TypeBits in a single line.
Fix bit rot in template visualizations
Rudimentary support for deduced types

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

utils/ClangVisualizers/clang.natvis

index 24c4715cca64bb43edf8df301138cebef1581b15..a581a0d068f8a0a724b2632ce9d0b52414158c0b 100644 (file)
@@ -34,16 +34,37 @@ For later versions of Visual Studio, no setup is required-->
     <DisplayString Condition="TypeBits.TC==clang::Type::TypeClass::Record" IncludeView="cpp">{*(clang::RecordType *)this,view(cpp)}</DisplayString>\r
     <DisplayString Condition="TypeBits.TC==clang::Type::TypeClass::FunctionProto" IncludeView="poly">{*(clang::FunctionProtoType *)this}</DisplayString>\r
     <DisplayString Condition="TypeBits.TC==clang::Type::TypeClass::TemplateSpecialization" IncludeView="poly">{*(clang::TemplateSpecializationType *)this}</DisplayString>\r
+    <DisplayString Condition="TypeBits.TC==clang::Type::TypeClass::DeducedTemplateSpecialization" IncludeView="poly">{*(clang::DeducedTemplateSpecializationType *)this}</DisplayString>\r
     <DisplayString Condition="TypeBits.TC==clang::Type::TypeClass::InjectedClassName" IncludeView="poly">{*(clang::InjectedClassNameType *)this}</DisplayString>\r
     <DisplayString Condition="TypeBits.TC==clang::Type::TypeClass::PackExpansion" IncludeView="poly">{*(clang::PackExpansionType *)this}</DisplayString>\r
     <DisplayString Condition="TypeBits.TC==clang::LocInfoType::LocInfo" IncludeView="poly">{*(clang::LocInfoType *)this}</DisplayString>\r
     <DisplayString IncludeView="cpp">{*this,view(poly)}</DisplayString>\r
     <DisplayString IncludeView="poly">No visualizer yet for {(clang::Type::TypeClass)TypeBits.TC,en}Type</DisplayString> <!-- Not yet implemented Type subclass -->\r
+    <DisplayString IncludeView="Dependent" Condition="TypeBits.Dependent">Dependent</DisplayString>\r
+    <DisplayString IncludeView="Dependent"></DisplayString>\r
+    <DisplayString IncludeView="InstantiationDependent" Condition="TypeBits.InstantiationDependent">InstantiationDependent</DisplayString>\r
+    <DisplayString IncludeView="InstantiationDependent"></DisplayString>\r
+    <DisplayString IncludeView="VariablyModified" Condition="TypeBits.VariablyModified">VariablyModified</DisplayString>\r
+    <DisplayString IncludeView="VariablyModified"></DisplayString>\r
+    <DisplayString IncludeView="ContainsUnexpandedParameterPack" Condition="TypeBits.ContainsUnexpandedParameterPack">ContainsUnexpandedParameterPack</DisplayString>\r
+    <DisplayString IncludeView="ContainsUnexpandedParameterPack"></DisplayString>\r
+    <DisplayString IncludeView="Cache" Condition="TypeBits.CacheValid &amp;&amp; TypeBits.CachedLocalOrUnnamed">CachedLinkage: {(clang::Linkage)TypeBits.CachedLinkage,en} CachedLocalOrUnnamed</DisplayString>\r
+    <DisplayString IncludeView="Cache" Condition="TypeBits.CacheValid &amp;&amp; !TypeBits.CachedLocalOrUnnamed">CachedLinkage: {(clang::Linkage)TypeBits.CachedLinkage,en}</DisplayString>\r
+    <DisplayString IncludeView="Cache"></DisplayString>\r
+    <DisplayString IncludeView="FromAST" Condition="TypeBits.FromAST">FromAST</DisplayString>\r
+    <DisplayString IncludeView="FromAST"></DisplayString>\r
+    <DisplayString IncludeView="flags" Condition="!TypeBits.Dependent &amp;&amp; !TypeBits.InstantiationDependent &amp;&amp; !TypeBits.VariablyModified  &amp;&amp; !TypeBits.ContainsUnexpandedParameterPack &amp;&amp; !TypeBits.CacheValid &amp;&amp; !TypeBits.FromAST">\r
+      No TypeBits set beyond TypeClass\r
+    </DisplayString>\r
+    <DisplayString IncludeView="flags">\r
+    {*this, view(Dependent)}{*this, view(InstantiationDependent)}{*this, view(VariablyModified)}\r
+    {*this, view(ContainsUnexpandedParameterPack)}{*this, view(Cache)}{*this, view(FromAST)}</DisplayString>\r
     <DisplayString>{*this,view(cmn)}  {{{*this,view(poly)}}}</DisplayString>\r
     <Expand>\r
       <Item Name="TypeClass" IncludeView="cmn">(clang::Type::TypeClass)TypeBits.TC</Item>\r
-      <Item Name="Flags" IncludeView="cmn">TypeBits</Item>\r
+      <Item Name="Flags" IncludeView="cmn">*this,view(flags)</Item>\r
       <Item Name="Canonical" IncludeView="cmn">CanonicalType</Item>\r
+      <Item Name="isCanonicalUnqualified" IncludeView="cmn">CanonicalType.Value.Value == this</Item>\r
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::Builtin">*(clang::BuiltinType *)this</ExpandedItem>\r
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::Pointer">*(clang::PointerType *)this</ExpandedItem>\r
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::LValueReference">*(clang::LValueReferenceType *)this</ExpandedItem>\r
@@ -54,6 +75,7 @@ For later versions of Visual Studio, no setup is required-->
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::Record">(clang::RecordType *)this</ExpandedItem>\r
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::FunctionProto">(clang::FunctionProtoType *)this</ExpandedItem>\r
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::TemplateSpecialization">(clang::TemplateSpecializationType *)this</ExpandedItem>\r
+      <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::DeducedTemplateSpecialization">(clang::DeducedTemplateSpecializationType *)this</ExpandedItem>\r
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::InjectedClassName">(clang::InjectedClassNameType *)this</ExpandedItem>\r
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::Type::TypeClass::PackExpansion">(clang::PackExpansionType *)this</ExpandedItem>\r
       <ExpandedItem ExcludeView="cmn" Condition="TypeBits.TC==clang::LocInfoType::LocInfo">(clang::LocInfoType *)this</ExpandedItem>\r
@@ -125,7 +147,13 @@ For later versions of Visual Studio, no setup is required-->
     <DisplayString>{*this,view(TorC)} {*this,view(MaybeEllipses)}{Name,view(cpp)}</DisplayString> \r
   </Type>\r
   <Type Name="clang::TemplateDecl">\r
-    <DisplayString>template{*TemplateParams} {*TemplatedDecl};</DisplayString>\r
+    <DisplayString>template{TemplateParams,view(deref)} {*TemplatedDecl};</DisplayString>\r
+  </Type>\r
+  <Type Name="clang::TemplateName">\r
+    <DisplayString>{Storage,view(deref)}</DisplayString>\r
+    <Expand>\r
+      <ExpandedItem>Storage</ExpandedItem>\r
+    </Expand>\r
   </Type>\r
   <Type Name="clang::NamedDecl" >\r
     <DisplayString IncludeView="cpp">{Name,view(cpp)}</DisplayString>\r
@@ -136,11 +164,11 @@ For later versions of Visual Studio, no setup is required-->
     <DisplayString IncludeView="implicit"></DisplayString>\r
     <DisplayString IncludeView="modifiers">{*this,view(implicit)}</DisplayString>\r
     <DisplayString IncludeView="cpp">{*this,view(modifiers)}{Name,view(cpp)}</DisplayString>\r
-    <DisplayString Condition="TagDeclKind==clang::TagTypeKind::TTK_Struct">{*this,view(modifiers)}struct {Name,view(cpp)}</DisplayString>\r
-    <DisplayString Condition="TagDeclKind==clang::TagTypeKind::TTK_Interface">{*this,view(modifiers)}interface {Name,view(cpp)}</DisplayString>\r
-    <DisplayString Condition="TagDeclKind==clang::TagTypeKind::TTK_Union">{*this,view(modifiers)}union {Name,view(cpp)}</DisplayString>\r
-    <DisplayString Condition="TagDeclKind==clang::TagTypeKind::TTK_Class">{*this,view(modifiers)}class {Name,view(cpp)}</DisplayString>\r
-    <DisplayString Condition="TagDeclKind==clang::TagTypeKind::TTK_Enum">{*this,view(modifiers)}enum {Name,view(cpp)}</DisplayString>\r
+    <DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Struct">{*this,view(modifiers)}struct {Name,view(cpp)}</DisplayString>\r
+    <DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Interface">{*this,view(modifiers)}interface {Name,view(cpp)}</DisplayString>\r
+    <DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Union">{*this,view(modifiers)}union {Name,view(cpp)}</DisplayString>\r
+    <DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Class">{*this,view(modifiers)}class {Name,view(cpp)}</DisplayString>\r
+    <DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Enum">{*this,view(modifiers)}enum {Name,view(cpp)}</DisplayString>\r
     <Expand>\r
       <ExpandedItem>(clang::DeclContext *)this</ExpandedItem>\r
     </Expand>\r
@@ -381,6 +409,18 @@ For later versions of Visual Studio, no setup is required-->
       </ArrayItems>\r
     </Expand>\r
   </Type>\r
+  <Type Name="clang::DeducedType">\r
+    <Expand>\r
+      <Item Name="isDeduced">(CanonicalType.Value.Value != this) || TypeBits.Dependent</Item>\r
+      <ExpandedItem>*(clang::Type *)this,view(cmn)</ExpandedItem>\r
+    </Expand>\r
+  </Type>\r
+  <Type Name="clang::DeducedTemplateSpecializationType">\r
+    <DisplayString>{Template}</DisplayString>\r
+    <Expand>\r
+      <ExpandedItem>*(clang::DeducedType *)this</ExpandedItem>\r
+    </Expand>\r
+  </Type>\r
   <Type Name="clang::IdentifierInfo">\r
     <DisplayString Condition="Entry != 0">{((llvm::StringMapEntry&lt;clang::IdentifierInfo *&gt;*)Entry)+1,sb}</DisplayString>\r
     <Expand>\r