Merge pull request #10338 from Pokechu22/natvis-improvements
Natvis improvements
This commit is contained in:
commit
7bd14c5d9f
|
@ -11,61 +11,64 @@
|
|||
This is a re-implementation of the abstract bitfield class' algrothm (in BitField.h)
|
||||
for Visual Studio to use for pretty-printing during debugging.
|
||||
-->
|
||||
<Type Name="BitField<*,*,*>">
|
||||
<DisplayString Condition="$T2 == 1"><![CDATA[{(storage & (1 << $T1)) != 0}]]></DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << $T2) - 1)}]]></DisplayString>
|
||||
<Type Name="BitField<*,*,*,*>">
|
||||
<DisplayString><![CDATA[{($T3)((storage >> $T1) & ((1 << $T2) - 1))}]]></DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Similar re-implementation for BitFieldArray -->
|
||||
<Type Name="BitFieldArray<*,*,*,*,*>">
|
||||
<Expand>
|
||||
<IndexListItems>
|
||||
<Size>$T3</Size>
|
||||
<ValueNode><![CDATA[($T4)((storage >> ($T1 + $T2*$i)) & ((1 << $T2) - 1))]]></ValueNode>
|
||||
</IndexListItems>
|
||||
<!-- Put these after the index list, so that the index list is the main thing in the unexpanded preview -->
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
<Item Name="Count">$T3</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!--Specialised versions for signed types-->
|
||||
<Type Name="BitField<*,*,__int64>">
|
||||
<Type Name="BitField<*,*,signed char,*>">
|
||||
<!-- It seems like we can't use s8/s16/s32/s64, nor can we use std::int8_t or the like; we have to use these names -->
|
||||
<AlternativeType Name="BitField<*,*,short,*>" />
|
||||
<AlternativeType Name="BitField<*,*,int,*>" />
|
||||
<AlternativeType Name="BitField<*,*,long long,*>" />
|
||||
|
||||
<!-- This is what I have do to get a sign extension in this crappy natvis "language"
|
||||
Basically, we check the top bit, if it's one, we add the remaining
|
||||
bits to the smallest (most negative) number. -->
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2))) != 0">
|
||||
<![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2 - 1))) != 0">
|
||||
<![CDATA[{($T3)((-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1)))}]]>
|
||||
</DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
|
||||
<DisplayString><![CDATA[{($T3)((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]></DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Oh, and I can't do a generic match for all signed types, so these are identical to the __int64 case above
|
||||
Would be nice if std::numeric_limits<$T3>::is_signed or std::is_signed<$T3>::value worked -->
|
||||
<Type Name="BitField<*,*,__int32>">
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2))) != 0">
|
||||
<![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
|
||||
</DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
<Type Name="BitField<*,*,__int16>">
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2))) != 0">
|
||||
<![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
|
||||
</DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
|
||||
<Expand>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
<Type Name="BitField<*,*,__int8>">
|
||||
<DisplayString Condition="(storage & (1 << ($T1 + $T2))) != 0">
|
||||
<![CDATA[{(-1 * (1 << ($T2-1))) + ((storage >> $T1) & ((1 << ($T2-1)) - 1))}]]>
|
||||
</DisplayString>
|
||||
<DisplayString><![CDATA[{(storage >> $T1) & ((1 << ($T2-1)) - 1)}]]></DisplayString>
|
||||
<Type Name="BitFieldArray<*,*,*,signed char,*>">
|
||||
<AlternativeType Name="BitFieldArray<*,*,*,short,*>" />
|
||||
<AlternativeType Name="BitFieldArray<*,*,*,int,*>" />
|
||||
<AlternativeType Name="BitFieldArray<*,*,*,long,*>" />
|
||||
|
||||
<Expand>
|
||||
<IndexListItems>
|
||||
<Size>$T3</Size>
|
||||
<ValueNode Condition="(storage & (1 << ($T1 + $T2 * $i + $T2 - 1))) != 0">
|
||||
<![CDATA[($T4)((-1 * (1 << ($T2-1))) + ((storage >> ($T1 + $T2*$i)) & ((1 << ($T2-1)) - 1)))]]>
|
||||
</ValueNode>
|
||||
<ValueNode><![CDATA[($T4)((storage >> ($T1 + $T2*$i)) & ((1 << ($T2-1)) - 1))]]></ValueNode>
|
||||
</IndexListItems>
|
||||
<Item Name="Offset">$T1</Item>
|
||||
<Item Name="Size">$T2</Item>
|
||||
<Item Name="Count">$T3</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
</AutoVisualizer>
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright 2022 Dolphin Emulator Project
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
-->
|
||||
|
||||
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
||||
<Type Name="Common::EnumMap<*,*,*>">
|
||||
<Expand>
|
||||
<!-- The following would work, except ValueNode for IndexListItems doesn't support the Name attribute.
|
||||
It's only allowed for LinkedListItems and TreeItems, for some reason. So we get to reimplement it with CustomListItems. -->
|
||||
<!--
|
||||
<IndexListItems>
|
||||
<Size>$T2 + 1</Size>
|
||||
<ValueNode Name="[{($T3)$i}]">m_array[$i]</ValueNode>
|
||||
</IndexListItems>
|
||||
-->
|
||||
<CustomListItems MaxItemsPerView="5000">
|
||||
<Variable Name="i" InitialValue="0" />
|
||||
<!-- Size is incremented by 1 since the template argument is the last member (inclusive), but we want the count (exclusive) -->
|
||||
<Size>$T2 + 1</Size>
|
||||
<Loop>
|
||||
<Break Condition="i > $T2" />
|
||||
<Item Name="[{($T3)i}]">m_array[i]</Item>
|
||||
<Exec>i++</Exec>
|
||||
</Loop>
|
||||
</CustomListItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
</AutoVisualizer>
|
|
@ -1236,5 +1236,6 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Natvis Include="Common\BitField.natvis" />
|
||||
<Natvis Include="Common\EnumMap.natvis" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
Loading…
Reference in New Issue