コード例 #1
0
ファイル: fmthe.c プロジェクト: alisheikh/hornet
static mps_res_t dylan_header_scan_weak(mps_ss_t mps_ss,
                                        mps_addr_t base,
                                        mps_addr_t limit)
{
  mps_res_t res;

  while(base < limit) {
      mps_word_t header;
      header = (mps_word_t)*(int*)((char*)base - headerSIZE);
      switch(headerType(header)) {
      case realTYPE:
          assert(header == realHeader);
          break;
      case padTYPE:
          base = (mps_addr_t)((char*)base + headerPadSize(header));
          continue;
      default:
          notreached();
          break;
      }

      res = dylan_scan1_weak(mps_ss, &base);
      if(res) return res;
      base = AddHeader(base);
  }

  assert(base <= AddHeader(limit));

  return MPS_RES_OK;
}
コード例 #2
0
ファイル: fmthe.c プロジェクト: alisheikh/hornet
static mps_res_t dylan_header_scan(mps_ss_t mps_ss,
                                   mps_addr_t base, mps_addr_t limit)
{
  mps_res_t res;
  mps_addr_t p = base;

  while(p < limit) {
      mps_word_t header = (mps_word_t)*(int*)((char*)p - headerSIZE);
      switch(headerType(header)) {
      case realTYPE:
          assert(header == realHeader);
          break;
      case padTYPE:
          p = (mps_addr_t)((char*)p + headerPadSize(header));
          continue;
      default:
          notreached();
          break;
      }
      res = dylan_scan1(mps_ss, &p);
      if(res) return res;
      p = AddHeader(p);
  }

  assert(p <= AddHeader(limit));

  return MPS_RES_OK;
}
コード例 #3
0
mps_res_t no_scan(mps_ss_t mps_ss,
                  mps_addr_t base,
                  mps_addr_t limit)
{
    unused(mps_ss); unused(base); unused(limit);
    notreached();
    return 0;
}
コード例 #4
0
ファイル: fmthe.c プロジェクト: alisheikh/hornet
static mps_addr_t dylan_header_skip(mps_addr_t object)
{
  mps_addr_t *p;        /* cursor in object */
  mps_word_t header;
  header = (mps_word_t)*(int*)((char*)object - headerSIZE);
  switch(headerType(header)) {
  case realTYPE:
      assert(header == realHeader);
      break;
  case padTYPE:
      return (mps_addr_t)((char*)object + headerPadSize(header));
  default:
      notreached();
      break;
  }

  p = dylan_format->skip(object);
  p = AddHeader(p);
  return p;
}
コード例 #5
0
mps_addr_t no_skip(mps_addr_t object)
{
    unused(object);
    notreached();
    return 0;
}