agePropagate = Word.max(); if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(!worklist.isEmpty());  ObjectReference ref = worklist.pop(); while (!ref.isNull()) { Word currentAge = VM.traceInterface.getDeathTime(ref);  if (currentAge.LE(agePropagate)) {  agePropagate = currentAge;  Scan.scanObject(getTraceLocal(), ref); }  ref = worklist.pop(); }
if (!worklist.isEmpty()) {  agePropagate = Word.max();  ObjectReference ref = worklist.pop(); while (!ref.isNull()) { Word currentAge = VM.traceInterface.getDeathTime(ref);  if (currentAge.LE(agePropagate)) {  agePropagate = currentAge;  Scan.scanObject(getTraceLocal(), ref); }  ref = worklist.pop(); } }
  private static final void computeTransitiveClosure() {    /* The latest time an object can die. */    agePropagate = Word.max();    if (VM.VERIFY_ASSERTIONS) VM.assertions._assert(!worklist.isEmpty());    /* Process through the entire buffer. */    ObjectReference ref = worklist.pop();    while (!ref.isNull()) {      Word currentAge = VM.traceInterface.getDeathTime(ref);      /* This is a cheap and simple test to process objects only once. */      if (currentAge.LE(agePropagate)) {        /* Set the "new" dead age. */        agePropagate = currentAge;        /* Scan the object, pushing the survivors */        Scan.scanObject(getTraceLocal(), ref);      }      /* Get the next object to process */      ref = worklist.pop();    }  }