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