if (VM.VerifyAssertions) VM.assert(current.sameRange(currentI));
if (VM.VerifyAssertions) VM._assert(current.sameRange(currentI));
    CompoundInterval removeIntervalsAndCache(CompoundInterval i) {      CompoundInterval result = new CompoundInterval(i.getRegister());      Iterator myIterator = iterator();      Iterator otherIterator = i.iterator();      BasicInterval current = myIterator.hasNext() ?        (BasicInterval)myIterator.next(): null;      BasicInterval currentI = otherIterator.hasNext() ?         (BasicInterval)otherIterator.next() : null;      while (currentI != null && current != null) {        if (current.startsBefore(currentI)) {          current = myIterator.hasNext() ?            (BasicInterval)myIterator.next(): null;        } else if (currentI.startsBefore(current)) {          currentI = otherIterator.hasNext() ?             (BasicInterval)otherIterator.next() : null;        } else {          if (VM.VerifyAssertions) VM.assert(current.sameRange(currentI));          currentI = otherIterator.hasNext() ?             (BasicInterval)otherIterator.next() : null;          BasicInterval next = myIterator.hasNext() ?            (BasicInterval)myIterator.next(): null;          // add the interval to the cache          result.add(current);          current = next;        }      }      // SJF: the loop as written is slightly more efficient than calling      // removeAll().  However, for some reason, replacing the loop with      // the call to removeAll breaks the compiler on OptTestHarness      // -oc:O2 -method VM_Method replaceCharWithString -.  This is deeply      // disturbing.  TODO: fix it.  (Hope the problem goes away if/when      // we migrate to classpath libraries).      // removeAll(result);      for (Iterator it = result.iterator(); it.hasNext(); ) {        BasicInterval b = (BasicInterval)it.next();        remove(b);      }            return result;    }