@@ -725,6 +725,8 @@ JL_DLLEXPORT void* get_stackbase(int16_t tid) {
725
725
return ptls2 -> stackbase ;
726
726
}
727
727
728
+ const bool PRINT_OBJ_TYPE = false;
729
+
728
730
/**
729
731
* Corresponds to the function mark_loop in the original Julia GC. It
730
732
* dispatches MMTk work for scanning internal pointers for the object obj.
@@ -749,6 +751,7 @@ JL_DLLEXPORT void scan_julia_obj(jl_value_t* obj, closure_pointer closure, Proce
749
751
};
750
752
751
753
if (vt == jl_simplevector_type ) { // scanning a jl_simplevector_type object (inlining label `objarray_loaded` from mark_loop)
754
+ if (PRINT_OBJ_TYPE ) { printf ("scan_julia_obj %p: simple vector\n" , obj ); fflush (stdout ); }
752
755
size_t l = jl_svec_len (obj );
753
756
jl_value_t * * data = jl_svec_data (obj );
754
757
jl_value_t * * objary_begin = data ;
@@ -757,6 +760,7 @@ JL_DLLEXPORT void scan_julia_obj(jl_value_t* obj, closure_pointer closure, Proce
757
760
process_edge (closure , objary_begin );
758
761
}
759
762
} else if (vt -> name == jl_array_typename ) { // scanning a jl_array_typename object
763
+ if (PRINT_OBJ_TYPE ) { printf ("scan_julia_obj %p: array\n" , obj ); fflush (stdout ); }
760
764
jl_array_t * a = (jl_array_t * )obj ;
761
765
jl_array_flags_t flags = a -> flags ;
762
766
@@ -840,6 +844,7 @@ JL_DLLEXPORT void scan_julia_obj(jl_value_t* obj, closure_pointer closure, Proce
840
844
return ;
841
845
}
842
846
} else if (vt == jl_module_type ) { // inlining label `module_binding` from mark_loop
847
+ if (PRINT_OBJ_TYPE ) { printf ("scan_julia_obj %p: module\n" , obj ); fflush (stdout ); }
843
848
jl_module_t * m = (jl_module_t * )obj ;
844
849
jl_svec_t * bindings = jl_atomic_load_relaxed (& m -> bindings );
845
850
jl_binding_t * * table = (jl_binding_t * * )jl_svec_data (bindings );
@@ -851,11 +856,15 @@ JL_DLLEXPORT void scan_julia_obj(jl_value_t* obj, closure_pointer closure, Proce
851
856
if (b == (jl_binding_t * )jl_nothing )
852
857
continue ;
853
858
859
+ if (PRINT_OBJ_TYPE ) { printf (" - scan table: %p\n" , begin ); fflush (stdout ); }
854
860
process_edge (closure , begin );
855
861
}
856
862
863
+ if (PRINT_OBJ_TYPE ) { printf (" - scan parent: %p\n" , & m -> parent ); fflush (stdout ); }
857
864
process_edge (closure , & m -> parent );
865
+ if (PRINT_OBJ_TYPE ) { printf (" - scan bindingkeyset: %p\n" , & m -> bindingkeyset ); fflush (stdout ); }
858
866
process_edge (closure , & m -> bindingkeyset );
867
+ if (PRINT_OBJ_TYPE ) { printf (" - scan bindings: %p\n" , & m -> bindings ); fflush (stdout ); }
859
868
process_edge (closure , & m -> bindings );
860
869
861
870
size_t nusings = m -> usings .len ;
@@ -865,6 +874,7 @@ JL_DLLEXPORT void scan_julia_obj(jl_value_t* obj, closure_pointer closure, Proce
865
874
866
875
for (; objary_begin < objary_end ; objary_begin += 1 ) {
867
876
jl_value_t * pnew_obj = * objary_begin ;
877
+ if (PRINT_OBJ_TYPE ) { printf (" - scan usings: %p\n" , objary_begin ); fflush (stdout ); }
868
878
process_edge (closure , pnew_obj );
869
879
}
870
880
}
@@ -886,8 +896,10 @@ JL_DLLEXPORT void scan_julia_obj(jl_value_t* obj, closure_pointer closure, Proce
886
896
process_edge (closure , slot );
887
897
}
888
898
} else if (vt == jl_string_type ) { // scanning a jl_string_type object
899
+ if (PRINT_OBJ_TYPE ) { printf ("scan_julia_obj %p: string\n" , obj ); fflush (stdout ); }
889
900
return ;
890
901
} else { // scanning a jl_datatype object
902
+ if (PRINT_OBJ_TYPE ) { printf ("scan_julia_obj %p: datatype\n" , obj ); fflush (stdout ); }
891
903
if (vt == jl_weakref_type ) {
892
904
return ;
893
905
}
0 commit comments