]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/contexts.cpp
GC maps for more compact inline GC checks
[factor.git] / vm / contexts.cpp
index 25fe0e5280cc43a82617111119e981303ec6424b..94bbe7d508b9ae6630b4b05b9ddc22e2a19a2668 100644 (file)
@@ -55,6 +55,31 @@ void context::fix_stacks()
                reset_retainstack();
 }
 
+void context::scrub_stacks(gc_info *info, cell index)
+{
+       u8 *bitmap = info->gc_info_bitmap();
+
+       {
+               cell base = info->scrub_d_base(index);
+
+               for(cell loc = 0; loc < info->scrub_d_count; loc++)
+               {
+                       if(bitmap_p(bitmap,base + loc))
+                               ((cell *)datastack)[-loc] = 0;
+               }
+       }
+
+       {
+               cell base = info->scrub_r_base(index);
+
+               for(cell loc = 0; loc < info->scrub_r_count; loc++)
+               {
+                       if(bitmap_p(bitmap,base + loc))
+                               printf("scrub retainstack %ld\n",loc);
+               }
+       }
+}
+
 context::~context()
 {
        delete datastack_seg;