@@ -12,6 +12,7 @@ use crate::{
12
12
serializer:: { Serializable , SnapshotSerializer } ,
13
13
} ,
14
14
} ;
15
+ use std:: usize;
15
16
use std:: { any:: TypeId , cmp:: Ordering , fmt, marker:: PhantomData } ;
16
17
use std:: {
17
18
mem:: size_of,
@@ -487,9 +488,11 @@ impl Tracer for SlotVisitor {
487
488
if scan > end {
488
489
swap ( & mut scan, & mut end) ;
489
490
}
491
+ // end = scan;
490
492
unsafe {
491
493
while scan < end {
492
494
let ptr = ( scan as * mut * mut u8 ) . read ( ) ;
495
+ // println!("{}", ptr as usize);
493
496
494
497
if ( * self . heap ) . is_heap_pointer ( ptr) {
495
498
let mut ptr = ptr. cast :: < GcPointerBase > ( ) ;
@@ -639,16 +642,13 @@ impl Heap {
639
642
}
640
643
641
644
fn collect_internal ( & mut self ) {
642
- fn current_stack_pointer ( ) -> usize {
643
- let mut sp: usize = 0 ;
644
- sp = & sp as * const usize as usize ;
645
- sp
646
- }
647
645
// Capture all the registers to scan them conservatively. Note that this also captures
648
646
// FPU registers too because JS values is NaN boxed and exist in FPU registers.
649
647
650
648
// Get stack pointer for scanning thread stack.
651
- self . sp = current_stack_pointer ( ) ;
649
+ let sp : usize = 0 ;
650
+ let sp = & sp as * const usize ;
651
+ self . sp = sp as usize ;
652
652
if self . defers > 0 {
653
653
return ;
654
654
}
@@ -662,7 +662,7 @@ impl Heap {
662
662
visitor. add_conservative ( thread. bounds . origin as _ , sp as usize ) ;
663
663
} ) ;
664
664
self . process_roots ( & mut visitor) ;
665
-
665
+
666
666
if let Some ( ref mut pool) = self . threadpool {
667
667
crate :: gc:: pmarking:: start (
668
668
& visitor. queue ,
@@ -673,6 +673,7 @@ impl Heap {
673
673
} else {
674
674
self . process_worklist ( & mut visitor) ;
675
675
}
676
+
676
677
self . update_weak_references ( ) ;
677
678
self . reset_weak_references ( ) ;
678
679
let alloc = self . allocated ;
0 commit comments