Skip to content
Snippets Groups Projects
Commit 38cdf2a5 authored by Aaron Ballman's avatar Aaron Ballman
Browse files

Since Visual Studio 2012 is the minimum version of MSVC we support, the...

Since Visual Studio 2012 is the minimum version of MSVC we support, the old-style visualizers are being removed. Adding a Natvis replacement for the debugging visualizers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@200032 91177308-0d34-0410-b5e6-96231b3b80d8
parent 9c23bab9
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="utf-8"?>
<!--
Visual Studio 2012 Native Debugging Visualizers for LLVM
Put this file into "%USERPROFILE%\Documents\Visual Studio 2012\Visualizers"
or create a symbolic link so it updates automatically.
-->
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="clang::IdentifierInfo">
<DisplayString Condition="Entry != 0">({((llvm::StringMapEntry&lt;clang::IdentifierInfo *&gt;*)Entry)+1,s})</DisplayString>
<Expand>
<Item Condition="Entry != 0" Name="[Identifier]">((llvm::StringMapEntry&lt;clang::IdentifierInfo *&gt;*)Entry)+1,s</Item>
<Item Name="Token Kind">(clang::tok::TokenKind)TokenID</Item>
</Expand>
</Type>
<Type Name="clang::DeclarationName">
<DisplayString Condition="Ptr == 0">Empty</DisplayString>
<DisplayString Condition="(Ptr &amp; PtrMask) == StoredIdentifier">{{Identifier ({(clang::IdentifierInfo *)(Ptr &amp; ~PtrMask)})}}</DisplayString>
<DisplayString Condition="(Ptr &amp; PtrMask) == StoredObjCZeroArgSelector">{{ObjC Zero Arg Selector ({(clang::IdentifierInfo *)(Ptr &amp; ~PtrMask)})}}</DisplayString>
<DisplayString Condition="(Ptr &amp; PtrMask) == StoredObjCOneArgSelector">{{ObjC One Arg Selector ({(clang::IdentifierInfo *)(Ptr &amp; ~PtrMask)})}}</DisplayString>
<DisplayString Condition="(Ptr &amp; PtrMask) == StoredDeclarationNameExtra">{{Extra ({(clang::DeclarationNameExtra::ExtraKind)((clang::DeclarationNameExtra *)(Ptr &amp; ~PtrMask))-&gt;ExtraKindOrNumArgs})}}</DisplayString>
<Expand>
<Item Condition="(Ptr &amp; PtrMask) == StoredIdentifier" Name="[Identifier]">(clang::IdentifierInfo *)(Ptr &amp; ~PtrMask)</Item>
<Item Condition="(Ptr &amp; PtrMask) == StoredObjCZeroArgSelector" Name="[ObjC Zero Arg Selector]">(clang::IdentifierInfo *)(Ptr &amp; ~PtrMask)</Item>
<Item Condition="(Ptr &amp; PtrMask) == StoredObjCOneArgSelector" Name="[ObjC One Arg Selector]">(clang::IdentifierInfo *)(Ptr &amp; ~PtrMask)</Item>
<Item Condition="(Ptr &amp; PtrMask) == StoredDeclarationNameExtra" Name="[Extra]">(clang::DeclarationNameExtra::ExtraKind)((clang::DeclarationNameExtra *)(Ptr &amp; ~PtrMask))-&gt;ExtraKindOrNumArgs</Item>
</Expand>
</Type>
<Type Name="clang::Token">
<DisplayString>{(clang::tok::TokenKind)Kind}</DisplayString>
</Type>
<Type Name="clang::DeclSpec">
<DisplayString>[{(clang::DeclSpec::SCS)StorageClassSpec}], [{(clang::TypeSpecifierType)TypeSpecType}]</DisplayString>
</Type>
<Type Name="clang::PragmaHandler">
<DisplayString>{Name,s}</DisplayString>
</Type>
<Type Name="clang::FileEntry">
<DisplayString>{Name,s}</DisplayString>
</Type>
<Type Name="clang::DirectoryEntry">
<DisplayString>{Name,s}</DisplayString>
</Type>
</AutoVisualizer>
[Visualizer]
llvm::SmallVector<*,*>{
preview (
#if ((($T1*)$e.EndX - ($T1*)$e.BeginX) == 0) ( "empty" )
#else (
#(
"[",
($T1*)$e.EndX - ($T1*)$e.BeginX,
"](",
#array(
expr: (($T1*)$e.BeginX)[$i],
size: ($T1*)$e.EndX - ($T1*)$e.BeginX
),
")"
)
)
)
children (
#(
#([size] : ($T1*)$e.EndX - ($T1*)$e.BeginX),
#([capacity] : ($T1*)$e.CapacityX - ($T1*)$e.BeginX),
#array(
expr: (($T1*)$e.BeginX)[$i],
size: ($T1*)$e.EndX - ($T1*)$e.BeginX
)
)
)
}
llvm::SmallVectorImpl<*>{
preview (
#if ((($T1*)$e.EndX - ($T1*)$e.BeginX) == 0) ( "empty" )
#else (
#(
"[",
($T1*)$e.EndX - ($T1*)$e.BeginX,
"](",
#array(
expr: (($T1*)$e.BeginX)[$i],
size: ($T1*)$e.EndX - ($T1*)$e.BeginX
),
")"
)
)
)
children (
#(
#([size] : ($T1*)$e.EndX - ($T1*)$e.BeginX),
#([capacity] : ($T1*)$e.CapacityX - ($T1*)$e.BeginX),
#array(
expr: (($T1*)$e.BeginX)[$i],
size: ($T1*)$e.EndX - ($T1*)$e.BeginX
)
)
)
}
llvm::SmallString<*>{
preview ([$e.BeginX,s])
stringview ([$e.BeginX,sb])
}
llvm::StringRef{
preview ([$e.Data,s])
stringview ([$e.Data,sb])
children (
#(
#([size] : $e.Length),
#array(expr: $e.Data[$i], size: $e.Length)
)
)
}
clang::Token{
preview((clang::tok::TokenKind)(int)$e.Kind)
}
llvm::PointerIntPair<*,*,*,*>{
preview (
#(
($T1*)($e.Value & $e.PointerBitMask),
" [",
($T3)(($e.Value >> $e.IntShift) & $e.IntMask),
"]"
)
)
children (
#(
#([raw members] : [$e,!]),
#([ptr] : ($T1*)($e.Value & $e.PointerBitMask)),
#([int] : ($T3)($e.Value >> $e.IntShift) & $e.IntMask)
)
)
}
llvm::PointerUnion<*,*>{
preview (
#if ((($e.Val.Value >> $e.Val.IntShift) & $e.Val.IntMask) == 0) ( "PT1" )
#else ( "PT2" )
)
children (
#(
#([raw members] : [$e,!]),
#if ((($e.Val.Value >> $e.Val.IntShift) & $e.Val.IntMask) == 0) (
#([ptr] : ($T1)($e.Val.Value & $e.Val.PointerBitMask))
) #else (
#([ptr] : ($T2)($e.Val.Value & $e.Val.PointerBitMask))
)
)
)
}
llvm::PointerUnion3<*,*,*>{
preview (
#if (($e.Val.Val.Value & 0x2) == 2) ( "PT2" )
#elif (($e.Val.Val.Value & 0x1) == 1) ( "PT3" )
#else ( "PT1" )
)
children (
#(
#if (($e.Val.Val.Value & 0x2) == 2) (
#([ptr] : ($T2)(($e.Val.Val.Value >> 2) << 2))
) #elif (($e.Val.Val.Value & 0x1) == 1) (
#([ptr] : ($T3)(($e.Val.Val.Value >> 2) << 2))
) #else (
#([ptr] : ($T1)(($e.Val.Val.Value >> 2) << 2))
)
)
)
}
llvm::PointerUnion4<*,*,*,*>{
preview (
#if (($e.Val.Val.Value & 0x3) == 3) ( "PT4" )
#elif (($e.Val.Val.Value & 0x2) == 2) ( "PT2" )
#elif (($e.Val.Val.Value & 0x1) == 1) ( "PT3" )
#else ( "PT1" )
)
children (
#(
#if (($e.Val.Val.Value & 0x3) == 3) (
#([ptr] : ($T4)(($e.Val.Val.Value >> 2) << 2))
) #elif (($e.Val.Val.Value & 0x2) == 2) (
#([ptr] : ($T2)(($e.Val.Val.Value >> 2) << 2))
) #elif (($e.Val.Val.Value & 0x1) == 1) (
#([ptr] : ($T3)(($e.Val.Val.Value >> 2) << 2))
) #else (
#([ptr] : ($T1)(($e.Val.Val.Value >> 2) << 2))
)
)
)
}
llvm::IntrusiveRefCntPtr<*>{
preview (
#if ($e.Obj == 0) ( "empty" )
#else (
#(
"[RefCnt=", $e.Obj->ref_cnt,
", ",
"Obj=", $e.Obj,
"]"
)
)
)
children (
#if ($e.Obj == 0) ( #array(expr: 0, size: 0) )
#else (
#(
#(RefCnt : $e.Obj->ref_cnt),
#(Obj : $e.Obj)
)
)
)
}
llvm::OwningPtr<*>{
preview (
#if ($e.Ptr == 0) ( "empty" )
#else ( $e.Ptr )
)
children (
#if ($e.Ptr == 0) ( #array(expr: 0, size: 0) )
#else ( #(Ptr : $e.Ptr) )
)
}
llvm::SmallPtrSet<*,*>{
preview (
#(
#if (($e.CurArray) == ($e.SmallArray)) ( "[Small Mode] " )
#else ( "[Big Mode] " ),
"NumElements=", $e.NumElements,
" CurArraySize=", $e.CurArraySize
)
)
children (
#(
#([raw members] : [$c,!]),
#(NumElements : $e.NumElements),
#(CurArraySize : $e.CurArraySize),
#array(
expr: $e.CurArray[$i],
size: $e.CurArraySize + 1
) : ($T1*)&$e
)
)
}
llvm::DenseMap<*,*,*>{
preview (
#if ($e.NumEntries == 0) ( "empty" )
#else (
#(
"[NumEntries=", $e.NumEntries,
" NumBuckets=", $e.NumBuckets,
"]"
)
)
)
children (
#if ($e.NumEntries == 0) ( #array(expr: 0, size: 0) )
#else (
#(
#([raw members] : [$c,!]),
#(NumEntries : $e.NumEntries),
#(NumBuckets : $e.NumBuckets),
#array(
expr: $e.Buckets[$i],
size: $e.NumBuckets
)
)
)
)
}
llvm::StringMap<*,*>{
preview (
#(
"[NumBuckets=", $e.NumBuckets,
" ItemSize=", $e.ItemSize,
"]"
)
)
children (
#(
#([raw members] : [$c,!]),
#(NumBuckets : $e.NumBuckets),
#(ItemSize : $e.ItemSize),
#array(
expr: $e.TheTable[$i],
size: $e.NumBuckets,
) : (llvm::StringMapEntry<$T1>*)&$e
)
)
}
llvm::StringMapEntry<*>{
preview (
#if ($e.StrLen == 0) ( "empty" )
#else ( #(Entry : $e.second) )
)
children (
#if ($e.StrLen == 0) ( "empty" )
#else ( #(Entry : $e.second) )
)
}
clang::DirectoryEntry|clang::FileEntry|clang::PragmaHandler{
preview ( [$e.Name,s] )
children (
#(
#([raw members] : [$c,!]),
#(Name : [$e.Name,s])
)
)
}
clang::DeclarationName{
preview (
; enum values from clang::DeclarationName::StoredNameKind
#if ($e.Ptr == 0) (
"empty"
) #elif (($e.Ptr & $e.PtrMask) == $e.StoredIdentifier) (
#else ( #("Identifier, ", (clang::IdentifierInfo*)($e.Ptr & ~$e.PtrMask)) )
) #elif (($e.Ptr & $e.PtrMask) == $e.StoredObjCZeroArgSelector) (
#("ZeroArgSelector, ", (clang::IdentifierInfo*)($e.Ptr & ~$e.PtrMask))
) #elif (($e.Ptr & $e.PtrMask) == $e.StoredObjCOneArgSelector) (
#("OneArgSelector, ", (clang::IdentifierInfo*)($e.Ptr & ~$e.PtrMask))
) #elif (($e.Ptr & $e.PtrMask) == $e.StoredDeclarationNameExtra) (
#switch (((clang::DeclarationNameExtra*)($e.Ptr & ~$e.PtrMask)).ExtraKindOrNumArgs)
#case 0 ( ;DeclarationNameExtra::CXXConstructor
#("CXXConstructorName, ", (clang::CXXSpecialName*)($e.Ptr & ~$e.PtrMask))
)
#case 1 ( ;DeclarationNameExtra::CXXDestructor
#("CXXDestructorName, ", (clang::CXXSpecialName*)($e.Ptr & ~$e.PtrMask))
)
#case 2 ( ;DeclarationNameExtra::CXXConversionFunction
#("CXXConversionFunctionName, ", (clang::CXXSpecialName*)($e.Ptr & ~$e.PtrMask))
)
#case 46 ( ;DeclarationNameExtra::CXXLiteralOperator
#("CXXLiteralOperatorName, ", (clang::CXXLiteralOperatorIdName*)($e.Ptr & ~$e.PtrMask))
)
#case 47 ( ;DeclarationNameExtra::CXXUsingDirective
#("CXXUsingDirective") ;TODO What to add here?
)
#default (
#if (((clang::DeclarationNameExtra*)($e.Ptr & ~$e.PtrMask)).ExtraKindOrNumArgs < 47) (
#("CXXOperatorName, ", (clang::CXXOperatorIdName*)($e.Ptr & ~$e.PtrMask))
) #else (
#("ObjCMultiArgSelector, ", (clang::MultiKeywordSelector*)($e.Ptr & ~$e.PtrMask))
)
)
)
)
children (
#(
; enum values from clang::DeclarationName::StoredNameKind
#if ($e.Ptr == 0) (
#array( expr: 0, size: 0 )
) #else (
#(
#([raw members] : [$e.Ptr,!]),
if (($e.Ptr & $e.PtrMask) == $e.StoredIdentifier) (
#(Ptr : (clang::IdentifierInfo*)($e.Ptr & ~$e.PtrMask))
) #elif (($e.Ptr & $e.PtrMask) == $e.StoredObjCZeroArgSelector) (
#(Ptr : (clang::IdentifierInfo*)($e.Ptr & ~$e.PtrMask))
) #elif (($e.Ptr & $e.PtrMask) == $e.StoredObjCOneArgSelector) (
#(Ptr : (clang::IdentifierInfo*)($e.Ptr & ~$e.PtrMask))
) #elif (($e.Ptr & $e.PtrMask) == $e.StoredDeclarationNameExtra) (
#switch (((clang::DeclarationNameExtra*)($e.Ptr & ~$e.PtrMask)).ExtraKindOrNumArgs)
#case 0 ( ;DeclarationNameExtra::CXXConstructor
#(Ptr : (clang::CXXSpecialName*)($e.Ptr & ~$e.PtrMask))
)
#case 1 ( ;DeclarationNameExtra::CXXDestructor
#(Ptr : (clang::CXXSpecialName*)($e.Ptr & ~$e.PtrMask))
)
#case 2 ( ;DeclarationNameExtra::CXXConversionFunction
#(Ptr : (clang::CXXSpecialName*)($e.Ptr & ~$e.PtrMask))
)
#case 46 ( ;DeclarationNameExtra::CXXLiteralOperator
#(Ptr : (clang::CXXLiteralOperatorIdName*)($e.Ptr & ~$e.PtrMask))
)
#case 47 ( ;DeclarationNameExtra::CXXUsingDirective
#(Ptr : $e.Ptr) ;TODO What to add here?
)
#default (
#if (((clang::DeclarationNameExtra*)($e.Ptr & ~$e.PtrMask)).ExtraKindOrNumArgs < 47) (
#(Ptr : (CXXOperatorIdName*)($e.Ptr & ~$e.PtrMask))
) #else (
#(Ptr : (clang::MultiKeywordSelector*)($e.Ptr & ~$e.PtrMask))
)
)
)
)
)
)
)
}
clang::DeclSpec{
preview (
#(
"[",
(clang::DeclSpec::SCS)$e.StorageClassSpec,
", ",
(clang::TypeSpecifierType)$e.TypeSpecType,
"]"
)
)
}
llvm::Triple{
preview ( $e.Data )
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment