Beispiel #1
0
 void Fiber::Info::mark(Object* obj, memory::ObjectMark& mark) {
   auto_mark(obj, mark);
   Fiber* fib = force_as<Fiber>(obj);
   FiberData* data = fib->data();
   if(!data || data->dead_p()) return;
   data->set_mark();
 }
  void FiberStacks::gc_scan(GarbageCollector* gc) {
    for(Datas::iterator i = datas_.begin();
        i != datas_.end();
        ++i)
    {
      FiberData* data = *i;
      if(data->dead_p()) 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);
    }
  }