Example #1
0
  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);
    }
  }