mrb_gc_mark_mt(mrb_state *mrb, struct RClass *c)
{
  mt_tbl *t = c->mt;
  size_t i;

  if (t == NULL) return;
  if (t->alloc == 0) return;
  if (t->size == 0) return;

  for (i=0; i<t->alloc; i++) {
    struct mt_elem *slot = &t->table[i];

    if (slot->key && !slot->func_p) { /* Proc pointer */
      struct RProc *p = slot->ptr.proc;
      mrb_gc_mark(mrb, (struct RBasic*)p);
    }
  }
  return;
}
mrb_gc_mark_mt(mrb_state *mrb, struct RClass *c)
{
  mt_tbl *t = c->mt;
  size_t i;

  if (t == NULL) return;
  if (t->alloc == 0) return;
  if (t->size == 0) return;

  for (i=0; i<t->alloc; i++) {
    struct mt_elem *slot = &t->table[i];

    if (slot->key && !slot->func_p) {  
      struct RProc *p = slot->ptr.proc;
      mrb_gc_mark(mrb, (struct RBasic*)p);
    }
  }
  return;
}