• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="utf-8"?>
2<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
3  <Type Name="alloc::vec::Vec&lt;*&gt;">
4    <DisplayString>{{ len={len} }}</DisplayString>
5    <Expand>
6      <Item Name="[len]" ExcludeView="simple">len</Item>
7      <Item Name="[capacity]" ExcludeView="simple">buf.cap</Item>
8      <ArrayItems>
9        <Size>len</Size>
10        <ValuePointer>buf.ptr.pointer.pointer</ValuePointer>
11      </ArrayItems>
12    </Expand>
13  </Type>
14  <Type Name="alloc::collections::vec_deque::VecDeque&lt;*&gt;">
15    <DisplayString>{{ len={len} }}</DisplayString>
16    <Expand>
17      <Item Name="[len]" ExcludeView="simple">len</Item>
18      <Item Name="[capacity]" ExcludeView="simple">buf.cap</Item>
19      <CustomListItems>
20        <Variable Name="i" InitialValue="0" />
21        <Size>len</Size>
22        <Loop>
23          <If Condition="i == len">
24            <Break/>
25          </If>
26          <Item>buf.ptr.pointer.pointer[(i + head) % buf.cap]</Item>
27          <Exec>i = i + 1</Exec>
28        </Loop>
29      </CustomListItems>
30    </Expand>
31  </Type>
32  <Type Name="alloc::collections::linked_list::LinkedList&lt;*&gt;">
33    <DisplayString>{{ len={len} }}</DisplayString>
34    <Expand>
35      <LinkedListItems>
36        <Size>len</Size>
37        <HeadPointer>*(alloc::collections::linked_list::Node&lt;$T1&gt; **)&amp;head</HeadPointer>
38        <NextPointer>*(alloc::collections::linked_list::Node&lt;$T1&gt; **)&amp;next</NextPointer>
39        <ValueNode>element</ValueNode>
40      </LinkedListItems>
41    </Expand>
42  </Type>
43  <Type Name="alloc::string::String">
44    <DisplayString>{(char*)vec.buf.ptr.pointer.pointer,[vec.len]s8}</DisplayString>
45    <StringView>(char*)vec.buf.ptr.pointer.pointer,[vec.len]s8</StringView>
46    <Expand>
47      <Item Name="[len]" ExcludeView="simple">vec.len</Item>
48      <Item Name="[capacity]" ExcludeView="simple">vec.buf.cap</Item>
49      <Synthetic Name="[chars]">
50        <DisplayString>{(char*)vec.buf.ptr.pointer.pointer,[vec.len]s8}</DisplayString>
51        <Expand>
52          <ArrayItems>
53            <Size>vec.len</Size>
54            <ValuePointer>(char*)vec.buf.ptr.pointer.pointer</ValuePointer>
55          </ArrayItems>
56        </Expand>
57      </Synthetic>
58    </Expand>
59  </Type>
60
61  <!--
62      The display string for Rc, Arc, etc is optional because the expression cannot be evaluated
63      if the pointee is unsized (i.e. if `ptr.pointer` is a fat pointer).
64
65      There are also two versions for the reference count fields, one for sized and one for
66      dyn pointees.
67
68      Rc<[T]> and Arc<[T]> are handled separately altogether so we can actually show
69      the slice values.
70  -->
71  <!-- alloc::rc::Rc<T> -->
72  <Type Name="alloc::rc::Rc&lt;*&gt;">
73    <DisplayString Optional="true">{ptr.pointer->value}</DisplayString>
74    <Expand>
75      <!-- thin -->
76      <ExpandedItem Optional="true">ptr.pointer->value</ExpandedItem>
77      <Item Name="[Reference count]" Optional="true">ptr.pointer->strong</Item>
78      <Item Name="[Weak reference count]" Optional="true">ptr.pointer->weak</Item>
79
80      <!-- dyn -->
81      <Item Name="[Reference count]" Optional="true">ptr.pointer.pointer->strong</Item>
82      <Item Name="[Weak reference count]" Optional="true">ptr.pointer.pointer->weak</Item>
83    </Expand>
84  </Type>
85
86  <!-- alloc::rc::Rc<[T]> -->
87  <Type Name="alloc::rc::Rc&lt;slice2$&lt;*&gt; &gt;">
88    <DisplayString>{{ len={ptr.pointer.length} }}</DisplayString>
89    <Expand>
90      <Item Name="[Length]" ExcludeView="simple">ptr.pointer.length</Item>
91      <Item Name="[Reference count]">ptr.pointer.data_ptr->strong</Item>
92      <Item Name="[Weak reference count]">ptr.pointer.data_ptr->weak</Item>
93      <ArrayItems>
94        <Size>ptr.pointer.length</Size>
95        <!-- We add +2 to the data_ptr in order to skip the ref count fields in the RcBox -->
96        <ValuePointer>($T1*)(((size_t*)ptr.pointer.data_ptr) + 2)</ValuePointer>
97      </ArrayItems>
98    </Expand>
99  </Type>
100
101  <!-- alloc::rc::Weak<T> -->
102  <Type Name="alloc::rc::Weak&lt;*&gt;">
103    <DisplayString Optional="true">{ptr.pointer->value}</DisplayString>
104    <Expand>
105      <!-- thin -->
106      <ExpandedItem Optional="true">ptr.pointer->value</ExpandedItem>
107      <Item Name="[Reference count]" Optional="true">ptr.pointer->strong</Item>
108      <Item Name="[Weak reference count]" Optional="true">ptr.pointer->weak</Item>
109
110      <!-- dyn -->
111      <Item Name="[Reference count]" Optional="true">ptr.pointer.pointer->strong</Item>
112      <Item Name="[Weak reference count]" Optional="true">ptr.pointer.pointer->weak</Item>
113    </Expand>
114  </Type>
115
116  <!-- alloc::rc::Weak<[T]> -->
117  <Type Name="alloc::rc::Weak&lt;slice2$&lt;*&gt; &gt;">
118    <DisplayString>{{ len={ptr.pointer.length} }}</DisplayString>
119    <Expand>
120      <Item Name="[Length]" ExcludeView="simple">ptr.pointer.length</Item>
121      <Item Name="[Reference count]">ptr.pointer.data_ptr->strong</Item>
122      <Item Name="[Weak reference count]">ptr.pointer.data_ptr->weak</Item>
123      <ArrayItems>
124        <Size>ptr.pointer.length</Size>
125        <ValuePointer>($T1*)(((size_t*)ptr.pointer.data_ptr) + 2)</ValuePointer>
126      </ArrayItems>
127    </Expand>
128  </Type>
129
130  <!-- alloc::sync::Arc<T> -->
131  <Type Name="alloc::sync::Arc&lt;*&gt;">
132    <DisplayString Optional="true">{ptr.pointer->data}</DisplayString>
133    <Expand>
134      <!-- thin -->
135      <ExpandedItem Optional="true">ptr.pointer->data</ExpandedItem>
136      <Item Name="[Reference count]" Optional="true">ptr.pointer->strong</Item>
137      <Item Name="[Weak reference count]" Optional="true">ptr.pointer->weak</Item>
138
139      <!-- dyn -->
140      <Item Name="[Reference count]" Optional="true">ptr.pointer.pointer->strong</Item>
141      <Item Name="[Weak reference count]" Optional="true">ptr.pointer.pointer->weak</Item>
142    </Expand>
143  </Type>
144
145  <!-- alloc::sync::Arc<[T]> -->
146  <Type Name="alloc::sync::Arc&lt;slice2$&lt;*&gt; &gt;">
147    <DisplayString>{{ len={ptr.pointer.length} }}</DisplayString>
148    <Expand>
149      <Item Name="[Length]" ExcludeView="simple">ptr.pointer.length</Item>
150      <Item Name="[Reference count]">ptr.pointer.data_ptr->strong</Item>
151      <Item Name="[Weak reference count]">ptr.pointer.data_ptr->weak</Item>
152      <ArrayItems>
153        <Size>ptr.pointer.length</Size>
154        <ValuePointer>($T1*)(((size_t*)ptr.pointer.data_ptr) + 2)</ValuePointer>
155      </ArrayItems>
156    </Expand>
157  </Type>
158
159  <!-- alloc::sync::Weak<T> -->
160  <Type Name="alloc::sync::Weak&lt;*&gt;">
161    <DisplayString Optional="true">{ptr.pointer->data}</DisplayString>
162    <Expand>
163      <!-- thin -->
164      <ExpandedItem Optional="true">ptr.pointer->data</ExpandedItem>
165      <Item Name="[Reference count]" Optional="true">ptr.pointer->strong</Item>
166      <Item Name="[Weak reference count]" Optional="true">ptr.pointer->weak</Item>
167
168      <!-- dyn -->
169      <Item Name="[Reference count]" Optional="true">ptr.pointer.pointer->strong</Item>
170      <Item Name="[Weak reference count]" Optional="true">ptr.pointer.pointer->weak</Item>
171    </Expand>
172  </Type>
173
174  <!-- alloc::sync::Weak<[T]> -->
175  <Type Name="alloc::sync::Weak&lt;slice2$&lt;*&gt; &gt;">
176    <DisplayString>{{ len={ptr.pointer.length} }}</DisplayString>
177    <Expand>
178      <Item Name="[Length]" ExcludeView="simple">ptr.pointer.length</Item>
179      <Item Name="[Reference count]">ptr.pointer.data_ptr->strong</Item>
180      <Item Name="[Weak reference count]">ptr.pointer.data_ptr->weak</Item>
181      <ArrayItems>
182        <Size>ptr.pointer.length</Size>
183        <ValuePointer>($T1*)(((size_t*)ptr.pointer.data_ptr) + 2)</ValuePointer>
184      </ArrayItems>
185    </Expand>
186  </Type>
187</AutoVisualizer>
188