@@ -27,14 +27,14 @@ impl Drop for GcState {
27
27
{
28
28
let mut p = & self . boxes_start ;
29
29
while let Some ( node) = * p {
30
- Finalize :: finalize ( & ( * * node) . data ) ;
31
- p = & ( * * node) . header . next ;
30
+ Finalize :: finalize ( & ( * node. as_ptr ( ) ) . data ) ;
31
+ p = & ( * node. as_ptr ( ) ) . header . next ;
32
32
}
33
33
}
34
34
35
35
let _guard = DropGuard :: new ( ) ;
36
36
while let Some ( node) = self . boxes_start {
37
- let node = Box :: from_raw ( * node) ;
37
+ let node = Box :: from_raw ( node. as_ptr ( ) ) ;
38
38
self . boxes_start = node. header . next ;
39
39
}
40
40
}
@@ -162,39 +162,39 @@ fn collect_garbage(st: &mut GcState) {
162
162
// Walk the tree, tracing and marking the nodes
163
163
let mut mark_head = * head;
164
164
while let Some ( node) = mark_head {
165
- if ( * * node) . header . roots . get ( ) > 0 {
166
- ( * * node) . trace_inner ( ) ;
165
+ if ( * node. as_ptr ( ) ) . header . roots . get ( ) > 0 {
166
+ ( * node. as_ptr ( ) ) . trace_inner ( ) ;
167
167
}
168
168
169
- mark_head = ( * * node) . header . next ;
169
+ mark_head = ( * node. as_ptr ( ) ) . header . next ;
170
170
}
171
171
172
172
// Collect a vector of all of the nodes which were not marked,
173
173
// and unmark the ones which were.
174
174
let mut unmarked = Vec :: new ( ) ;
175
175
let mut unmark_head = head;
176
176
while let Some ( node) = * unmark_head {
177
- if ( * * node) . header . marked . get ( ) {
178
- ( * * node) . header . marked . set ( false ) ;
177
+ if ( * node. as_ptr ( ) ) . header . marked . get ( ) {
178
+ ( * node. as_ptr ( ) ) . header . marked . set ( false ) ;
179
179
} else {
180
180
unmarked. push ( Unmarked {
181
181
incoming : unmark_head,
182
182
this : node,
183
183
} ) ;
184
184
}
185
- unmark_head = & mut ( * * node) . header . next ;
185
+ unmark_head = & mut ( * node. as_ptr ( ) ) . header . next ;
186
186
}
187
187
unmarked
188
188
}
189
189
190
190
unsafe fn sweep ( finalized : Vec < Unmarked > , bytes_allocated : & mut usize ) {
191
191
let _guard = DropGuard :: new ( ) ;
192
192
for node in finalized. into_iter ( ) . rev ( ) {
193
- if ( * * node. this ) . header . marked . get ( ) {
193
+ if ( * node. this . as_ptr ( ) ) . header . marked . get ( ) {
194
194
continue ;
195
195
}
196
196
let incoming = node. incoming ;
197
- let mut node = Box :: from_raw ( * node. this ) ;
197
+ let mut node = Box :: from_raw ( node. this . as_ptr ( ) ) ;
198
198
* bytes_allocated -= mem:: size_of_val :: < GcBox < _ > > ( & * node) ;
199
199
* incoming = node. header . next . take ( ) ;
200
200
}
@@ -206,7 +206,7 @@ fn collect_garbage(st: &mut GcState) {
206
206
return ;
207
207
}
208
208
for node in & unmarked {
209
- Trace :: finalize_glue ( & ( * * node. this ) . data ) ;
209
+ Trace :: finalize_glue ( & ( * node. this . as_ptr ( ) ) . data ) ;
210
210
}
211
211
mark ( & mut st. boxes_start ) ;
212
212
sweep ( unmarked, & mut st. bytes_allocated ) ;
0 commit comments