]> git.lizzy.rs Git - rust.git/commitdiff
Vec, LinkedList, VecDeque, String, and Option NatVis visualizations
authorAndrew Gaspar <andrew.gaspar@outlook.com>
Wed, 15 Feb 2017 09:51:19 +0000 (01:51 -0800)
committerAndrew Gaspar <andrew.gaspar@outlook.com>
Wed, 15 Feb 2017 09:51:19 +0000 (01:51 -0800)
src/etc/natvis/libcollections.natvis [new file with mode: 0644]
src/etc/natvis/libcore.natvis [new file with mode: 0644]

diff --git a/src/etc/natvis/libcollections.natvis b/src/etc/natvis/libcollections.natvis
new file mode 100644 (file)
index 0000000..821c523
--- /dev/null
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
+  <Type Name="collections::vec::Vec&lt;*&gt;">
+    <DisplayString>{{ size={len} }}</DisplayString>
+    <Expand>
+      <Item Name="[size]" ExcludeView="simple">len</Item>
+      <Item Name="[capacity]" ExcludeView="simple">buf.cap</Item>
+      <ArrayItems>
+        <Size>len</Size>
+        <ValuePointer>buf.ptr.pointer.__0</ValuePointer>
+      </ArrayItems>
+    </Expand>
+  </Type>
+  <Type Name="collections::vec_deque::VecDeque&lt;*&gt;">
+    <DisplayString>{{ size={tail &lt;= head ? head - tail : buf.cap - tail + head} }}</DisplayString>
+    <Expand>
+      <Item Name="[size]" ExcludeView="simple">tail &lt;= head ? head - tail : buf.cap - tail + head</Item>
+      <Item Name="[capacity]" ExcludeView="simple">buf.cap</Item>
+      <CustomListItems>
+        <Variable Name="i" InitialValue="tail" />
+
+        <Size>tail &lt;= head ? head - tail : buf.cap - tail + head</Size>
+        <Loop>
+          <If Condition="i == head">
+            <Break/>
+          </If>
+          <Item>buf.ptr.pointer.__0 + i</Item>
+          <Exec>i = (i + 1 == buf.cap ? 0 : i + 1)</Exec>
+        </Loop>
+      </CustomListItems>
+    </Expand>
+  </Type>
+  <Type Name="collections::linked_list::LinkedList&lt;*&gt;">
+    <DisplayString>{{ size={len} }}</DisplayString>
+    <Expand>
+      <LinkedListItems>
+        <Size>len</Size>
+        <HeadPointer>*(collections::linked_list::Node&lt;$T1&gt; **)&amp;head</HeadPointer>
+        <NextPointer>*(collections::linked_list::Node&lt;$T1&gt; **)&amp;next</NextPointer>
+        <ValueNode>element</ValueNode>
+      </LinkedListItems>
+    </Expand>
+  </Type>
+  <Type Name="collections::string::String">
+    <DisplayString>{*(char**)this,[vec.len]}</DisplayString>
+    <StringView>*(char**)this,[vec.len]</StringView>
+    <Expand>
+      <Item Name="[size]" ExcludeView="simple">vec.len</Item>
+      <Item Name="[capacity]" ExcludeView="simple">vec.buf.cap</Item>
+      <ArrayItems>
+        <Size>vec.len</Size>
+        <ValuePointer>*(char**)this</ValuePointer>
+      </ArrayItems>
+    </Expand>
+  </Type>
+</AutoVisualizer>
\ No newline at end of file
diff --git a/src/etc/natvis/libcore.natvis b/src/etc/natvis/libcore.natvis
new file mode 100644 (file)
index 0000000..37d64be
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
+  <Type Name="core::ptr::Unique&lt;*&gt;">
+    <DisplayString>{{ Unique {*pointer.__0} }}</DisplayString>
+    <Expand>
+      <Item Name="[ptr]">pointer.__0</Item>
+    </Expand>
+  </Type>
+  <Type Name="core::ptr::Shared&lt;*&gt;">
+    <DisplayString>{{ Shared {*pointer.__0} }}</DisplayString>
+    <Expand>
+      <Item Name="[ptr]">pointer.__0</Item>
+    </Expand>
+  </Type>
+  <Type Name="core::option::Option&lt;*&gt;">
+    <DisplayString Condition="RUST$ENUM$DISR == 0x0">{{ None }}</DisplayString>
+    <DisplayString Condition="RUST$ENUM$DISR == 0x1">{{ Some {__0} }}</DisplayString>
+    <Expand>
+      <Item Name="[size]" ExcludeView="simple">(ULONG)(RUST$ENUM$DISR != 0)</Item>
+      <Item Name="[value]" ExcludeView="simple">__0</Item>
+      <ArrayItems>
+        <Size>(ULONG)(RUST$ENUM$DISR != 0)</Size>
+        <ValuePointer>&amp;__0</ValuePointer>
+      </ArrayItems>
+    </Expand>
+  </Type>
+  <Type Name="core::option::Option&lt;*&gt;" Priority="MediumLow">
+    <DisplayString Condition="*(PVOID *)this == nullptr">{{ None }}</DisplayString>
+    <DisplayString>{{ Some {($T1 *)this} }}</DisplayString>
+    <Expand>
+      <Item Name="[size]" ExcludeView="simple">(ULONG)(*(PVOID *)this != nullptr)</Item>
+      <Item Name="[value]" ExcludeView="simple" Condition="*(PVOID *)this != nullptr">($T1 *)this</Item>
+      <ArrayItems>
+        <Size>(ULONG)(*(PVOID *)this != nullptr)</Size>
+        <ValuePointer>($T1 *)this</ValuePointer>
+      </ArrayItems>
+    </Expand>
+  </Type>
+</AutoVisualizer>
\ No newline at end of file