private bool DoNext() { if (loneState != null) { RestoreState(loneState); loneState = null; return true; } else { if (exhausted) { return false; } else if (input.IncrementToken()) { return true; } else { exhausted = true; return false; } } }