void FiberStacks::gc_scan(GarbageCollector* gc, bool marked_only) { for(Datas::iterator i = datas_.begin(); i != datas_.end(); ++i) { FiberData* data = *i; if(data->dead_p()) continue; if(marked_only && !data->marked_p()) { data->status_ = FiberData::eDead; continue; } AddressDisplacement dis(data->data_offset(), data->data_lower_bound(), data->data_upper_bound()); if(CallFrame* cf = data->call_frame()) { gc->walk_call_frame(cf, &dis); } gc->scan(data->variable_root_buffers(), false, &dis); } }