next->RemoveRange(aStart, aEnd); return;
rv = next->RemoveRange(aStart, aEnd); return rv;
  void RemoveRange(PRInt32 aStart, PRInt32 aEnd) {    // Do the start and end encompass us?    if (mMin >= aStart && mMax <= aEnd) {      // They do.  We should simply be excised from the list.      if (mPrev)        mPrev->mNext = mNext;      else        mSelection->mFirstRange = mNext;              nsTreeRange* next = mNext;      if (next)        next->mPrev = mPrev;      mPrev = mNext = nsnull;      delete this;      if (next)        next->RemoveRange(aStart, aEnd);      return;    }    // See if this range overlaps.    else if (aStart >= mMin && aStart <= mMax) {      // We start within this range.      // Do we also end within this range?      if (aEnd >= mMin && aEnd <= mMax) {        // We do.  This range should be split into        // two new ranges.        PRInt32 aNewStart = aEnd+1;        PRInt32 aNewEnd = mMax;        mMax = aStart-1;        nsTreeRange* range = new nsTreeRange(mSelection, aNewStart, aNewEnd);        range->Connect(this, mNext);        return; // We're done, since we were entirely contained within this range.      }      else {        // The end goes outside our range.  We should        // move our max down to before the start.        mMax = aStart-1;        if (mNext)          mNext->RemoveRange(aStart, aEnd);      }    }    else if (aEnd >= mMin && aEnd <= mMax) {      // The start precedes our range, but the end is contained      // within us.  Pull the range up past the end.      mMin = aEnd+1;      return; // We're done, since we contained the end.    }    else {      // Neither the start nor the end was contained inside us, move on.      if (mNext)        mNext->RemoveRange(aStart, aEnd);    }  };