]> git.lizzy.rs Git - rust.git/blob - src/etc/natvis/liballoc.natvis
Auto merge of #107843 - bjorn3:sync_cg_clif-2023-02-09, r=bjorn3
[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={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>