if (i == the_mark.length) {  if (DEBUG_LINK) VM_Scheduler.trace("build_list: ", "found a full block", the_block.slotsize);   VM_Memory.zero(VM_Magic.objectAsAddress(the_mark), VM_Magic.objectAsAddress(the_mark).add(the_mark.length)); the_block.live = false; return false; } else {  current = the_block.baseAddr.add(i * the_block.slotsize); }  VM_Memory.zero(current.add(4), current.add(the_block.slotsize)); the_size.next_slot = current; if (DEBUG_LINK && (!the_size.next_slot.isZero())) { if (!addrInHeap(the_size.next_slot)) VM.sysFail("Bad ptr"); if (!isPtrInBlock(the_size.next_slot, the_size)) VM.sysFail("Pointer out of block"); }   i++; for (; i < the_mark.length ; i++) { if (the_mark[i] == 0) break; }  if (i == the_mark.length) {  VM_Magic.setMemoryWord(current, 0);  if (DEBUG_LINK) { VM_Scheduler.trace("build_list: ", "found blk w 1 free slot", the_block.slotsize); do_check(the_block, the_size); }   VM_Memory.zero(VM_Magic.objectAsAddress(the_mark), VM_Magic.objectAsAddress(the_mark).add(the_mark.length)); the_block.live = false; return true; }  next = the_block.baseAddr.add(i * the_block.slotsize); VM_Magic.setMemoryAddress(current, next); current = next; VM_Memory.zero(current.add(4), current.add(the_block.slotsize));   for (i = i + 1; i < the_mark.length ; i++) { if (the_mark[i] == 0) { next = the_block.baseAddr.add(i * the_block.slotsize); VM_Magic.setMemoryAddress(current, next); current = next; VM_Memory.zero(current.add(4), current.add(the_block.slotsize)); } }  VM_Magic.setMemoryWord(current,0); if (DEBUG_LINK) do_check(the_block, the_size);  VM_Memory.zero(VM_Magic.objectAsAddress(the_mark), VM_Magic.objectAsAddress(the_mark).add(the_mark.length)); the_block.live = false; return true; }
  protected boolean build_list (VM_BlockControl the_block, VM_SizeControl the_size) throws VM_PragmaUninterruptible {    byte[] the_mark = the_block.mark;    int first_free = 0, i = 0, j;    VM_Address current, next;        if (VM.VerifyAssertions && the_mark == null) {      VM.sysWriteln("mark = ", VM_Magic.objectAsAddress(the_mark));      VM.sysWriteln("size = ", GC_SIZEVALUES[the_size.ndx]);    }    if (VM.VerifyAssertions) VM.assert(the_mark != null);    for (; i < the_mark.length ; i++) {      if (the_mark[i] == 0) break;    }